Merge lp:~tapaal-contributor/tapaal/undo-redo-batchprocessing-1870904 into lp:tapaal

Proposed by Peter Haahr Taankvist
Status: Merged
Approved by: Jiri Srba
Approved revision: 1049
Merged at revision: 1050
Proposed branch: lp:~tapaal-contributor/tapaal/undo-redo-batchprocessing-1870904
Merge into: lp:tapaal
Diff against target: 285 lines (+125/-50)
4 files modified
src/dk/aau/cs/gui/BatchProcessingDialog.java (+45/-45)
src/dk/aau/cs/gui/undo/AddFileBatchProcessingCommand.java (+36/-0)
src/dk/aau/cs/gui/undo/RemoveFileBatchProcessingCommand.java (+36/-0)
src/pipe/gui/undo/UndoManager.java (+8/-5)
To merge this branch: bzr merge lp:~tapaal-contributor/tapaal/undo-redo-batchprocessing-1870904
Reviewer Review Type Date Requested Status
Jiri Srba Approve
Kenneth Yrke Jørgensen code Approve
Review via email: mp+383304@code.launchpad.net

Commit message

Add undo/redo functionality in file list in batch processing dialog

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

Works fine in trunk and can be merged there. Please, prepare also another branch that can be merged to 3.6.

Revision history for this message
Kenneth Yrke Jørgensen (yrke) wrote :

I think the Commands for the batch verification should not be mixed with the commands for the normal interface. I would suggest to movmoving them in a BatchVerification package. (Something like src.dk.aau.cs.gui.BatchProcessing.commands), would also move the BatchProcessingDialog to src.dk.aau.cs.gui.BatchProcessing.

