Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / application / views / FlowLayerWindow.java
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);
		}
	}
}