package application.views; import application.ApplicationWindow; import application.editor.Editor; import application.editor.IStageChangeListener; import application.editor.Stage; import application.editor.stages.DataFlowModelingStage; import application.editor.stages.PushPullSelectionStage; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class NavigationWindow extends JDialog implements IStageChangeListener { private static final String TITLE = "Navigation"; private final Editor editor; private final JToggleButton dataFlowModelingButton; private final JToggleButton pushPullSelectionButton; private boolean forbidReentry = false; public NavigationWindow(ApplicationWindow owner, Editor editor) { super(owner); this.editor = editor; dataFlowModelingButton = new JToggleButton("Data Flow Modeling"); pushPullSelectionButton = new JToggleButton("Push Pull Selection"); dataFlowModelingButton.addActionListener(new DataFlowModelingButtonListener()); pushPullSelectionButton.addActionListener(new PushPullSelectionButtonListener()); pushPullSelectionButton.setEnabled(false); dataFlowModelingButton.setSelected(true); setTitle(TITLE); setDefaultCloseOperation(HIDE_ON_CLOSE); Container panel = getContentPane(); panel.setLayout(new GridLayout(2, 1)); ButtonGroup group = new ButtonGroup(); group.add(dataFlowModelingButton); group.add(pushPullSelectionButton); panel.add(dataFlowModelingButton); panel.add(pushPullSelectionButton); pack(); Point location = new Point(owner.getX() + (owner.getWidth() / 2) - (this.getWidth() / 2), owner.getY() + (owner.getHeight() / 2) - (this.getHeight() / 2)); setLocation(location); setResizable(false); } @Override public void stageChanged(Stage newStage) { if (forbidReentry) { return; } if (newStage instanceof DataFlowModelingStage) { dataFlowModelingButton.setSelected(true); pushPullSelectionButton.setEnabled(editor.canChange(Editor.STAGE_PUSH_PULL_SELECTION)); } else if (newStage instanceof PushPullSelectionStage) { pushPullSelectionButton.setSelected(true); dataFlowModelingButton.setEnabled(editor.canChange(Editor.STAGE_DATA_FLOW_MODELING)); } } private class DataFlowModelingButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { forbidReentry = true; editor.changeStage(Editor.STAGE_DATA_FLOW_MODELING); forbidReentry = false; pushPullSelectionButton.setEnabled(editor.canChange(Editor.STAGE_PUSH_PULL_SELECTION)); } } private class PushPullSelectionButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { forbidReentry = true; editor.changeStage(Editor.STAGE_PUSH_PULL_SELECTION); forbidReentry = false; dataFlowModelingButton.setEnabled(editor.canChange(Editor.STAGE_DATA_FLOW_MODELING)); } } }