review: Approve (code)
Revision history for this message
Jiri Srba (srba) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/dk/aau/cs/gui/BatchProcessingDialog.java'
2--- src/dk/aau/cs/gui/BatchProcessingDialog.java 2020-04-18 13:49:06 +0000
3+++ src/dk/aau/cs/gui/BatchProcessingDialog.java 2020-05-03 09:51:16 +0000
4@@ -1,15 +1,6 @@
5 package dk.aau.cs.gui;
6
7-import java.awt.Color;
8-import java.awt.Component;
9-import java.awt.Dimension;
10-import java.awt.FlowLayout;
11-import java.awt.Frame;
12-import java.awt.GridBagConstraints;
13-import java.awt.GridBagLayout;
14-import java.awt.GridLayout;
15-import java.awt.Insets;
16-import java.awt.Point;
17+import java.awt.*;
18 import java.awt.event.ActionEvent;
19 import java.awt.event.ActionListener;
20 import java.awt.event.KeyAdapter;
21@@ -23,28 +14,8 @@
22 import java.util.Comparator;
23 import java.util.List;
24
25-import javax.swing.AbstractAction;
26-import javax.swing.BorderFactory;
27-import javax.swing.ButtonGroup;
28-import javax.swing.DefaultListModel;
29-import javax.swing.JButton;
30-import javax.swing.JCheckBox;
31-import javax.swing.JComboBox;
32-import javax.swing.JDialog;
33-import javax.swing.JLabel;
34-import javax.swing.JList;
35-import javax.swing.JOptionPane;
36-import javax.swing.JPanel;
37-import javax.swing.JRadioButton;
38-import javax.swing.JScrollPane;
39-import javax.swing.JSeparator;
40-import javax.swing.JSplitPane;
41-import javax.swing.JTable;
42-import javax.swing.ListSelectionModel;
43-import javax.swing.SwingConstants;
44+import javax.swing.*;
45 import javax.swing.SwingWorker.StateValue;
46-import javax.swing.Timer;
47-import javax.swing.ToolTipManager;
48 import javax.swing.border.Border;
49 import javax.swing.event.ChangeEvent;
50 import javax.swing.event.ChangeListener;
51@@ -53,10 +24,14 @@
52 import javax.swing.table.TableModel;
53 import javax.swing.table.TableRowSorter;
54
55+import dk.aau.cs.gui.undo.AddFileBatchProcessingCommand;
56+import dk.aau.cs.gui.undo.Command;
57+import dk.aau.cs.gui.undo.RemoveFileBatchProcessingCommand;
58 import pipe.dataLayer.TAPNQuery;
59 import pipe.dataLayer.TAPNQuery.SearchOption;
60 import pipe.gui.CreateGui;
61 import net.tapaal.swinghelpers.CustomJSpinner;
62+import pipe.gui.undo.UndoManager;
63 import pipe.gui.widgets.EscapableDialog;
64 import pipe.gui.widgets.filebrowser.FileBrowser;
65 import pipe.gui.widgets.QueryPane;
66@@ -249,6 +224,7 @@
67
68 private List<File> files = new ArrayList<File>();
69 private BatchProcessingWorker currentWorker;
70+ private UndoManager undoManager = new UndoManager();
71
72 private Timer timer = new Timer(1000, new AbstractAction() {
73 public void actionPerformed(ActionEvent e) {
74@@ -345,6 +321,7 @@
75 this.ListOfQueries = ListOfQueries;
76
77 initComponents();
78+ makeShortcuts();
79 //Runs the BatchProcessing if it is called from the QueryPane
80 if(!(isQueryListEmpty())) {
81 process();
82@@ -486,30 +463,28 @@
83
84 private void addFiles() {
85 FileBrowser browser = FileBrowser.constructor("Timed-Arc Petri Nets","tapn", "xml", lastPath);
86-
87 File[] filesArray = browser.openFiles();
88 if (filesArray.length>0) {
89- for (File file : filesArray) {
90+ undoManager.newEdit();
91+ for (File file : filesArray) {
92 lastPath = file.getParent();
93 if (!files.contains(file)) {
94- files.add(file);
95- listModel.addElement(file);
96+ Command c = new AddFileBatchProcessingCommand(listModel,file, files, this );
97+ c.redo();
98+ undoManager.addEdit(c);
99 }
100 }
101-
102- enableButtons();
103-
104 }
105 }
106
107 private void removeSelectedFiles() {
108+ undoManager.newEdit();
109 for (Object o : fileList.getSelectedValuesList()) {
110 File file = (File) o;
111- files.remove(file);
112- listModel.removeElement(file);
113+ Command c = new RemoveFileBatchProcessingCommand(listModel,file, files, this );
114+ c.redo();
115+ undoManager.addEdit(c);
116 }
117-
118- enableButtons();
119 }
120
121 private void initVerificationOptionsPanel() {
122@@ -1408,8 +1383,14 @@
123 }
124
125 private void clearFiles() {
126- files.clear();
127- listModel.removeAllElements();
128+ undoManager.newEdit();
129+
130+ for (Object o : listModel.toArray()) {
131+ File file = (File)o;
132+ Command c = new RemoveFileBatchProcessingCommand(listModel,file, files, this );
133+ c.redo();
134+ undoManager.addEdit(c);
135+ }
136 }
137
138 private void disableButtonsDuringProcessing() {
139@@ -1423,7 +1404,7 @@
140 disableVerificationOptionsButtons();
141 }
142
143- private void enableButtons() {
144+ public void enableButtons() {
145 fileList.setEnabled(true);
146 addFilesButton.setEnabled(true);
147
148@@ -2137,6 +2118,25 @@
149 }
150 }
151 }
152+ private void makeShortcuts(){
153+ int shortcutkey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
154+ ActionMap am = splitpane.getActionMap();
155+ am.put("undo", new AbstractAction() {
156+ @Override
157+ public void actionPerformed(ActionEvent e) {
158+ undoManager.undo();
159+ }
160+ });
161+ am.put("redo", new AbstractAction() {
162+ @Override
163+ public void actionPerformed(ActionEvent e) {
164+ undoManager.redo();
165+ }
166+ });
167+ InputMap im = splitpane.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
168+ im.put(KeyStroke.getKeyStroke('Z', shortcutkey), "undo");
169+ im.put(KeyStroke.getKeyStroke('Y', shortcutkey), "redo");
170+ }
171 }
172
173
174
175=== added file 'src/dk/aau/cs/gui/undo/AddFileBatchProcessingCommand.java'
176--- src/dk/aau/cs/gui/undo/AddFileBatchProcessingCommand.java 1970-01-01 00:00:00 +0000
177+++ src/dk/aau/cs/gui/undo/AddFileBatchProcessingCommand.java 2020-05-03 09:51:16 +0000
178@@ -0,0 +1,36 @@
179+package dk.aau.cs.gui.undo;
180+
181+import dk.aau.cs.gui.BatchProcessingDialog;
182+import dk.aau.cs.gui.SharedPlacesAndTransitionsPanel;
183+import dk.aau.cs.model.tapn.SharedPlace;
184+
185+import javax.swing.*;
186+import java.io.File;
187+import java.util.List;
188+
189+public class AddFileBatchProcessingCommand extends Command{
190+ private DefaultListModel<File> listModel;
191+ List<File> files;
192+ File file;
193+ private BatchProcessingDialog dialog;
194+ public AddFileBatchProcessingCommand(DefaultListModel<File> listModel, File file, List<File> files, BatchProcessingDialog dialog){
195+ this.listModel = listModel;
196+ this.file = file;
197+ this.files = files;
198+ this.dialog = dialog;
199+ }
200+
201+ @Override
202+ public void redo() {
203+ files.add(file);
204+ listModel.addElement(file);
205+ dialog.enableButtons();
206+ }
207+
208+ @Override
209+ public void undo() {
210+ files.remove(file);
211+ listModel.removeElement(file);
212+ dialog.enableButtons();
213+ }
214+}
215
216=== added file 'src/dk/aau/cs/gui/undo/RemoveFileBatchProcessingCommand.java'
217--- src/dk/aau/cs/gui/undo/RemoveFileBatchProcessingCommand.java 1970-01-01 00:00:00 +0000
218+++ src/dk/aau/cs/gui/undo/RemoveFileBatchProcessingCommand.java 2020-05-03 09:51:16 +0000
219@@ -0,0 +1,36 @@
220+package dk.aau.cs.gui.undo;
221+
222+import dk.aau.cs.gui.BatchProcessingDialog;
223+import dk.aau.cs.gui.SharedPlacesAndTransitionsPanel;
224+import dk.aau.cs.model.tapn.SharedPlace;
225+
226+import javax.swing.*;
227+import java.io.File;
228+import java.util.List;
229+
230+public class RemoveFileBatchProcessingCommand extends Command{
231+ private DefaultListModel<File> listModel;
232+ List<File> files;
233+ File file;
234+ private BatchProcessingDialog dialog;
235+ public RemoveFileBatchProcessingCommand(DefaultListModel<File> listModel, File file, List<File> files, BatchProcessingDialog dialog){
236+ this.listModel = listModel;
237+ this.file = file;
238+ this.files = files;
239+ this.dialog = dialog;
240+ }
241+
242+ @Override
243+ public void redo() {
244+ files.remove(file);
245+ listModel.removeElement(file);
246+ dialog.enableButtons();
247+ }
248+
249+ @Override
250+ public void undo() {
251+ files.add(file);
252+ listModel.addElement(file);
253+ dialog.enableButtons();
254+ }
255+}
256
257=== modified file 'src/pipe/gui/undo/UndoManager.java'
258--- src/pipe/gui/undo/UndoManager.java 2020-04-03 11:05:40 +0000
259+++ src/pipe/gui/undo/UndoManager.java 2020-05-03 09:51:16 +0000
260@@ -118,7 +118,9 @@
261 undoneEdits = 0;
262 app.ifPresent(a -> a.setUndoActionEnabled(true));
263 app.ifPresent(a -> a.setRedoActionEnabled(false));
264- CreateGui.getCurrentTab().setNetChanged(true);
265+ if(CreateGui.getCurrentTab() != null) {
266+ CreateGui.getCurrentTab().setNetChanged(true);
267+ }
268
269 ArrayList<Command> compoundEdit = new ArrayList<Command>();
270 edits.set(indexOfNextAdd, compoundEdit);
271@@ -152,9 +154,10 @@
272
273 // removes the arc currently being drawn if any
274 private void checkArcBeingDrawn() {
275-
276- if (CreateGui.getDrawingSurface().createArc != null) {
277- PlaceTransitionObjectHandler.cleanupArc(CreateGui.getDrawingSurface().createArc, CreateGui.getDrawingSurface());
278- }
279+ if(CreateGui.getDrawingSurface() != null) {
280+ if (CreateGui.getDrawingSurface().createArc != null) {
281+ PlaceTransitionObjectHandler.cleanupArc(CreateGui.getDrawingSurface().createArc, CreateGui.getDrawingSurface());
282+ }
283+ }
284 }
285 }

Subscribers

People subscribed via source and target branches