package pipe.handlers; import pipe.actions.gui.PipeApplicationModel; import pipe.controllers.PetriNetController; import pipe.gui.widgets.EscapableDialog; import pipe.gui.widgets.TransitionEditorPanel; import uk.ac.imperial.pipe.models.petrinet.Transition; import javax.swing.*; import java.awt.Container; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; /** * Class used to implement methods corresponding to mouse events on transitions. */ public class TransitionHandler extends ConnectableHandler<Transition> { /** * Constructor * @param contentpane parent pane of the transition view * @param transition underlying transition model * @param controller Petri net controller for the Petri net the transition is housed in * @param applicationModel main PIPE application model */ public TransitionHandler(Container contentpane, Transition transition, PetriNetController controller, PipeApplicationModel applicationModel) { super(contentpane, transition, controller, applicationModel); } /** * Noop action * @param e mouse event */ @Override public void mouseWheelMoved(MouseWheelEvent e) { //No action needed } /** * Creates the popup menu that the user will see when they right click on a * component * @param e mouse event * @return popup menu */ @Override protected JPopupMenu getPopup(MouseEvent e) { int index = 0; JPopupMenu popup = super.getPopup(e); JMenuItem menuItem = new JMenuItem("Edit Transition"); menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showEditor(); } }); popup.insert(menuItem, index++); popup.insert(new JPopupMenu.Separator(), index); return popup; } /** * Displays the editor dialog for the transition */ public void showEditor() { Window window = SwingUtilities.getWindowAncestor(contentPane); EscapableDialog guiDialog = new EscapableDialog(window, "PIPE", true); TransitionEditorPanel te = new TransitionEditorPanel(guiDialog.getRootPane(), petriNetController.getTransitionController(component), petriNetController); guiDialog.add(te); guiDialog.getRootPane().setDefaultButton(null); guiDialog.setResizable(false); guiDialog.pack(); guiDialog.setLocationRelativeTo(null); guiDialog.setVisible(true); } }