5
5
import java.awt.Graphics2D;
6
6
import java.awt.RenderingHints;
7
7
import java.awt.geom.AffineTransform;
8
import java.math.BigDecimal;
8
import java.util.Hashtable;
10
import pipe.gui.DrawingSurfaceImpl;
10
11
import pipe.gui.Pipe;
11
12
import pipe.gui.Zoomer;
13
import pipe.gui.handler.TimedArcHandler;
14
import pipe.gui.undo.ArcTimeIntervalEdit;
15
import dk.aau.cs.gui.undo.Command;
16
import dk.aau.cs.model.tapn.TimeInterval;
17
import dk.aau.cs.model.tapn.TimedArcPetriNet;
18
import dk.aau.cs.model.tapn.TimedInhibitorArc;
13
public class TAPNInhibitorArc extends TimedArc {
20
public class TimedInhibitorArcComponent extends TimedInputArcComponent {
18
21
private static final long serialVersionUID = 5492180277264669192L;
21
public TAPNInhibitorArc(NormalArc arc)
22
private TimedInhibitorArc inhibitorArc;
24
public TimedInhibitorArcComponent(TimedOutputArcComponent arc) {
25
public TAPNInhibitorArc(NormalArc arc, String guard)
28
public TimedInhibitorArcComponent(TimedOutputArcComponent arc, String guard) {
31
public TAPNInhibitorArc(PlaceTransitionObject source) {
32
public TimedInhibitorArcComponent(PlaceTransitionObject source) {
35
public boolean satisfiesGuard(BigDecimal token)
37
return !super.satisfiesGuard(token);
36
public void setUnderlyingArc(TimedInhibitorArc arc) {
37
this.inhibitorArc = arc;
38
updateWeightLabel(true);
41
public TimedInhibitorArc underlyingTimedInhibitorArc() {
46
public void delete() {
47
if (inhibitorArc != null)
48
inhibitorArc.delete();
53
public void updateWeightLabel(boolean displayConstantNames) {
54
weightLabel.setText("");
55
this.setWeightLabelPosition();
59
public String getGuardAsString() {
60
return inhibitorArc.interval().toString();
64
public Command setGuard(TimeInterval guard) {
66
TimeInterval oldTimeInterval = inhibitorArc.interval();
67
inhibitorArc.setTimeInterval(guard);
69
// hacks - I use the weight to display the TimeInterval
70
updateWeightLabel(true);
73
return new ArcTimeIntervalEdit(this, oldTimeInterval, inhibitorArc.interval());
77
public TimeInterval getGuard() {
78
return inhibitorArc.interval();
46
82
public void paintComponent(Graphics g) {
47
//super.paintComponent(g);
48
Graphics2D g2 = (Graphics2D)g;
50
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
51
RenderingHints.VALUE_ANTIALIAS_ON);
53
g2.translate(COMPONENT_DRAW_OFFSET + zoomGrow - myPath.getBounds().getX(),
54
COMPONENT_DRAW_OFFSET + zoomGrow - myPath.getBounds().getY());
56
if (selected && !ignoreSelection){
57
g2.setPaint(Pipe.SELECTION_LINE_COLOUR);
59
g2.setPaint(Pipe.ELEMENT_LINE_COLOUR);
62
g2.setStroke(new BasicStroke(0.01f * zoom));
65
g2.translate(myPath.getPoint(myPath.getEndIndex()).getX(),
66
myPath.getPoint(myPath.getEndIndex()).getY());
68
g2.rotate(myPath.getEndAngle()+Math.PI);
69
g2.setColor(java.awt.Color.WHITE);
71
AffineTransform reset = g2.getTransform();
72
g2.transform(Zoomer.getTransform(zoom));
74
g2.setStroke(new BasicStroke(0.8f));
75
g2.fillOval(-4,-8, 8, 8);
77
if (selected && !ignoreSelection){
78
g2.setPaint(Pipe.SELECTION_LINE_COLOUR);
80
g2.setPaint(Pipe.ELEMENT_LINE_COLOUR);
82
g2.drawOval(-4,-8, 8, 8);
84
g2.setTransform(reset);
83
// super.paintComponent(g);
84
Graphics2D g2 = (Graphics2D) g;
86
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
87
RenderingHints.VALUE_ANTIALIAS_ON);
89
g2.translate(COMPONENT_DRAW_OFFSET + zoomGrow
90
- myPath.getBounds().getX(), COMPONENT_DRAW_OFFSET + zoomGrow
91
- myPath.getBounds().getY());
93
if (selected && !ignoreSelection) {
94
g2.setPaint(Pipe.SELECTION_LINE_COLOUR);
96
g2.setPaint(Pipe.ELEMENT_LINE_COLOUR);
99
g2.setStroke(new BasicStroke(0.01f * zoom));
102
g2.translate(myPath.getPoint(myPath.getEndIndex()).getX(), myPath
103
.getPoint(myPath.getEndIndex()).getY());
105
g2.rotate(myPath.getEndAngle() + Math.PI);
106
g2.setColor(java.awt.Color.WHITE);
108
AffineTransform reset = g2.getTransform();
109
g2.transform(Zoomer.getTransform(zoom));
111
g2.setStroke(new BasicStroke(0.8f));
112
g2.fillOval(-4, -8, 8, 8);
114
if (selected && !ignoreSelection) {
115
g2.setPaint(Pipe.SELECTION_LINE_COLOUR);
117
g2.setPaint(Pipe.ELEMENT_LINE_COLOUR);
119
g2.drawOval(-4, -8, 8, 8);
121
g2.setTransform(reset);
124
public TimedInhibitorArcComponent copy(TimedArcPetriNet tapn, DataLayer guiModel, Hashtable<PlaceTransitionObject, PlaceTransitionObject> oldToNewMapping) {
125
TimedInhibitorArcComponent arc = new TimedInhibitorArcComponent(this);
126
arc.setSource(oldToNewMapping.get(this.getSource()));
127
arc.setTarget(oldToNewMapping.get(this.getTarget()));
129
arc.getSource().addConnectFrom(arc);
130
arc.getTarget().addConnectTo(arc);
132
arc.setUnderlyingArc(tapn.getInhibitorArcFromPlaceAndTransition(tapn.getPlaceByName(inhibitorArc.source().name()), tapn.getTransitionByName(inhibitorArc.destination().name())));
134
TimedArcHandler timedArcHandler = new TimedArcHandler((DrawingSurfaceImpl)getParent(), arc);
135
arc.addMouseListener(timedArcHandler);
136
arc.addMouseWheelListener(timedArcHandler);
137
arc.addMouseMotionListener(timedArcHandler);
139
arc.setGuiModel(guiModel);