diagrameditor.java

来自「GEF基础源码」· Java 代码 · 共 95 行

JAVA
95
字号
package com.jixy.study.gef.control;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.parts.GraphicalEditor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.ui.actions.ActionFactory;

import com.jixy.study.gef.model.Diagram;
import com.jixy.study.gef.model.Ellipse;

//现在来看看这个DiagramEditor,在其构造函数中要设置EditDomain
//(这是一个由一个PaletteViewer,一个CommandStack和一个或多个
//EditPartViewers所组成的类)。最重要的两个方法是
//configureGraphicalViewer()和initializeGraphicalViewer(),
//分别用来配置和初始化 EditPartViewer。
public class DiagramEditor extends GraphicalEditor {

	public DiagramEditor() {

		setEditDomain(new DefaultEditDomain(this));

	}

	// initializeGraphicalViewer()设置了编辑器的初始Contents为新创建的一个Diagram,
	// 因为需求是在一个Diagram上显示一个Ellipse,所以在其构造函数中,
	// 我们初始化了一个Ellipse变量,并且把它加入Diagram的列表中。
	protected void initializeGraphicalViewer() {

		Diagram diagram = new Diagram();

		Ellipse ellipse1 = new Ellipse();

		Ellipse ellipse2 = new Ellipse();

		ellipse1.setLocation(new Point(150, 50));

		ellipse2.setLocation(new Point(250, 150));

		diagram.addChild(ellipse1);
		diagram.addChild(ellipse2);

		getGraphicalViewer().setContents(diagram);

	}

	// configureGraphicalViewer()配置了RootEditPart、用于创建 EditPart的EditPartFactory。
	protected void configureGraphicalViewer() {

		super.configureGraphicalViewer();

		GraphicalViewer viewer = getGraphicalViewer();

		viewer.setRootEditPart(new ScalableFreeformRootEditPart());

		viewer.setEditPartFactory(new PartFactory());

		ContextMenuProvider context = new ContextMenuProvider(
				getGraphicalViewer()) {
			public void buildContextMenu(IMenuManager menu) {
				GEFActionConstants.addStandardActionGroups(menu);
				IAction action = getActionRegistry().getAction(
						ActionFactory.UNDO.getId());
				menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
				action = getActionRegistry().getAction(
						ActionFactory.REDO.getId());
				menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
			}
		};
		getGraphicalViewer().setContextMenu(context);

	}

	public void doSave(IProgressMonitor monitor) {

	}

	public void doSaveAs() {

	}

	public boolean isSaveAsAllowed() {

		return false;

	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?