Newer
Older
Multi-StageDesignTool / AlgebraicDataflowArchitectureModel / src / application / views / controlFlowDelegation / FlowLayerWindow.java
package application.views.controlFlowDelegation;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JDialog;

import application.ApplicationWindow;
import application.editor.Editor;
import application.editor.IStageChangeListener;
import application.editor.Stage;
import application.editor.stages.ControlFlowDelegationStage;

/*************************************************************
 * レイヤー表示
 */
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 ControlFlowDelegationStage stage = null;
	
	/*************************************************************
	/*************************************************************
	 * [ *constructor ]
	/*************************************************************
	 * 
	 */
	public FlowLayerWindow(final ApplicationWindow owner) {
		super(owner);
		
		setTitle(title);
		setDefaultCloseOperation(HIDE_ON_CLOSE);

		stage = Editor.STAGE_CONTROL_FLOW_DELEGATION;
		
		// ボタンの追加.
		
		dataFlowCheckBox  = new JCheckBox("Data-Flow", false);
		pushFlowCheckBox = new JCheckBox("Push-Flow", true);
		pullFlowCheckBox   = new JCheckBox("Pull-Flow", true);

		// 各Viewにイベントハンドラを追加
		dataFlowCheckBox.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				stage.setEnabledForLayer(Stage.DATA_FLOW_LAYER, dataFlowCheckBox.isSelected());	
			}});
		
		pushFlowCheckBox.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				stage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, pushFlowCheckBox.isSelected());				
			}});

		pullFlowCheckBox.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				stage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, pullFlowCheckBox.isSelected());		
			}});	
			
		dataFlowCheckBox.setEnabled(false);
		pushFlowCheckBox.setEnabled(false);
		pullFlowCheckBox.setEnabled(false);
	
		// レイヤーのパネルレイアウトの初期化. 
		Container panel = getContentPane();
		panel.setLayout(new GridLayout(/*low*/3, /*col*/1));
		panel.add(dataFlowCheckBox);
		panel.add(pushFlowCheckBox);
		panel.add(pullFlowCheckBox);
		
		pack();
		setResizable(false);	
	}

	/*************************************************************
	/*************************************************************
	 * [ *public ]
	/*************************************************************
	 * ステージが変わったら, レイヤー表示のボタンのアクティブ状態を切り替える. 
	 * @param stage 現在のステージ
	 */
	@Override
	public void stageChanged(Stage newStage) {
		if (newStage instanceof ControlFlowDelegationStage) {			
			dataFlowCheckBox.setEnabled(true);
			pushFlowCheckBox.setEnabled(true);
			pullFlowCheckBox.setEnabled(true);
			
			newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, pushFlowCheckBox.isSelected());
			newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, pullFlowCheckBox.isSelected());			
		}
		else {
			dataFlowCheckBox.setEnabled(false);
			pushFlowCheckBox.setEnabled(false);
			pullFlowCheckBox.setEnabled(false);
			
			newStage.setEnabledForLayer(Stage.PUSH_FLOW_LAYER, false);
			newStage.setEnabledForLayer(Stage.PULL_FLOW_LAYER, false);			
		}	
	}	
}