`
tianke66
  • 浏览: 183209 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

实现在GEF中被选中图形上的右键菜单

阅读更多

要实现在GEF中被选中图形上的右键菜单,每个action完成如下三项工作:

<!--[if !supportLists]-->1、  <!--[endif]-->action类定义,一般情况的action都会在选中图形后操作,所以,一般都会继承自org.eclipse.gef.ui.actions.SelectionAction

import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

import dbdesigner.diagram.edit.parts.TableEditPart;

public class TableProAction extends SelectionAction{
	private IWorkbenchPart part;
	public TableProAction(IWorkbenchPart part) {		 
		 super(part);
	     setId("tablePro");
	     setText("属性");
	     this.part=part;
	 }
	 @Override
	public void run() {
	    super.run();
	    IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
	    TableEditPart tableEditPart = (TableEditPart) getSelectedObjects().get(0);
		TableProDialog tp = new TableProDialog(workbenchWindow.getShell(),tableEditPart);
		tp.open();
	}
	@Override
	protected boolean calculateEnabled() {
		if (getSelectedObjects().size() == 1 && (getSelectedObjects().get(0) instanceof ShapeEditPart)) {
			ShapeEditPart part = (ShapeEditPart) getSelectedObjects().get(0);
			if(part instanceof TableEditPart)
				return true;
		}
		return false;
	}
}
 

<!--[if !supportLists]-->2、  <!--[endif]-->DbdesignerDiagramEditorcreateActions中将上述action注册到ActionRegistry,并设定和selectionaction的关系,这个类的是GEF生成的代码,只需要修改以下两个地方


prot       protected void configureGraphicalViewer() {
		  super.configureGraphicalViewer();
		  IDiagramGraphicalViewer viewer = getDiagramGraphicalViewer();
			// configure the context menu provider
			ContextMenuProvider cmProvider = new MyDiagramContextMenuProvider(viewer, getActionRegistry());
			viewer.setContextMenu(cmProvider);
			getSite().registerContextMenu(cmProvider, viewer);
		}

	/**
	 * Create the actions
	 */
	protected void createActions() {
		// Create the actions
			super.createActions();
			ActionRegistry ar = getActionRegistry();
			//一组继承自selectionaction的action
			IAction[] actions = new IAction[] { new TableProAction(this) // 编辑属性
			};
			for (IAction a : actions) {
				ar.registerAction(a);
				getSelectionActions().add(a.getId());
			}
	}

<!--[if !supportLists]-->3、  <!--[endif]-->在新增一个MyDiagramContextMenuProvider类,注册到右键菜单

public class MyDiagramContextMenuProvider extends ContextMenuProvider{

	/** The editor's action registry. */
	private ActionRegistry actionRegistry;
	
	public MyDiagramContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
		super(viewer);
		if (registry == null) {
			throw new IllegalArgumentException();
		}
		actionRegistry = registry;
	}
	
	  public void buildContextMenu(IMenuManager menu) {
		  
	     //添加用户自定义菜单项
		menu.add(getAction("tablePro"));
	   }
	  // 过滤不需要的上下文菜单
	   public IContributionItem[] getItems() {
	     IContributionItem[] ic = super.getItems();
	     filterSystemPopMenu(ic);
	     return ic; 
	   }
	   
	   private void filterSystemPopMenu(IContributionItem[] ic)
	   {
		   for (int i=0;i

分享到:
评论

相关推荐

    GEF中属性页面的实现

    在GEF中property view 页面的实现!介绍了其实现的步骤方法!还结合了实例进行讲解!

    gef 转折线的相关方法实现和 GEF的API chm 格式

    gef 绘图折线的实现方法。 gef API chm 格式

    GEF入门系列.rar

    GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...

    GEF入门详解DOC文档

    GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很多,例如:UML类图编辑器、图形化XML编辑器、界面设计工具以及图形化...

    基于GEF框架的SVG制作工具设计与实现

    SVG(Scalable Vector Graphics)是一种基于XML开放标准的矢量图形描述语言,支持对图形、图像、文字、透明效果和动画描述,并提供极强的交互性,被广泛使用在各应用系统中。但是,由于SVG源码可读性差,编写需时长,易...

    GEF中文教程+代码

    dudu翻译的GEF中文教程,入门最佳资料。附每章代码。

    GEF框架入门学习

    这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。

    GEF入门序列,用于实现典型的图形化应用程序

    实现一个典型的图形化应用程序,例如UML类图编辑器,这些预定义的Request基本够用了。然而很多需求不太符合约定俗成的使用习惯,因此实现起来更多依赖开发人员的编码,而不是开发框架带来的便利。在这种情况下,我们...

    GEF-ALL-3.2.2

    GEF: Graphical Editing Framework &lt;br&gt;GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...

    GEF 开发示例 树形展现(第二版)

    一个GEF的例子,例子中展示了利用GEF往画布上添加节点 删除节点,以及树形展现等得荣

    GEF 开发简单示例

    这是我参考了一些其他资料,自己写的一个GEF示例...1. 在你的Eclipse中要有GEF, Draw2d的包 2. 将此压缩包中的eclipse project引入到你的Eclipse环境中 3. 运行这个插件 4. 看到界面后,点击 Tools -- Open GEF Editor

    GEF-ALL-3.6.1+ModelGoon-4.4.1

    在Package Explorer的工程目录里点击右键菜单-&gt;Other里会多出一项ModelGoon Diagrams,可以建立class diagram,interaction diagram,package dependencies diagram,建好一个diagram文件后,直接将.java文件拖到图内...

    GEF锚点鼠标定位

    实现gef模型连线间锚点的定位实现鼠标位置定位,就是鼠标在哪里,他的锚点就会在哪里!

    GEF入门必读 GEF入门系列 GEF-whole-upload

    GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制

    GEF开发指南

    GEF图形编辑框架使用指南,从新手到入门,详细的讲解了如何使用GEF进行图形编辑

    GEF入门实例代码2《Eclipse插件开发》中实例

    GEF入门实例代码2《Eclipse插件开发》中实例

    eclipse中emf,gef,ve的安装

    eclipse中emf,gef,ve的安装

    自己下的GEF资源打包

    我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload

    将GEF应用到Web上,PPT

    GEF小组的ppt,展示了如何将GEF应用到Web上的一些思路和做法。

Global site tag (gtag.js) - Google Analytics