package pipe.views;
import pipe.actions.gui.PipeApplicationModel;
import pipe.constants.GUIConstants;
import pipe.controllers.PetriNetController;
import uk.ac.imperial.pipe.models.petrinet.Arc;
import uk.ac.imperial.pipe.models.petrinet.Place;
import uk.ac.imperial.pipe.models.petrinet.Transition;
import javax.swing.event.MouseInputAdapter;
import java.awt.*;
import java.awt.geom.AffineTransform;
/**
* View of an inhibitor arc that connects places to transitions
*/
public class InhibitorArcView extends ArcView<Place, Transition> {
/**
* The graphical representation of the arc head
*/
private ArcHead arcHead = new InhibitorArcHead();
/**
* Constructor
* @param model underlying inhibitor arc
* @param controller Petri net controller for the Petri net the arc is house in
* @param parent parent of this view
* @param handler mouse action handler when mouse events are performed on the arc
* @param applicationModel main PIPE application model
*/
public InhibitorArcView(Arc<Place, Transition> model, PetriNetController controller, Container parent, MouseInputAdapter handler, PipeApplicationModel applicationModel) {
super(model, controller, parent, handler, applicationModel);
}
/**
* When the arc is added to the container the inhibitor view will add the arc path points to it
* @param container to add itself to
*/
@Override
public void addToContainer(Container container) {
updatePath();
}
/**
* Paints the arc and its path using the arcHead
* @param g graphics
*/
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
AffineTransform reset = g2.getTransform();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.translate(getComponentDrawOffset() + ZOOM_GROW - arcPath.getBounds().getX(),
getComponentDrawOffset() + ZOOM_GROW - arcPath.getBounds().getY());
if (isSelected() && !ignoreSelection) {
g2.setPaint(GUIConstants.SELECTION_LINE_COLOUR);
} else {
g2.setPaint(GUIConstants.ELEMENT_LINE_COLOUR);
}
g2.setStroke(new BasicStroke(1f));
g2.draw(arcPath);
g2.translate(arcPath.getPoint(arcPath.getEndIndex()).getX(), arcPath.getPoint(arcPath.getEndIndex()).getY());
g2.rotate(model.getEndAngle());
arcHead.draw(g2);
if (isSelected() && !ignoreSelection) {
g2.setPaint(GUIConstants.SELECTION_LINE_COLOUR);
} else {
g2.setPaint(GUIConstants.ELEMENT_LINE_COLOUR);
}
g2.setTransform(reset);
}
}