Merge lp:~tapaal-contributor/tapaal/rapid-drawing-fix-810906 into lp:tapaal

Proposed by Jakob Dyhr
Status: Merged
Approved by: Jiri Srba
Approved revision: 941
Merged at revision: 940
Proposed branch: lp:~tapaal-contributor/tapaal/rapid-drawing-fix-810906
Merge into: lp:tapaal
Diff against target: 219 lines (+78/-26)
4 files modified
src/pipe/gui/DrawingSurfaceImpl.java (+67/-24)
src/pipe/gui/GuiFrame.java (+9/-0)
src/pipe/gui/handler/ArcKeyboardEventHandler.java (+1/-1)
src/pipe/gui/undo/UndoManager.java (+1/-1)
To merge this branch: bzr merge lp:~tapaal-contributor/tapaal/rapid-drawing-fix-810906
Reviewer Review Type Date Requested Status
Jiri Srba Approve
Review via email: mp+324366@code.launchpad.net

Commit message

Holding ctrl when adding places/transitions now switches between adding places and transitions and connects arcs between them.

Description of the change

When holding ctrl and clicking with create place/transition tool, the user enters "fast mode" where the create tool switches between creating places and transitions. When creating an object, an outgoing arc is attached to it, and it will also be attached to the next created object, unless the user cancels the process by changing tool.

The implementation lacks a way to cancel the current arc being drawn other than by changing to another tool from the menu.
Undo first removes the arc, and then the place/transition that was last drawn, instead of removing both arc and place/transition.

To post a comment you must log in.
Revision history for this message
Jiri Srba (srba) wrote :

