package pipe.actions.gui;
import pipe.controllers.DragManager;
import pipe.controllers.PetriNetController;
import pipe.controllers.SelectionManager;
import pipe.controllers.application.PipeApplicationController;
import pipe.gui.PetriNetTab;
import pipe.views.PipeApplicationView;
import uk.ac.imperial.pipe.models.petrinet.Connectable;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
public class SelectAction extends CreateAction {
private final PipeApplicationView pipeApplicationView;
private final PipeApplicationController pipeApplicationController;
public SelectAction(PipeApplicationModel applicationModel, PipeApplicationView pipeApplicationView,
PipeApplicationController pipeApplicationController) {
super("Select", "Select components (alt-S)", KeyEvent.VK_S, InputEvent.ALT_DOWN_MASK, applicationModel);
this.pipeApplicationView = pipeApplicationView;
this.pipeApplicationController = pipeApplicationController;
}
@Override
public void doAction(MouseEvent event, PetriNetController petriNetController) {
// No action needed
}
@Override
public <T extends Connectable> void doConnectableAction(T connectable, PetriNetController petriNetController) {
if (!petriNetController.isSelected(connectable)) {
SelectionManager selectionManager =
pipeApplicationController.getActivePetriNetController().getSelectionManager();
selectionManager.clearSelection();
}
petriNetController.select(connectable);
DragManager dragManager = petriNetController.getDragManager();
dragManager.setDragStart(connectable.getCentre());
}
@Override
public void actionPerformed(ActionEvent e) {
super.actionPerformed(e);
if (pipeApplicationView.areAnyTabsDisplayed()) {
PetriNetTab petriNetTab = pipeApplicationView.getCurrentTab();
SelectionManager selectionManager =
pipeApplicationController.getActivePetriNetController().getSelectionManager();
selectionManager.enableSelection();
petriNetTab.setCursorType("arrow");
}
}
}