package pipe.actions.gui;
import pipe.controllers.PetriNetController;
import uk.ac.imperial.pipe.models.petrinet.Connectable;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
/**
* This action is responsible for the actions that lead to creating components on the
* Petri net canvas
*/
@SuppressWarnings("serial")
public abstract class CreateAction extends GuiAction {
/**
* Application model
*/
private final PipeApplicationModel applicationModel;
/**
* Create action constructor
* @param name name of action
* @param tooltip string displayed when the user hovers over the corresponding action button on the toolbar.
* @param key keyboard short cut
* @param modifiers keyboard short cut modifiers
* @param applicationModel overall PIPE application model
*/
public CreateAction(String name, String tooltip, int key, int modifiers, PipeApplicationModel applicationModel) {
super(name, tooltip, key, modifiers);
this.applicationModel = applicationModel;
}
/**
* Action that happens when a mouse press event is fired on the petri net whilst
* this action is selected
*
* @param event mouse event
* @param petriNetController controller for the petri net
*/
public abstract void doAction(MouseEvent event, PetriNetController petriNetController);
/**
* Action that happens when a mouse press event is fired on a {@link pipe.views.ConnectableView}
* whilst this action is selected
*
* @param connectable item clicked
* @param petriNetController controller for the petri net
* @param <T> connectable type
*/
public abstract <T extends Connectable> void doConnectableAction(T connectable,
PetriNetController petriNetController);
/**
* When this action is clicked on the tool bar it sets the subclass to be the currently
* selected action in the application model.
* @param e event
*/
@Override
public void actionPerformed(ActionEvent e) {
applicationModel.selectTypeAction(this);
}
}