Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / application / ApplicationWindow.java
package application;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import javax.swing.JFrame;

import com.mxgraph.model.mxGeometry;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.swing.handler.mxRubberband;
import com.mxgraph.view.mxGraph;

import application.editor.Editor;
import application.views.NavigationWindow;
import application.views.controlFlowDelegation.FlowLayerWindow;

/**
 * Application main window
 * 
 * @author Nitta Lab.
 *
 */
public class ApplicationWindow extends JFrame {
	private static final long serialVersionUID = -8690140317781055614L;
	public static final String title = "Visual Modeling Tool";
	public static final Logger logger = Logger.getLogger("dtram");
		
	private Editor editor = null;
	private mxGraph graph = null;
	private mxGraphComponent graphComponent = null;

	private ApplicationMenuBar menuBar = null;
	private NavigationWindow navigationWindow = null;
	private FlowLayerWindow showFlowLayerWindow = null;

	public ApplicationWindow() {
		setTitle(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		try {
			Handler fh = new FileHandler("dtram.log", true);
			fh.setFormatter(new SimpleFormatter());
			logger.addHandler(fh);
		} catch (SecurityException | IOException e) {
			e.printStackTrace();
		}
		logger.setLevel(Level.INFO);
		logger.log(Level.INFO, "launched");
		
		// If you want to change the language, change here.
		ApplicationLanguage.getInstance().setLocaleLanguage(ApplicationLanguage.JP);

		this.graph = new mxGraph() {
			public boolean isPort(Object cell) {
				mxGeometry geo = getCellGeometry(cell);
				
				return (geo != null) ? geo.isRelative() : false;
			}
			
			public boolean isCellFoldable(Object cell, boolean collapse) {
				return false;
			}
		};
		
		this.graphComponent = new mxGraphComponent(graph);
		
		this.editor = new Editor(graphComponent);

		getContentPane().add(graphComponent);
		new mxRubberband(graphComponent);
		graph.setAllowDanglingEdges(false);
		graph.setCellsDisconnectable(true);
		graph.setDropEnabled(false);
				
		menuBar = new ApplicationMenuBar(this);
		setJMenuBar(menuBar);
		setSize(870, 640);
		
		navigationWindow = new NavigationWindow(this, editor);
		navigationWindow.setVisible(true);
		
		showFlowLayerWindow = new FlowLayerWindow(this);
		showFlowLayerWindow.setVisible(false);
		
		editor.addStageChangeListener(navigationWindow);
		editor.addStageChangeListener(showFlowLayerWindow);
	}

	public mxGraph getGraph() {
		return graph;
	}

	public mxGraphComponent getGraphComponent() {
		return graphComponent;
	}

	public Editor getEditor() {
		return editor;
	}

	public void setEditor(Editor editor) {
		this.editor = editor;
	}

	public void showNavigationWindow() {
		navigationWindow.setVisible(true);
	}
	
	public void showSwitchLayerWindow() {
		showFlowLayerWindow.setVisible(true);
	}

}