// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.graph.ui; import graphtea.platform.core.BlackBoard; import graphtea.platform.core.exception.ExceptionHandler; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.util.HashMap; /** * provides a tabbed UI Interface for editing multiple graphs in multiple tabs * * @author Azin Azadi */ public class GTabbedPane { public static final String NAME = "GTabbedPane"; public static final String CURRENT_COMPONENT = "GTabbedPane current component"; public JTabbedPane jtp; public BlackBoard blackboard; public GTabbedPane(BlackBoard b) { blackboard = b; jtp = new JTabbedPane(); // jtp.setDoubleBuffered(true); jtp.setBorder(null); jtp.setOpaque(false); // jtp.setBackground(Color.white); jtp.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { reTab(); } }); b.setData(GTabbedPane.NAME, this); } protected void reTab() { JComponent sc = (JComponent) jtp.getSelectedComponent(); blackboard.setData(CURRENT_COMPONENT, sc); } public JTabbedPane getTabedPane() { return jtp; } /** * adds a tab to the tabbed pane, if addHelper=true, the added component will be a * GSplitedPane which have a GHTMLPageComponent on it's top as a helper * * @param title The component title * @param component The component * @param addHelper Switch for helper */ public JComponent addComponent(String title, JComponent component, boolean addHelper) { if (addHelper) component = new GSplitedPane(new GHTMLPageComponent(blackboard), component); jtp.addTab(title, component); jtp.setSelectedComponent(component); jtp.setTabComponentAt(jtp.getTabCount() - 1, new graphtea.graph.old.ButtonTabComponent(jtp)); return component; } public HashMap<Class, Class<? extends JComponent>> supportedType = new HashMap<>(); public void add(Object o, String label) { if (supportedType.containsKey(o.getClass())) { try { JComponent c = (JComponent) supportedType.get(o.getClass()).getConstructors()[0].newInstance(o); jtp.addTab(label, c); jtp.setSelectedComponent(c); } catch (Exception e) { ExceptionHandler.catchException(e); } } else System.err.println("Error in type"); } public void registerType(Class clazz, Class<? extends JComponent> jcclazz) { supportedType.put(clazz, jcclazz); } }