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.DependencyModelingStage;
import application.editor.stages.PushPullSelectionStage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FlowLayerWindow extends JDialog implements IStageChangeListener {
private String title = "Flow Layer";
private JCheckBox dataFlowCheckBox = null;
private JCheckBox pushFlowCheckBox = null;
private JCheckBox pullFlowCheckBox = null;
private JCheckBox dependencyCheckBox = null;
private Stage stage = null;
public FlowLayerWindow(final ApplicationWindow owner){
super(owner);
setTitle(title);
setDefaultCloseOperation(HIDE_ON_CLOSE);
stage = Editor.STAGE_PUSH_PULL_SELECTION;
// Add check boxes.
dataFlowCheckBox = new JCheckBox("Data-Flow", false);
pushFlowCheckBox = new JCheckBox("Push-Flow", true);
pullFlowCheckBox = new JCheckBox("Pull-Flow", true);
dependencyCheckBox = new JCheckBox("Dependency", false);
// Add handlers to the check boxes.
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());
}});
dependencyCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, dependencyCheckBox.isSelected());
}});
dataFlowCheckBox.setEnabled(false);
pushFlowCheckBox.setEnabled(false);
pullFlowCheckBox.setEnabled(false);
dependencyCheckBox.setEnabled(false);
// Initialize the layer panel layout.
Container panel = getContentPane();
panel.setLayout(new GridLayout(/*low*/4, /*col*/1));
panel.add(dataFlowCheckBox);
panel.add(pushFlowCheckBox);
panel.add(pullFlowCheckBox);
panel.add(dependencyCheckBox);
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);
}
/**
* Toggle the activation of layer check boxes whenever the current stage changes.
*/
@Override
public void stageChanged(Stage newStage) {
if (newStage instanceof DependencyModelingStage) {
// DependencyStageでは全て操作可能
dataFlowCheckBox.setEnabled(true);
pushFlowCheckBox.setEnabled(true);
pullFlowCheckBox.setEnabled(true);
dependencyCheckBox.setEnabled(true);
// Dependencyチェックを自動でON
dependencyCheckBox.setSelected(true);
newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, true);
} else if (newStage instanceof PushPullSelectionStage) {
// PushPullStage:Data,Push,Pullを表示(操作不可)
setAllCheckBoxesEnabled(false);
dataFlowCheckBox.setSelected(true);
pushFlowCheckBox.setSelected(true);
pullFlowCheckBox.setSelected(true);
dependencyCheckBox.setSelected(false);
newStage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, true);
newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, true);
newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, true);
newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, false);
} else if (newStage instanceof DataFlowModelingStage) {
// DataFlowStage:Dataのみ表示(操作不可)
setAllCheckBoxesEnabled(false);
dataFlowCheckBox.setSelected(true);
pushFlowCheckBox.setSelected(false);
pullFlowCheckBox.setSelected(false);
dependencyCheckBox.setSelected(false);
newStage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, true);
newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, false);
newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, false);
newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, false);
} else {
// その他ステージではすべて非活性
setAllCheckBoxesEnabled(false);
dataFlowCheckBox.setSelected(false);
pushFlowCheckBox.setSelected(false);
pullFlowCheckBox.setSelected(false);
dependencyCheckBox.setSelected(false);
newStage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, false);
newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, false);
newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, false);
newStage.setEnabledForLayer(Stage.DEPENDENCY_LAYER, false);
}
}
private void setAllCheckBoxesEnabled(boolean enabled) {
dataFlowCheckBox.setEnabled(enabled);
pushFlowCheckBox.setEnabled(enabled);
pullFlowCheckBox.setEnabled(enabled);
dependencyCheckBox.setEnabled(enabled);
}
}