/*
* Created on 28-Feb-2004
* Author is Michael Camacho
*
*/
package pipe.handlers;
import pipe.actions.gui.DeleteArcPathPointAction;
import pipe.actions.gui.PipeApplicationModel;
import pipe.actions.petrinet.SplitArcPointAction;
import pipe.controllers.ArcController;
import pipe.controllers.PetriNetController;
import pipe.views.ArcPathPoint;
import uk.ac.imperial.pipe.models.petrinet.ArcPoint;
import javax.swing.*;
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.geom.Point2D;
/**
* Arc path point handler
*/
public class ArcPathPointHandler extends PetriNetObjectHandler<ArcPoint> {
/**
* Arc controller that the path point belongs to
*/
private final ArcController<?, ?> arcController;
/**
*
* @param contentpane content pane
* @param arcPathPoint arc path point
* @param controller Petri net controller the arc point belongs in
* @param arcController arc controller the path point belongs to
* @param applicationModel main PIPE application model
*/
public ArcPathPointHandler(Container contentpane, ArcPathPoint arcPathPoint, PetriNetController controller,
ArcController<?, ?> arcController, PipeApplicationModel applicationModel) {
super(contentpane, arcPathPoint.getModel(), controller, applicationModel);
this.arcController = arcController;
enablePopup = true;
}
/**
* Creates the popup menu that the user will see when they right click on a component
*/
@Override
public JPopupMenu getPopup(MouseEvent event) {
JPopupMenu popup = new JPopupMenu();
JMenuItem menuItem =
new JMenuItem(new DeleteArcPathPointAction(component, arcController));
menuItem.setText("Delete");
popup.add(menuItem);
//TODO: Put these back in!
//
// if (!(viewComponent.isDeleteable())) {
// popup.getComponent(0).setEnabled(false);
// }
//
// popup.insert(new JPopupMenu.Separator(), 0);
//
// if (viewComponent.getIndex() > 0) {
// menuItem = new JMenuItem(new ToggleArcPointAction(component, arcController));
// if (!component.isCurved()) {
// menuItem.setText("Change to Curved");
// } else {
// menuItem.setText("Change to Straight");
// }
// popup.insert(menuItem, 0);
// }
menuItem = new JMenuItem(new SplitArcPointAction(component, arcController));
menuItem.setText("Split Point");
popup.add(menuItem, 1);
return popup;
}
/**
* When the mouse is pressed on the arc point select it
* @param e mouse event
*/
@Override
public void mousePressed(MouseEvent e) {
((ArcPathPoint) e.getComponent()).setVisibilityLock(true);
petriNetController.select(component);
MouseEvent newEvent = SwingUtilities.convertMouseEvent(e.getComponent(), e, contentPane);
Point2D.Double point = new Point2D.Double(newEvent.getX(), newEvent.getY());
dragManager.setDragStart(point);
super.mousePressed(e);
}
/**
* When the mouse is released on the arc point, deselect it
* @param e mouse event
*/
@Override
public void mouseReleased(MouseEvent e) {
((ArcPathPoint) e.getComponent()).setVisibilityLock(false);
petriNetController.deselect(component);
super.mouseReleased(e);
}
/**
* When the mouse is dragged on an arc point, move it
* @param e mouse event
*/
@Override
public void mouseDragged(MouseEvent e) {
if (component.isDraggable()) {
super.mouseDragged(e);
}
}
/**
* Noop action
* @param e mouse event
*/
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// No action
}
}