package application.views;
import application.ApplicationWindow;
import application.editor.Editor;
import application.editor.IStageChangeListener;
import application.editor.Stage;
import application.editor.stages.ControlFlowModelingStage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* {@link FlowLayerWindow} shows the window for enabling / disabling layers in the graph.
*/
public class FlowLayerWindow extends JDialog implements IStageChangeListener {
private final String title = "Flow Layer";
private final JCheckBox dataFlowCheckBox;
private final JCheckBox pushFlowCheckBox;
private final JCheckBox pullFlowCheckBox;
private final Stage stage;
public FlowLayerWindow(final ApplicationWindow owner) {
super(owner);
setTitle(title);
setDefaultCloseOperation(HIDE_ON_CLOSE);
stage = Editor.STAGE_CONTROL_FLOW_DELEGATION;
// Add checkboxes.
dataFlowCheckBox = new JCheckBox("Data-Flow", false);
pushFlowCheckBox = new JCheckBox("Push-Flow", true);
pullFlowCheckBox = new JCheckBox("Pull-Flow", true);
// Add handlers to the checkboxes.
dataFlowCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stage.setLayerEnabled(Stage.DATA_FLOW_LAYER, dataFlowCheckBox.isSelected());
}
});
pushFlowCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stage.setLayerEnabled(Stage.PUSH_FLOW_LAYER, pushFlowCheckBox.isSelected());
}
});
pullFlowCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stage.setLayerEnabled(Stage.PULL_FLOW_LAYER, pullFlowCheckBox.isSelected());
}
});
dataFlowCheckBox.setEnabled(false);
pushFlowCheckBox.setEnabled(false);
pullFlowCheckBox.setEnabled(false);
// Initialize the layer panel layout.
Container panel = getContentPane();
panel.setLayout(new GridLayout(4, 1));
panel.add(dataFlowCheckBox);
panel.add(pushFlowCheckBox);
panel.add(pullFlowCheckBox);
Point location = new Point(owner.getX() + (owner.getWidth() / 2) - (this.getWidth() / 2), owner.getY() + (owner.getHeight() / 2) - (this.getHeight() / 2));
setLocation(location);
pack();
setResizable(false);
}
/**
* Enable all checkboxes when the stage is changed to {@link ControlFlowModelingStage} <br>
* Disable all checkboxes whenever the active stage changed otherwise
*/
@Override
public void stageChanged(Stage newStage) {
if (newStage instanceof ControlFlowModelingStage) {
dataFlowCheckBox.setEnabled(true);
pushFlowCheckBox.setEnabled(true);
pullFlowCheckBox.setEnabled(true);
newStage.setLayerEnabled(Stage.PUSH_FLOW_LAYER, pushFlowCheckBox.isSelected());
newStage.setLayerEnabled(Stage.PULL_FLOW_LAYER, pullFlowCheckBox.isSelected());
} else {
dataFlowCheckBox.setEnabled(false);
pushFlowCheckBox.setEnabled(false);
pullFlowCheckBox.setEnabled(false);
newStage.setLayerEnabled(Stage.PUSH_FLOW_LAYER, false);
newStage.setLayerEnabled(Stage.PULL_FLOW_LAYER, false);
}
}
}