~tapaal-contributor/tapaal/display-shared-places-transitions-1879126

« back to all changes in this revision

Viewing changes to src/pipe/gui/AnimationController.java

  • Committer: Jiri Srba
  • Date: 2020-04-28 19:15:28 UTC
  • mfrom: (998.2.376 testbranch)
  • Revision ID: srba@cs.aau.dk-20200428191528-3xxjqa1r4jcob5ur
merged in lp:~yrke/tapaal/testbranch doing majour refactoring of the GUI

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
import java.awt.FlowLayout;
5
5
import java.awt.GridBagConstraints;
6
6
import java.awt.GridBagLayout;
7
 
import java.awt.event.ActionEvent;
8
7
import java.awt.event.FocusEvent;
9
8
import java.awt.event.FocusListener;
10
9
import java.awt.event.KeyEvent;
11
10
import java.awt.event.KeyListener;
12
11
import java.awt.event.MouseAdapter;
13
12
import java.awt.event.MouseEvent;
14
 
import java.beans.PropertyChangeEvent;
15
 
import java.beans.PropertyChangeListener;
16
13
import java.math.BigDecimal;
17
14
import java.math.MathContext;
18
15
import java.text.DecimalFormat;
20
17
import java.text.ParseException;
21
18
import java.util.regex.Pattern;
22
19
 
23
 
import javax.swing.Action;
24
 
import javax.swing.BorderFactory;
25
 
import javax.swing.JComboBox;
26
 
import javax.swing.JLabel;
27
 
import javax.swing.JOptionPane;
28
 
import javax.swing.JPanel;
29
 
import javax.swing.JTextField;
30
 
import javax.swing.JToggleButton;
31
 
import javax.swing.JToolBar;
32
 
import javax.swing.ToolTipManager;
 
20
import javax.swing.*;
33
21
import javax.swing.border.EmptyBorder;
34
22
import javax.swing.text.AbstractDocument;
35
23
 
36
24
import pipe.dataLayer.NetType;
37
25
import pipe.gui.action.GuiAction;
38
 
import pipe.gui.widgets.DecimalOnlyDocumentFilter;
 
26
import net.tapaal.swinghelpers.DecimalOnlyDocumentFilter;
39
27
import dk.aau.cs.gui.components.NonsearchableJComboBox;
40
28
import dk.aau.cs.model.tapn.simulation.FiringMode;
41
29
 
42
 
import java.awt.event.ActionListener;
43
30
import java.util.Hashtable;
44
 
import javax.swing.JButton;
45
 
import javax.swing.JSlider;
46
 
import javax.swing.event.ChangeEvent;
47
 
import javax.swing.event.ChangeListener;
48
31
 
