All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.yaoqiang.bpmn.editor.swing.TabbedPane Maven / Gradle / Ivy

package org.yaoqiang.bpmn.editor.swing;

import java.awt.Component;
import java.awt.IllegalComponentStateException;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.EventObject;

import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.yaoqiang.bpmn.editor.BPMNEditor;
import org.yaoqiang.bpmn.editor.action.EditorActions;
import org.yaoqiang.bpmn.editor.action.ModelActions;
import org.yaoqiang.graph.swing.GraphComponent;
import org.yaoqiang.graph.view.Graph;
import org.yaoqiang.util.Resources;

import com.mxgraph.swing.mxGraphComponent;

/**
 * TabbedPane
 * 
 * @author Shi Yaoqiang([email protected])
 */
public class TabbedPane extends JTabbedPane implements MouseListener, ChangeListener, ActionListener {

	private static final long serialVersionUID = 1L;

	private boolean maximized = false;

	public TabbedPane(final BaseEditor editor) {
		addMouseListener(this);
		addChangeListener(this);
	}

	public void actionPerformed(ActionEvent e) {

	}

	public void mouseClicked(MouseEvent e) {
		if (e.getID() == MouseEvent.MOUSE_CLICKED && e.getClickCount() == 2) {
			BaseEditor editor = getEditor(e);
			JSplitPane mainPane = editor.getMainPane();
			if (maximized) {
				mainPane.setDividerLocation(mainPane.getLastDividerLocation());
				maximized = false;
			} else {
				mainPane.setDividerLocation(0);
				maximized = true;
			}
		}
	}

	public void mousePressed(MouseEvent e) {
		mouseReleased(e);
	}

	public void mouseReleased(MouseEvent e) {
		if (e.isPopupTrigger()) {
			TabbedPane centerPane = (TabbedPane) e.getSource();
			Component c = centerPane.getSelectedComponent();
			if (c instanceof mxGraphComponent) {
				Point pt = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), c);
				JPopupMenu popup = new JPopupMenu();
				if (getEditor(e).getGraphComponent() == c) {
					popup.add(getEditor(e).bind(Resources.get("editDiagramName"), ModelActions.getAction(ModelActions.DIAGRAM_NAME),
							"/org/yaoqiang/bpmn/editor/images/edit.png"));
				} else if (getEditor(e).getGraphComponents().containsValue(c)) {
					popup.add(getEditor(e).bind(Resources.get("close"), EditorActions.getCloseCalledProcessAction(c.getName()),
							"/org/yaoqiang/bpmn/editor/images/delete.png"));
				}
				try {
					popup.show(c, pt.x, pt.y);
				} catch (IllegalComponentStateException ex) {
				}
			}
			e.consume();
		}
	}

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}

	public void stateChanged(ChangeEvent e) {
		BPMNEditor editor = (BPMNEditor) getEditor(e);
		Component c = ((JTabbedPane) e.getSource()).getSelectedComponent();
		if (c.getName() != null && c.getName().equals("BPMNView")) {
			editor.getBpmnView().refreshView(editor.getGraphComponent().getGraph());
		} else if (editor != null && c instanceof GraphComponent) {
			boolean reset = false;
			GraphComponent graphComponent = (GraphComponent) c;
			if (editor.getCurrentGraphComponent() != c) {
				reset = true;
			}
			editor.setCurrentGraphComponent(graphComponent);
			Graph graph = graphComponent.getGraph();
			graph.getView().setCurrentRoot(graphComponent.getLastViewRoot());
			graph.clearSelection();
			graph.refresh();
			editor.refreshGraphOverview();
			if (reset) {
				editor.getUndoManager().clear();
			}

			if (c.getName() != null && c.getName().equals("BPMNEditor")) {
				((JRadioButtonMenuItem) editor.getDiagramsMenu().getMenuComponent(0)).setSelected(true);
			} else {
				for (Component item : editor.getDiagramsMenu().getMenuComponents()) {
					if (item.getName().equals(c.getName())) {
						((JRadioButtonMenuItem) item).setSelected(true);
					}
				}
			}
		}
	}

	public void setTabTitle(String name, String title) {
		if (name == null) {
			setTitleAt(0, title);
			return;
		}
		for (int i = 0; i < getComponentCount(); i++) {
			Component com = getComponentAt(i);
			if (name.equals(com.getName())) {
				setTitleAt(i, title);
				return;
			}
		}
	}

	public String getTabTitle(String name, String defaultTitle) {
		if (name == null) {
			return getTitleAt(0);
		}
		for (int i = 0; i < getComponentCount(); i++) {
			Component com = getComponentAt(i);
			if (name.equals(com.getName())) {
				return getTitleAt(i);
			}
		}
		return defaultTitle;
	}

	public BaseEditor getEditor(EventObject e) {
		if (e.getSource() instanceof Component) {
			Component component = (Component) e.getSource();

			while (component != null && !(component instanceof BaseEditor)) {
				component = component.getParent();
			}

			return (BaseEditor) component;
		}

		return null;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy