1
package pipe.dataLayer;
3
import java.awt.BasicStroke;
4
import java.awt.Container;
5
import java.awt.Graphics;
6
import java.awt.Graphics2D;
7
import java.awt.RenderingHints;
8
import java.awt.Stroke;
9
import java.awt.geom.AffineTransform;
10
import java.awt.geom.GeneralPath;
11
import java.awt.geom.Rectangle2D;
13
import javax.swing.BoxLayout;
15
import pipe.gui.CreateGui;
16
import pipe.gui.DrawingSurfaceImpl;
18
import pipe.gui.handler.AnimationHandler;
19
import pipe.gui.handler.LabelHandler;
20
import pipe.gui.handler.TAPNTransitionHandler;
21
import pipe.gui.handler.TransitionHandler;
22
import pipe.gui.widgets.EscapableDialog;
23
import pipe.gui.widgets.TAPNTransitionEditor;
24
import dk.aau.cs.gui.Context;
25
import dk.aau.cs.gui.undo.Command;
26
import dk.aau.cs.model.tapn.TimedArcPetriNet;
27
import dk.aau.cs.model.tapn.TimedTransition;
28
import dk.aau.cs.model.tapn.event.TimedTransitionEvent;
29
import dk.aau.cs.model.tapn.event.TimedTransitionListener;
31
public class TimedTransitionComponent extends Transition {
32
private static final long serialVersionUID = -2280012053262288174L;
33
private dk.aau.cs.model.tapn.TimedTransition transition;
34
private dk.aau.cs.model.tapn.event.TimedTransitionListener listener;
35
private GeneralPath dashedOutline;
37
public TimedTransitionComponent(double positionXInput, double positionYInput,
38
dk.aau.cs.model.tapn.TimedTransition transition) {
39
super(positionXInput, positionYInput);
40
this.transition = transition;
41
this.listener = timedTransitionListener();
42
transition.addTimedTransitionListener(listener);
45
public TimedTransitionComponent(double positionXInput,
46
double positionYInput, String idInput, String nameInput,
47
double nameOffsetXInput, double nameOffsetYInput,
48
boolean timedTransition, boolean infServer, int angleInput,
50
super(positionXInput, positionYInput, idInput, nameInput,
51
nameOffsetXInput, nameOffsetYInput, timedTransition, infServer,
52
angleInput, priority);
53
this.listener = timedTransitionListener();
54
//transition = new dk.aau.cs.model.tapn.TimedTransition(nameInput);
57
private TimedTransitionListener timedTransitionListener(){
58
return new TimedTransitionListener() {
59
public void nameChanged(TimedTransitionEvent e) {
60
TimedTransition source = e.source();
61
TimedTransitionComponent.super.setName(source.name());
64
public void sharedStateChanged(TimedTransitionEvent e) { repaint(); }
69
public void delete() {
70
if (transition != null)
76
public void showEditor() {
78
EscapableDialog guiDialog = new EscapableDialog(CreateGui.getApp(),
79
Pipe.getProgramName(), true);
81
Container contentPane = guiDialog.getContentPane();
84
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
87
contentPane.add(new TAPNTransitionEditor(guiDialog.getRootPane(), this, new Context(CreateGui.getCurrentTab())));
89
guiDialog.setResizable(true);
91
// Make window fit contents' preferred size
94
// Move window to the middle of the screen
95
guiDialog.setLocationRelativeTo(null);
96
guiDialog.setVisible(true);
100
// public boolean isEnabled(boolean animationStatus) {
101
// if (animationStatus) {
102
// if (isEnabled()) {
103
// highlighted = true;
106
// highlighted = false;
113
public boolean isEnabled() {
114
return transition.isEnabled();
117
public dk.aau.cs.model.tapn.TimedTransition underlyingTransition() {
121
public void setUnderlyingTransition(TimedTransition transition) {
122
if(this.transition != null && listener != null){
123
transition.removeListener(listener);
125
transition.addTimedTransitionListener(listener);
126
this.transition = transition;
127
this.setName(transition.name());
132
public void setName(String nameInput) {
133
transition.setName(nameInput);
134
super.setName(nameInput);
137
public String getName() {
138
return transition != null ? transition.name() : "";
142
public void update(boolean displayConstantNames) {
143
if(transition != null) {
144
pnName.setName(transition.name());
145
pnName.zoomUpdate(zoom);
151
//updateLabelLocation();
158
public void paintComponent(Graphics g) {
159
super.paintComponent(g);
160
if(transition.isShared()){
161
Graphics2D graphics = (Graphics2D)g;
162
Stroke oldStroke = graphics.getStroke();
164
BasicStroke dashed = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {5.0f}, 0.0f);
165
graphics.setStroke(dashed);
167
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
168
graphics.draw(dashedOutline);
170
graphics.setStroke(oldStroke);
175
protected void constructTransition() {
176
super.constructTransition();
177
double x = ((componentWidth - TRANSITION_WIDTH - Pipe.DASHED_PADDING) / 2);
178
double y = -Pipe.DASHED_PADDING/2;
179
double width = TRANSITION_WIDTH + Pipe.DASHED_PADDING;
180
double height = TRANSITION_HEIGHT + Pipe.DASHED_PADDING;
181
dashedOutline = new GeneralPath(new Rectangle2D.Double(x, y, width, height));
185
public Command rotate(int angleInc) {
186
dashedOutline.transform(AffineTransform.getRotateInstance(Math.toRadians(angleInc), (componentWidth) / 2, (componentHeight) / 2));
187
return super.rotate(angleInc);
190
public TimedTransitionComponent copy(TimedArcPetriNet tapn, DataLayer guiModel) {
191
TimedTransitionComponent transitionComponent = new TimedTransitionComponent(positionX, positionY, id, transition.name(), nameOffsetX, nameOffsetY, true, isInfiniteServer(), getAngle(), getPriority());
192
transitionComponent.setUnderlyingTransition(tapn.getTransitionByName(transition.name()));
194
LabelHandler labelHandler = new LabelHandler(transitionComponent.getNameLabel(), transitionComponent);
195
transitionComponent.getNameLabel().addMouseListener(labelHandler);
196
transitionComponent.getNameLabel().addMouseMotionListener(labelHandler);
197
transitionComponent.getNameLabel().addMouseWheelListener(labelHandler);
199
TransitionHandler transitionHandler = new TAPNTransitionHandler((DrawingSurfaceImpl)getParent(), transitionComponent, guiModel, tapn);
200
transitionComponent.addMouseListener(transitionHandler);
201
transitionComponent.addMouseMotionListener(transitionHandler);
202
transitionComponent.addMouseWheelListener(transitionHandler);
204
transitionComponent.addMouseListener(new AnimationHandler());
206
transitionComponent.setGuiModel(guiModel);
208
return transitionComponent;