49
32
/**
50
33
 * Implementes af class handling drawing of animation functions
67
50
        private GuiAction stepforwardAction, stepbackwardAction;
68
51
 
69
52
        JTextField TimeDelayField = new JTextField();
70
 
        JComboBox firermodebox = null;
 
53
        JComboBox<String> firermodebox = null;
71
54
        private static final String[] FIRINGMODES = { "Random", "Oldest", "Youngest", "Manual" };
72
55
 
73
56
        public AnimationController(NetType netType) {
84
67
                // Use the default FlowLayout.
85
68
                // Create everything.
86
69
 
87
 
                firermodebox = new NonsearchableJComboBox(FIRINGMODES);
 
70
                firermodebox = new NonsearchableJComboBox<>(FIRINGMODES);
88
71
                updateFiringModeComboBox();
89
72
 
90
 
                firermodebox.addActionListener(new java.awt.event.ActionListener() {
91
 
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
92
 
                                CreateGui.getAnimator().setFiringmode(
93
 
                                                (String) firermodebox.getSelectedItem());
94
 
                        }
95
 
                });
 
73
                firermodebox.addActionListener(evt -> CreateGui.getAnimator().setFiringmode((String) firermodebox.getSelectedItem()));
96
74
 
97
75
                JToolBar animationToolBar = new JToolBar();
98
76
                animationToolBar.setFloatable(false);
139
117
                JPanel sliderPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
140
118
                JButton decrese = new JButton("-");
141
119
                decrese.setPreferredSize(new Dimension(20, 30));
142
 
                decrese.addActionListener(new ActionListener() {
143
 
                        public void actionPerformed(ActionEvent e) {
144
 
                                setDelayModeScale(delayScale / 2);
145
 
                                delaySlider.setValue(delaySlider.getValue() * 2);
146
 
                        }
 
120
                decrese.addActionListener(e -> {
 
121
                        setDelayModeScale(delayScale / 2);
 
122
                        delaySlider.setValue(delaySlider.getValue() * 2);
147
123
                });
148
124
                sliderPanel.add(decrese);
149
125
 
153
129
                delaySlider.setMinorTickSpacing(0);
154
130
                delaySlider.setPaintLabels(true);
155
131
                delaySlider.setPaintTicks(true);
156
 
                delaySlider.addChangeListener(new ChangeListener() {
157
 
                        @Override
158
 
                        public void stateChanged(ChangeEvent e) {
159
 
                                TimeDelayField.setText(Double.toString(delaySlider.getValue() * ((double) delayScale) / 160));
160
 
                                CreateGui.getAnimator().reportBlockingPlaces();
 
132
                delaySlider.addChangeListener(e -> {
 
133
                        TimeDelayField.setText(Double.toString(delaySlider.getValue() * ((double) delayScale) / 160));
 
134
                        CreateGui.getAnimator().reportBlockingPlaces();
161
135
 
162
 
                        }
163
136
                });
164
137
 
165
138
                delaySlider.addKeyListener(new KeyListener() {
183
156
                sliderPanel.add(delaySlider);
184
157
                JButton increse = new JButton("+");
185
158
                increse.setPreferredSize(new Dimension(20, 30));
186
 
                increse.addActionListener(new ActionListener() {
187
 
                        public void actionPerformed(ActionEvent e) {
188
 
                                setDelayModeScale(delayScale * 2);
189
 
                                delaySlider.setValue(delaySlider.getValue() / 2);
190
 
                        }
 
159
                increse.addActionListener(e -> {
 
160
                        setDelayModeScale(delayScale * 2);
 
161
                        delaySlider.setValue(delaySlider.getValue() / 2);
191
162
                });
192
163
                sliderPanel.add(increse);
193
164
 
216
187
 
217
188
                okButton.setText("Time delay");
218
189
                okButton.setMinimumSize(new java.awt.Dimension(75, 25));
219
 
                okButton.addActionListener(new java.awt.event.ActionListener() {
220
 
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
221
 
                                addTimeDelayToHistory();
222
 
                        }
223
 
                });
 
190
                okButton.addActionListener(evt -> addTimeDelayToHistory());
224
191
 
225
192
                //"Hack" to make sure the toolTip for this button is showed as long as possible
226
193
                okButton.addMouseListener(new MouseAdapter() {
227
194
                        final int defaultDismissTimeout = ToolTipManager.sharedInstance().getDismissDelay();
228
195
                        final int defaultInitalDelay = ToolTipManager.sharedInstance().getInitialDelay();
229
196
                        final int defaultReshowDelay = ToolTipManager.sharedInstance().getReshowDelay();
 
197
                        final boolean isTooltipEnabled = ToolTipManager.sharedInstance().isEnabled();
230
198
                        final int dismissDelayMinutes = Integer.MAX_VALUE;
231
199
 
232
200
                        @Override
242
210
                                ToolTipManager.sharedInstance().setDismissDelay(defaultDismissTimeout);
243
211
                                ToolTipManager.sharedInstance().setInitialDelay(defaultInitalDelay);
244
212
                                ToolTipManager.sharedInstance().setReshowDelay(defaultReshowDelay);
245
 
                                ToolTipManager.sharedInstance().setEnabled(CreateGui.getApp().isShowingToolTips());
 
213
                                ToolTipManager.sharedInstance().setEnabled(isTooltipEnabled);
246
214
                        }
247
215
                });
248
216
 
267
235
                // Disable shortcuts when focused
268
236
                TimeDelayField.addFocusListener(new FocusListener() {
269
237
                        public void focusLost(FocusEvent arg0) {
270
 
                                CreateGui.getApp().setStepShotcutEnabled(true);
 
238
                                setStepShotcutEnabled(true);
271
239
                        }
272
240
 
273
241
                        public void focusGained(FocusEvent arg0) {
274
 
                                CreateGui.getApp().setStepShotcutEnabled(false);
 
242
                                setStepShotcutEnabled(false);
275
243
                        }
276
244
                });
277
245
 
288
256
                animationToolBar.add(timedelayPanel);
289
257
        }
290
258
 
 
259
        void setStepShotcutEnabled(boolean enabled){
 
260
                if(enabled){
 
261
                        stepforwardAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("pressed RIGHT"));
 
262
                        stepbackwardAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("pressed LEFT"));
 
263
                } else {
 
264
                        stepforwardAction.putValue(Action.ACCELERATOR_KEY, null);
 
265
                        stepbackwardAction.putValue(Action.ACCELERATOR_KEY, null);
 
266
                }
 
267
        }
 
268
 
291
269
        public void updateFiringModeComboBox() {
292
 
                FiringMode currentFiringMode = CreateGui.getAnimator().getFiringmode();
 
270
                Animator animator = CreateGui.getAnimator();
 
271
                FiringMode currentFiringMode = null;
 
272
                if (animator != null) {
 
273
                        currentFiringMode = animator.getFiringmode();
 
274
                }
293
275
                if (currentFiringMode == null) {
294
276
                        firermodebox.setSelectedItem("Manual");
295
277
                } else {
370
352
                                                                                                                                        // the
371
353
                                                                                                                                        // number
372
354
                                                                                                                                        // localised
373
 
                // Try parse
374
 
                BigDecimal timeDelayToSet = new BigDecimal(parseTime.toString(),
375
 
                                new MathContext(Pipe.AGE_PRECISION));
376
 
 
377
 
 
378
 
                return timeDelayToSet;
 
355
 
 
356
                return new BigDecimal(parseTime.toString(),     new MathContext(Pipe.AGE_PRECISION));
379
357
        }
380
358
 
381
359
        private void setEnabledStepbackwardAction(boolean b) {
394
372
                setEnabledStepforwardAction(animationHistory.isStepForwardAllowed());
395
373
                setEnabledStepbackwardAction(animationHistory.isStepBackAllowed());
396
374
 
397
 
                CreateGui.getAppGui().setEnabledStepForwardAction(animationHistory.isStepForwardAllowed());
398
 
                CreateGui.getAppGui().setEnabledStepBackwardAction(animationHistory.isStepBackAllowed());
399
375
        }
400
376
        
401
377
        private void initializeDocumentFilterForDelayInput() {