~tapaal-contributor/tapaal/undo-redo-batchprocessing-1870904

« back to all changes in this revision

Viewing changes to src/dk/aau/cs/gui/BatchProcessingDialog.java

  • Committer: ptaankvist at gmail
  • Date: 2020-05-03 09:49:19 UTC
  • Revision ID: ptaankvist@gmail.com-20200503094919-fw24zy47qeskib3z
Add undo and redo options for add,remove and clear in batchprocessing

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
package dk.aau.cs.gui;
2
2
 
3
 
import java.awt.Color;
4
 
import java.awt.Component;
5
 
import java.awt.Dimension;
6
 
import java.awt.FlowLayout;
7
 
import java.awt.Frame;
8
 
import java.awt.GridBagConstraints;
9
 
import java.awt.GridBagLayout;
10
 
import java.awt.GridLayout;
11
 
import java.awt.Insets;
12
 
import java.awt.Point;
 
3
import java.awt.*;
13
4
import java.awt.event.ActionEvent;
14
5
import java.awt.event.ActionListener;
15
6
import java.awt.event.KeyAdapter;
23
14
import java.util.Comparator;
24
15
import java.util.List;
25
16
 
26
 
import javax.swing.AbstractAction;
27
 
import javax.swing.BorderFactory;
28
 
import javax.swing.ButtonGroup;
29
 
import javax.swing.DefaultListModel;
30
 
import javax.swing.JButton;
31
 
import javax.swing.JCheckBox;
32
 
import javax.swing.JComboBox;
33
 
import javax.swing.JDialog;
34
 
import javax.swing.JLabel;
35
 
import javax.swing.JList;
36
 
import javax.swing.JOptionPane;
37
 
import javax.swing.JPanel;
38
 
import javax.swing.JRadioButton;
39
 
import javax.swing.JScrollPane;
40
 
import javax.swing.JSeparator;
41
 
import javax.swing.JSplitPane;
42
 
import javax.swing.JTable;
43
 
import javax.swing.ListSelectionModel;
44
 
import javax.swing.SwingConstants;
 
17
import javax.swing.*;
45
18
import javax.swing.SwingWorker.StateValue;
46
 
import javax.swing.Timer;
47
 
import javax.swing.ToolTipManager;
48
19
import javax.swing.border.Border;
49
20
import javax.swing.event.ChangeEvent;
50
21
import javax.swing.event.ChangeListener;
53
24
import javax.swing.table.TableModel;
54
25
import javax.swing.table.TableRowSorter;
55
26
 
 
27
import dk.aau.cs.gui.undo.AddFileBatchProcessingCommand;
 
28
import dk.aau.cs.gui.undo.Command;
 
29
import dk.aau.cs.gui.undo.RemoveFileBatchProcessingCommand;
56
30
import pipe.dataLayer.TAPNQuery;
57
31
import pipe.dataLayer.TAPNQuery.SearchOption;
58
32
import pipe.gui.CreateGui;
59
33
import net.tapaal.swinghelpers.CustomJSpinner;
 
34
import pipe.gui.undo.UndoManager;
60
35
import pipe.gui.widgets.EscapableDialog;
61
36
import pipe.gui.widgets.filebrowser.FileBrowser;
62
37
import pipe.gui.widgets.QueryPane;
249
224
 
250
225
        private List<File> files = new ArrayList<File>();
251
226
        private BatchProcessingWorker currentWorker;
 
227
        private UndoManager undoManager = new UndoManager();
252
228
        
253
229
        private Timer timer = new Timer(1000, new AbstractAction() {
254
230
                public void actionPerformed(ActionEvent e) {
345
321
                this.ListOfQueries = ListOfQueries;
346
322
 
347
323
                initComponents();
 
324
                makeShortcuts();
348
325
                //Runs the BatchProcessing if it is called from the QueryPane
349
326
                if(!(isQueryListEmpty())) {
350
327
                        process();
486
463
 
487
464
        private void addFiles() {
488
465
                FileBrowser browser = FileBrowser.constructor("Timed-Arc Petri Nets","tapn", "xml", lastPath);
489
 
                
490
466
                File[] filesArray = browser.openFiles();
491
467
                if (filesArray.length>0) {
492
 
                        for (File file : filesArray) {
 
468
            undoManager.newEdit();
 
469
            for (File file : filesArray) {
493
470
                                lastPath = file.getParent();
494
471
                                if (!files.contains(file)) {
495
 
                                        files.add(file);
496
 
                                        listModel.addElement(file);
 
472
                    Command c = new AddFileBatchProcessingCommand(listModel,file, files, this );
 
473
                    c.redo();
 
474
                    undoManager.addEdit(c);
497
475
                                }
498
476
                        }
499
 
 
500
 
                        enableButtons();
501
 
 
502
477
                }
503
478
        }
504
479
 
505
480
        private void removeSelectedFiles() {
 
481
            undoManager.newEdit();
506
482
                for (Object o : fileList.getSelectedValuesList()) {
507
483
                        File file = (File) o;
508
 
                        files.remove(file);
509
 
                        listModel.removeElement(file);
 
484
            Command c = new RemoveFileBatchProcessingCommand(listModel,file, files, this );
 
485
            c.redo();
 
486
            undoManager.addEdit(c);
510
487
                }
511
 
 
512
 
                enableButtons();
513
488
        }
514
489
        
515
490
        private void initVerificationOptionsPanel() {
1408
1383
        }
1409
1384
 
1410
1385
        private void clearFiles() {
1411
 
                files.clear();
1412
 
                listModel.removeAllElements();
 
1386
        undoManager.newEdit();
 
1387
 
 
1388
        for (Object o : listModel.toArray()) {
 
1389
            File file = (File)o;
 
1390
            Command c = new RemoveFileBatchProcessingCommand(listModel,file, files, this );
 
1391
            c.redo();
 
1392
            undoManager.addEdit(c);
 
1393
        }
1413
1394
        }
1414
1395
 
1415
1396
        private void disableButtonsDuringProcessing() {
1423
1404
                disableVerificationOptionsButtons();
1424
1405
        }
1425
1406
 
1426
 
        private void enableButtons() {
 
1407
        public void enableButtons() {
1427
1408
                fileList.setEnabled(true);
1428
1409
                addFilesButton.setEnabled(true);
1429
1410
 
2137
2118
                        }
2138
2119
                }
2139
2120
        }
 
2121
        private void makeShortcuts(){
 
2122
        int shortcutkey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
 
2123
        ActionMap am = splitpane.getActionMap();
 
2124
        am.put("undo", new AbstractAction() {
 
2125
            @Override
 
2126
            public void actionPerformed(ActionEvent e) {
 
2127
                undoManager.undo();
 
2128
            }
 
2129
        });
 
2130
        am.put("redo", new AbstractAction() {
 
2131
            @Override
 
2132
            public void actionPerformed(ActionEvent e) {
 
2133
                undoManager.redo();
 
2134
            }
 
2135
        });
 
2136
        InputMap im = splitpane.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
 
2137
        im.put(KeyStroke.getKeyStroke('Z', shortcutkey), "undo");
 
2138
        im.put(KeyStroke.getKeyStroke('Y', shortcutkey), "redo");
 
2139
    }
2140
2140
}
2141
2141
 
2142
2142