Tested and works fine, the small drawbacks are not important.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/pipe/gui/DrawingSurfaceImpl.java'
2--- src/pipe/gui/DrawingSurfaceImpl.java 2015-11-23 17:12:41 +0000
3+++ src/pipe/gui/DrawingSurfaceImpl.java 2017-05-20 20:24:03 +0000
4@@ -1,14 +1,8 @@
5 package pipe.gui;
6
7-import java.awt.Component;
8-import java.awt.Container;
9-import java.awt.Cursor;
10-import java.awt.Dimension;
11-import java.awt.Graphics;
12-import java.awt.Graphics2D;
13-import java.awt.Point;
14-import java.awt.Rectangle;
15+import java.awt.*;
16 import java.awt.event.MouseEvent;
17+import java.awt.event.MouseListener;
18 import java.awt.event.MouseWheelEvent;
19 import java.awt.print.PageFormat;
20 import java.awt.print.Printable;
21@@ -20,6 +14,7 @@
22 import javax.swing.JViewport;
23 import javax.swing.SwingUtilities;
24 import javax.swing.event.MouseInputAdapter;
25+
26 import pipe.dataLayer.DataLayer;
27 import pipe.dataLayer.Template;
28 import pipe.gui.GuiFrame.GUIMode;
29@@ -31,19 +26,8 @@
30 import pipe.gui.graphicElements.Place;
31 import pipe.gui.graphicElements.PlaceTransitionObject;
32 import pipe.gui.graphicElements.Transition;
33-import pipe.gui.graphicElements.tapn.TimedInputArcComponent;
34-import pipe.gui.graphicElements.tapn.TimedPlaceComponent;
35-import pipe.gui.graphicElements.tapn.TimedTransitionComponent;
36-import pipe.gui.graphicElements.tapn.TimedTransportArcComponent;
37-import pipe.gui.handler.AnimationHandler;
38-import pipe.gui.handler.AnnotationNoteHandler;
39-import pipe.gui.handler.ArcHandler;
40-import pipe.gui.handler.LabelHandler;
41-import pipe.gui.handler.PlaceHandler;
42-import pipe.gui.handler.TAPNTransitionHandler;
43-import pipe.gui.handler.TimedArcHandler;
44-import pipe.gui.handler.TransitionHandler;
45-import pipe.gui.handler.TransportArcHandler;
46+import pipe.gui.graphicElements.tapn.*;
47+import pipe.gui.handler.*;
48 import pipe.gui.undo.AddPetriNetObjectEdit;
49 import pipe.gui.undo.AddTimedPlaceCommand;
50 import pipe.gui.undo.AddTimedTransitionCommand;
51@@ -59,9 +43,7 @@
52 public class DrawingSurfaceImpl extends JLayeredPane implements Observer,
53 Printable, DrawingSurface {
54 private static final long serialVersionUID = 4434596266503933386L;
55-
56 private boolean netChanged = false;
57-
58 private boolean animationmode = false;
59
60 public Arc createArc; // no longer static
61@@ -618,10 +600,13 @@
62 @Override
63 public void mousePressed(MouseEvent e) {
64 if(app.getGUIMode().equals(GUIMode.animation)) return;
65-
66+
67+ // check for control down here enables it to attach the arc being drawn to an existing place/transition
68+
69 Point start = e.getPoint();
70 Point p;
71 if (SwingUtilities.isLeftMouseButton(e)) {
72+
73 Pipe.ElementType mode = app.getMode();
74 switch (mode) {
75 case PLACE:
76@@ -635,13 +620,19 @@
77 break;
78
79 case TAPNPLACE:
80+ // create place
81 PlaceTransitionObject pto2 = newTimedPlace(e.getPoint());
82 getUndoManager().addNewEdit(
83 new AddTimedPlaceCommand(
84 (TimedPlaceComponent) pto2, model,
85 guiModel, view));
86 if (e.isControlDown()) {
87+ // connect arc
88+ app.setMode(ElementType.TAPNARC);
89+ getPlaceTransitionObjectHandlerOf(pto2).mousePressed(e);
90+ getPlaceTransitionObjectHandlerOf(pto2).mouseReleased(e);
91 app.setFastMode(ElementType.FAST_TRANSITION);
92+ // enter fast mode
93 pnObject.dispatchEvent(e);
94 }
95 break;
96@@ -658,12 +649,18 @@
97 }
98 break;
99 case TAPNTRANS:
100+ // create transition
101 pto = newTAPNTransition(e.getPoint());
102 getUndoManager().addNewEdit(
103 new AddTimedTransitionCommand(
104 (TimedTransitionComponent) pto, model,
105 guiModel, view));
106 if (e.isControlDown()) {
107+ // connect arc
108+ app.setMode(ElementType.TAPNARC);
109+ getPlaceTransitionObjectHandlerOf(pto).mousePressed(e);
110+ getPlaceTransitionObjectHandlerOf(pto).mouseReleased(e);
111+ // enter fast mode
112 app.setFastMode(ElementType.FAST_PLACE);
113 pnObject.dispatchEvent(e);
114 }
115@@ -705,6 +702,44 @@
116 dragStart = new Point(start);
117 break;
118
119+ case FAST_TRANSITION:
120+ // create transition
121+ pto = newTAPNTransition(e.getPoint());
122+ getUndoManager().addNewEdit(new AddTimedTransitionCommand((TimedTransitionComponent) pto, model, guiModel, view));
123+ app.setMode(ElementType.TAPNARC);
124+ getPlaceTransitionObjectHandlerOf(pto).mouseReleased(e);
125+
126+ if (e.isControlDown()) {
127+ // connect arc
128+ pnObject.dispatchEvent(e);
129+ app.setMode(ElementType.TAPNARC);
130+ getPlaceTransitionObjectHandlerOf(pto).mousePressed(e);
131+ getPlaceTransitionObjectHandlerOf(pto).mouseReleased(e);
132+ // enter fast mode
133+ app.setFastMode(ElementType.FAST_PLACE);
134+ } else{
135+ app.endFastMode();
136+ }
137+ break;
138+ case FAST_PLACE:
139+ // create place
140+ PlaceTransitionObject pto3 = newTimedPlace(e.getPoint());
141+ getUndoManager().addNewEdit(new AddTimedPlaceCommand((TimedPlaceComponent) pto3, model, guiModel, view));
142+ app.setMode(ElementType.TAPNARC);
143+ getPlaceTransitionObjectHandlerOf(pto3).mouseReleased(e);
144+
145+ if (e.isControlDown()) {
146+ // connect arc
147+ pnObject.dispatchEvent(e);
148+ app.setMode(ElementType.TAPNARC);
149+ getPlaceTransitionObjectHandlerOf(pto3).mousePressed(e);
150+ getPlaceTransitionObjectHandlerOf(pto3).mouseReleased(e);
151+ // enter fast mode
152+ app.setFastMode(ElementType.FAST_TRANSITION);
153+ } else{
154+ app.endFastMode();
155+ }
156+ break;
157 default:
158 break;
159 }
160@@ -715,6 +750,14 @@
161 updatePreferredSize();
162 }
163
164+ private MouseListener getPlaceTransitionObjectHandlerOf(PlaceTransitionObject obj){
165+ for (MouseListener listener : obj.getMouseListeners()) {
166+ if (listener instanceof PlaceTransitionObjectHandler)
167+ return listener;
168+ }
169+ return null;
170+ }
171+
172 private void addPoint(final Arc createArc, final MouseEvent e) {
173 int x = Grid.getModifiedX(e.getX());
174 int y = Grid.getModifiedY(e.getY());
175
176=== modified file 'src/pipe/gui/GuiFrame.java'
177--- src/pipe/gui/GuiFrame.java 2016-11-14 09:58:40 +0000
178+++ src/pipe/gui/GuiFrame.java 2017-05-20 20:24:03 +0000
179@@ -1750,6 +1750,15 @@
180 setMode(old_mode);
181 }
182
183+ public void endFastMode(){
184+ if(timedPlaceAction.isSelected())
185+ mode=ElementType.TAPNPLACE;
186+ else if(transAction.isSelected())
187+ mode=ElementType.TAPNTRANS;
188+ else
189+ mode=ElementType.SELECT;
190+ }
191+
192 public void setFastMode(Pipe.ElementType _mode) {
193 old_mode = mode;
194 setMode(_mode);
195
196=== modified file 'src/pipe/gui/handler/ArcKeyboardEventHandler.java'
197--- src/pipe/gui/handler/ArcKeyboardEventHandler.java 2011-09-23 21:18:31 +0000
198+++ src/pipe/gui/handler/ArcKeyboardEventHandler.java 2017-05-20 20:24:03 +0000
199@@ -43,7 +43,7 @@
200
201 if ((CreateGui.getApp().getMode() == ElementType.FAST_PLACE)
202 || (CreateGui.getApp().getMode() == ElementType.FAST_TRANSITION)) {
203- CreateGui.getApp().resetMode();
204+ CreateGui.getApp().endFastMode();
205 }
206 aView.repaint();
207 break;
208
209=== modified file 'src/pipe/gui/undo/UndoManager.java'
210--- src/pipe/gui/undo/UndoManager.java 2012-10-11 15:01:09 +0000
211+++ src/pipe/gui/undo/UndoManager.java 2017-05-20 20:24:03 +0000
212@@ -216,7 +216,7 @@
213 private void checkMode() {
214 if ((app.getMode() == Pipe.ElementType.FAST_PLACE)
215 || (app.getMode() == Pipe.ElementType.FAST_TRANSITION)) {
216- app.resetMode();
217+ app.endFastMode();
218 }
219 }
220

Subscribers

People subscribed via source and target branches