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;
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;
33
21
import javax.swing.border.EmptyBorder;
34
22
import javax.swing.text.AbstractDocument;
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;
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;
50
33
* Implementes af class handling drawing of animation functions
67
50
private GuiAction stepforwardAction, stepbackwardAction;
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" };
73
56
public AnimationController(NetType netType) {
84
67
// Use the default FlowLayout.
85
68
// Create everything.
87
firermodebox = new NonsearchableJComboBox(FIRINGMODES);
70
firermodebox = new NonsearchableJComboBox<>(FIRINGMODES);
88
71
updateFiringModeComboBox();
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());
73
firermodebox.addActionListener(evt -> CreateGui.getAnimator().setFiringmode((String) firermodebox.getSelectedItem()));
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);
120
decrese.addActionListener(e -> {
121
setDelayModeScale(delayScale / 2);
122
delaySlider.setValue(delaySlider.getValue() * 2);
148
124
sliderPanel.add(decrese);
153
129
delaySlider.setMinorTickSpacing(0);
154
130
delaySlider.setPaintLabels(true);
155
131
delaySlider.setPaintTicks(true);
156
delaySlider.addChangeListener(new ChangeListener() {
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();
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);
159
increse.addActionListener(e -> {
160
setDelayModeScale(delayScale * 2);
161
delaySlider.setValue(delaySlider.getValue() / 2);
192
163
sliderPanel.add(increse);
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();
190
okButton.addActionListener(evt -> addTimeDelayToHistory());
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;
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);
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);
273
241
public void focusGained(FocusEvent arg0) {
274
CreateGui.getApp().setStepShotcutEnabled(false);
242
setStepShotcutEnabled(false);
288
256
animationToolBar.add(timedelayPanel);
259
void setStepShotcutEnabled(boolean enabled){
261
stepforwardAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("pressed RIGHT"));
262
stepbackwardAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("pressed LEFT"));
264
stepforwardAction.putValue(Action.ACCELERATOR_KEY, null);
265
stepbackwardAction.putValue(Action.ACCELERATOR_KEY, null);
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();
293
275
if (currentFiringMode == null) {
294
276
firermodebox.setSelectedItem("Manual");
374
BigDecimal timeDelayToSet = new BigDecimal(parseTime.toString(),
375
new MathContext(Pipe.AGE_PRECISION));
378
return timeDelayToSet;
356
return new BigDecimal(parseTime.toString(), new MathContext(Pipe.AGE_PRECISION));
381
359
private void setEnabledStepbackwardAction(boolean b) {
394
372
setEnabledStepforwardAction(animationHistory.isStepForwardAllowed());
395
373
setEnabledStepbackwardAction(animationHistory.isStepBackAllowed());
397
CreateGui.getAppGui().setEnabledStepForwardAction(animationHistory.isStepForwardAllowed());
398
CreateGui.getAppGui().setEnabledStepBackwardAction(animationHistory.isStepBackAllowed());
401
377
private void initializeDocumentFilterForDelayInput() {