25
26
import net.tapaal.helpers.Reference.Reference;
26
27
import net.tapaal.swinghelpers.ExtendedJTabbedPane;
27
28
import net.tapaal.swinghelpers.ToggleButtonWithoutText;
29
import org.jetbrains.annotations.NotNull;
28
30
import pipe.gui.Pipe.ElementType;
29
31
import pipe.gui.action.GuiAction;
30
32
import pipe.gui.widgets.WorkflowDialog;
54
54
private final StatusBar statusBar;
55
55
private JMenuBar menuBar;
56
59
private JToolBar drawingToolBar;
57
60
private final JLabel featureInfoText = new JLabel();
58
61
private JComboBox<String> timeFeatureOptions = new JComboBox(new String[]{"No", "Yes"});
281
284
currentTab.ifPresent(o -> o.setMode(ElementType.ANNOTATION));
284
private final GuiAction inhibarcAction = new GuiAction("Inhibitor arc", "Add an inhibitor arc (I)", "I", true) {
285
public void actionPerformed(ActionEvent e) {
286
currentTab.ifPresent(o -> o.setMode(ElementType.TAPNINHIBITOR_ARC));
289
private final GuiAction transAction = new GuiAction("Transition", "Add a transition (T)", "T", true) {
290
public void actionPerformed(ActionEvent e) {
291
currentTab.ifPresent(o -> o.setMode(ElementType.TAPNTRANS));
294
private final GuiAction tokenAction = new GuiAction("Add token", "Add a token (+)", "typed +", true) {
295
public void actionPerformed(ActionEvent e) {
296
currentTab.ifPresent(o -> o.setMode(ElementType.ADDTOKEN));
299
private final GuiAction selectAction = new GuiAction("Select", "Select components (S)", "S", true) {
300
public void actionPerformed(ActionEvent e) {
301
currentTab.ifPresent(o -> o.setMode(ElementType.SELECT));
304
private final GuiAction deleteTokenAction = new GuiAction("Delete token", "Delete a token (-)", "typed -", true) {
305
public void actionPerformed(ActionEvent e) {
306
currentTab.ifPresent(o -> o.setMode(ElementType.DELTOKEN));
309
private final GuiAction timedPlaceAction = new GuiAction("Place", "Add a place (P)", "P", true) {
310
public void actionPerformed(ActionEvent e) {
311
currentTab.ifPresent(o -> o.setMode(ElementType.TAPNPLACE));
315
private final GuiAction timedArcAction = new GuiAction("Arc", "Add an arc (A)", "A", true) {
316
public void actionPerformed(ActionEvent e) {
317
currentTab.ifPresent(o -> o.setMode(ElementType.TAPNARC));
320
private final GuiAction transportArcAction = new GuiAction("Transport arc", "Add a transport arc (R)", "R", true) {
321
public void actionPerformed(ActionEvent e) {
322
currentTab.ifPresent(o -> o.setMode(ElementType.TRANSPORTARC));
326
288
private final GuiAction showTokenAgeAction = new GuiAction("Display token age", "Show/hide displaying the token age 0.0 (when hidden the age 0.0 is drawn as a dot)", KeyStroke.getKeyStroke('9', shortcutkey), true) {
327
289
public void actionPerformed(ActionEvent e) {
436
398
currentTab.ifPresent(TabContentActions::stepBackwards);
439
private final GuiAction timeAction = new GuiAction("Delay one time unit", "Let time pass one time unit", "W") {
440
public void actionPerformed(ActionEvent e) {
441
currentTab.ifPresent(TabContentActions::timeDelay);
444
private final GuiAction delayFireAction = new GuiAction("Delay and fire", "Delay and fire selected transition", "F") {
445
public void actionPerformed(ActionEvent e) {
446
currentTab.ifPresent(TabContentActions::delayAndFire);
449
private final GuiAction prevcomponentAction = new GuiAction("Previous component", "Previous component", "pressed UP") {
403
private GuiAction prevcomponentAction = new GuiAction("Previous component", "Previous component", "pressed UP") {
450
404
public void actionPerformed(ActionEvent e) {
451
405
currentTab.ifPresent(TabContentActions::previousComponent);
496
451
this.setMinimumSize(new Dimension(825, 480));
498
453
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
499
appTab= new ExtendedJTabbedPane<TabContent>() {
454
appTab = new ExtendedJTabbedPane<TabContent>() {
501
456
public Component generator() {
502
457
return new TabComponent(this) {
617
572
private void buildMenus() {
618
573
menuBar = new JMenuBar();
620
574
menuBar.add(buildMenuFiles());
621
575
menuBar.add(buildMenuEdit());
622
576
menuBar.add(buildMenuView());
623
577
menuBar.add(buildMenuDraw());
624
579
menuBar.add(buildMenuAnimation());
625
580
menuBar.add(buildMenuTools());
626
581
menuBar.add(buildMenuHelp());
659
614
private JMenu buildMenuDraw() {
661
JMenu drawMenu = new JMenu("Draw");
616
drawMenu = new JMenu("Draw");
662
617
drawMenu.setMnemonic('D');
664
drawMenu.add(selectAction);
665
drawMenu.addSeparator();
667
drawMenu.add(timedPlaceAction);
669
drawMenu.add(transAction);
671
drawMenu.add(timedArcAction);
673
drawMenu.add(transportArcAction);
675
drawMenu.add(inhibarcAction);
677
drawMenu.add(annotationAction);
679
drawMenu.addSeparator();
681
drawMenu.add(tokenAction);
683
drawMenu.add(deleteTokenAction);
687
621
private JMenu buildMenuView() {
689
JMenu viewMenu = new JMenu("View");
623
viewMenu = new JMenu("View");
690
624
viewMenu.setMnemonic('V');
692
626
zoomMenu = new JMenu("Zoom");
726
660
addCheckboxMenuItem(viewMenu, showEnabledTransitionsAction);
728
addCheckboxMenuItem(viewMenu, showDelayEnabledTransitionsAction);
662
showDelayEnabledTransitionsCheckbox = addCheckboxMenuItem(viewMenu, showDelayEnabledTransitionsAction);
730
664
showZeroToInfinityIntervalsCheckBox = addCheckboxMenuItem(viewMenu, showZeroToInfinityIntervals(), showZeroToInfinityIntervalsAction);
752
686
animateMenu.add(stepbackwardAction);
753
687
animateMenu.add(stepforwardAction);
755
animateMenu.add(timeAction);
757
animateMenu.add(delayFireAction);
759
689
animateMenu.add(prevcomponentAction);
761
691
animateMenu.add(nextcomponentAction);
878
808
drawingToolBar.addSeparator();
879
809
drawingToolBar.setRequestFocusEnabled(false);
882
drawingToolBar.add(new ToggleButtonWithoutText(selectAction));
886
drawingToolBar.addSeparator();
887
drawingToolBar.add(new ToggleButtonWithoutText(timedPlaceAction));
888
drawingToolBar.add(new ToggleButtonWithoutText(transAction));
889
drawingToolBar.add(new ToggleButtonWithoutText(timedArcAction));
890
drawingToolBar.add(new ToggleButtonWithoutText(transportArcAction));
891
drawingToolBar.add(new ToggleButtonWithoutText(inhibarcAction));
893
drawingToolBar.add(new ToggleButtonWithoutText(annotationAction));
896
drawingToolBar.addSeparator();
897
drawingToolBar.add(new ToggleButtonWithoutText(tokenAction));
898
drawingToolBar.add(new ToggleButtonWithoutText(deleteTokenAction));
900
811
// Create panel to put toolbars in
901
812
JPanel toolBarPanel = new JPanel();
902
813
toolBarPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
1001
912
exportTraceAction.setEnabled(false);
1002
913
importTraceAction.setEnabled(false);
1004
timedPlaceAction.setEnabled(true);
1005
timedArcAction.setEnabled(true);
1006
inhibarcAction.setEnabled(true);
1007
transportArcAction.setEnabled(true);
1009
915
annotationAction.setEnabled(true);
1010
transAction.setEnabled(true);
1011
tokenAction.setEnabled(true);
1012
916
deleteAction.setEnabled(true);
1013
917
selectAllAction.setEnabled(true);
1014
selectAction.setEnabled(true);
1015
deleteTokenAction.setEnabled(true);
1017
timeAction.setEnabled(false);
1018
delayFireAction.setEnabled(false);
1019
919
stepbackwardAction.setEnabled(false);
1020
920
stepforwardAction.setEnabled(false);
1021
921
prevcomponentAction.setEnabled(false);
1048
947
enableAllActions(true);
1050
timedPlaceAction.setEnabled(false);
1051
timedArcAction.setEnabled(false);
1052
inhibarcAction.setEnabled(false);
1053
transportArcAction.setEnabled(false);
1055
949
annotationAction.setEnabled(false);
1056
transAction.setEnabled(false);
1057
tokenAction.setEnabled(false);
1058
950
deleteAction.setEnabled(false);
1059
951
selectAllAction.setEnabled(false);
1060
selectAction.setEnabled(false);
1061
deleteTokenAction.setEnabled(false);
1063
953
alignToGrid.setEnabled(false);
1066
956
showConstantsAction.setEnabled(false);
1067
957
showQueriesAction.setEnabled(false);
1069
timeAction.setEnabled(true);
1071
delayFireAction.setEnabled(true);
1072
959
stepbackwardAction.setEnabled(true);
1073
960
stepforwardAction.setEnabled(true);
1074
961
prevcomponentAction.setEnabled(true);
1101
987
importTraceAction.setEnabled(false);
1102
988
verifyAction.setEnabled(false);
1104
timedPlaceAction.setEnabled(false);
1105
timedArcAction.setEnabled(false);
1106
inhibarcAction.setEnabled(false);
1107
transportArcAction.setEnabled(false);
1109
990
annotationAction.setEnabled(false);
1110
transAction.setEnabled(false);
1111
tokenAction.setEnabled(false);
1112
deleteAction.setEnabled(false);
1113
991
selectAllAction.setEnabled(false);
1114
selectAction.setEnabled(false);
1115
deleteTokenAction.setEnabled(false);
1117
timeAction.setEnabled(false);
1118
delayFireAction.setEnabled(false);
1119
993
stepbackwardAction.setEnabled(false);
1120
994
stepforwardAction.setEnabled(false);
1271
1148
// Enable actions based on GUI mode
1272
1149
enableGUIActions(mode);
1150
if (currentTab != null) {
1151
currentTab.ifPresent(o -> o.updateEnabledActions(mode));
1156
public void registerDrawingActions(@NotNull List<GuiAction> drawActions) {
1158
drawingToolBar.removeAll();
1159
drawMenu.removeAll();
1161
if (drawActions.size() > 0) {
1162
drawMenu.setEnabled(true);
1163
drawingToolBar.addSeparator();
1165
for (GuiAction action : drawActions) {
1166
drawingToolBar.add(new ToggleButtonWithoutText(action));
1167
drawMenu.add(action);
1170
drawingToolBar.addSeparator();
1171
drawingToolBar.add(featureInfoText);
1173
drawMenu.setEnabled(false);
1178
public void registerAnimationActions(@NotNull List<GuiAction> animationActions) {
1180
animateMenu.removeAll();
1182
if (animationActions.size() > 0) {
1184
animateMenu.setEnabled(true);
1185
animateMenu.add(startAction);
1187
animateMenu.add(stepbackwardAction);
1188
animateMenu.add(stepforwardAction);
1190
for (GuiAction action : animationActions) {
1191
animateMenu.add(action);
1194
animateMenu.add(prevcomponentAction);
1195
animateMenu.add(nextcomponentAction);
1197
animateMenu.addSeparator();
1198
animateMenu.add(exportTraceAction);
1199
animateMenu.add(importTraceAction);
1201
animateMenu.setEnabled(false);
1206
public void registerViewActions(@NotNull List<GuiAction> viewActions) {
1207
//TODO: This is a temporary implementation until view actions can be moved to tab content
1209
if (!getCurrentTab().getLens().isTimed()) {
1210
showZeroToInfinityIntervalsCheckBox.setVisible(false);
1211
showTokenAgeCheckBox.setVisible(false);
1212
showDelayEnabledTransitionsCheckbox.setVisible(false);
1214
showZeroToInfinityIntervalsCheckBox.setVisible(true);
1215
showTokenAgeCheckBox.setVisible(true);
1216
showDelayEnabledTransitionsCheckbox.setVisible(true);
1276
1220
private void fixBug812694GrayMenuAfterSimulationOnMac() {
1287
//XXX temp while refactoring, kyrke - 2019-07-25, should only be called from TabContent
1289
public void updateMode(Pipe.ElementType _mode) {
1293
// deselect other actions
1294
transAction.setSelected(mode == ElementType.TAPNTRANS);
1295
timedPlaceAction.setSelected(mode == ElementType.TAPNPLACE);
1296
timedArcAction.setSelected(mode == ElementType.TAPNARC);
1297
transportArcAction.setSelected(mode == ElementType.TRANSPORTARC);
1298
inhibarcAction.setSelected(mode == ElementType.TAPNINHIBITOR_ARC);
1299
tokenAction.setSelected(mode == ElementType.ADDTOKEN);
1300
deleteTokenAction.setSelected(mode == ElementType.DELTOKEN);
1301
selectAction.setSelected(mode == ElementType.SELECT);
1302
annotationAction.setSelected(mode == ElementType.ANNOTATION);
1304
statusBar.changeText(mode);
1232
public void setStatusBarText(String s) {
1233
statusBar.changeText(Objects.requireNonNullElse(s, ""));