package pipe.handlers; import pipe.actions.gui.CreateAction; import pipe.actions.gui.PipeApplicationModel; import pipe.controllers.PetriNetController; import pipe.gui.PetriNetTab; import javax.swing.*; import javax.swing.event.MouseInputAdapter; import java.awt.Cursor; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; /** * PetriNetMouseHandler handles mouse press inputs on a given petri net tab. * It works out what action is selected (e.g. create new place) and makes this happen. */ public class PetriNetMouseHandler extends MouseInputAdapter { /** * Main PIPE application model */ private final PipeApplicationModel applicationModel; /** * Petri net tab */ private final PetriNetTab petriNetTab; /** * Starting location of the petri net components drag */ private Point dragStart = new Point(0,0); /** * Main PIPE application controller */ private PetriNetController petriNetController; /** * * @param applicationModel main PIPE application model * @param controller main PIPE application controller * @param petriNetTab Petri net tab */ public PetriNetMouseHandler(PipeApplicationModel applicationModel, PetriNetController controller, PetriNetTab petriNetTab) { super(); this.applicationModel = applicationModel; this.petriNetTab = petriNetTab; this.petriNetController = controller; } /** * Performs the corresponding selected toolbar action on the component * @param event mouse event */ @Override public void mousePressed(MouseEvent event) { if (SwingUtilities.isLeftMouseButton(event)) { doAction(event); } } /** * Performs action on the petri net if an aciton * has been selected and if the petri net is not in animation mode * * @param event mouse event */ private void doAction(MouseEvent event) { CreateAction action = applicationModel.getSelectedAction(); if (action != null && !applicationModel.isInAnimationMode()) { action.doAction(event, petriNetController); } } /** * Changes the cursor to a cross hair * @param e mouse event */ @Override public void mouseReleased(MouseEvent e) { petriNetTab.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); } /** * Noop * @param e mouse event */ @Override public void mouseWheelMoved(MouseWheelEvent e) { // No action needed } /** * Sets the starting drag point * @param e mouse event */ @Override public void mouseDragged(MouseEvent e) { petriNetTab.drag(dragStart, e.getPoint()); } /** * Performs the movement action of the toolbar action selected on the component * @param event mouse event */ @Override public void mouseMoved(MouseEvent event) { doAction(event); } }