`
liugang594
  • 浏览: 981950 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GEF中增加ContextMenu的支持

    博客分类:
  • GEF
阅读更多

 GEF中,增加对EditPart的右键菜单的支持是很普遍的一个需求。

 

这里就简单介绍一下增加右键菜单的方法。

 

首先需要了解的就是要支持右键菜单,就需要有一个用来管理和显示菜单的MenuManager对象加到图元对象上去,类似于JFace中对MenuManager的支持。

 

GEF中有一个类:ContextMenuProvider,就是用来实现对ContextMenu的支持。所以我们需要实现一个ContextMenuProvider的子类用于定义所有在Menu上的Action。例如:

 

public class ElementsContextMenuProvider extends ContextMenuProvider {

	private ActionRegistry actionRegistry;
	
	public ElementsContextMenuProvider(EditPartViewer viewer,ActionRegistry registry) {
		super(viewer);
		this.actionRegistry = registry;
	}

	@Override
	public void buildContextMenu(IMenuManager menu) {
		menu.add(actionRegistry.getAction(ActionFactory.REDO.getId()));
		menu.add(actionRegistry.getAction(ActionFactory.UNDO.getId()));
	}

}

 

 

有了这个类以后,就是把这个类设置到Viewer上去,在configureGraphicalViewer()可以如下做:

 

		ElementsContextMenuProvider contextMenu = new ElementsContextMenuProvider(
				viewer, getActionRegistry());
		viewer.setContextMenu(contextMenu);

 

 

这样所有在buildContextMenu()方法里添加的Action就会在Menu里显示出来。

 

除此之类。我们也可以利用org.eclipse.ui.popupMenus扩展点来定义扩展的Action。要想使用扩展的PopupMenu,则需要注册Menu,如下:

 

		ElementsContextMenuProvider contextMenu = new ElementsContextMenuProvider(
				viewer, getActionRegistry());
		viewer.setContextMenu(contextMenu);
		getSite().registerContextMenu(contextMenu, viewer);

 

 

然后我们就可以针对不同类型的EditPart对象定义PopupMenu扩展。不过需要注意提:有可能把不相关的PopupMenu项加进来了!

 

最简单,可以定义一些过滤规则,然后在最后显示Item之前把它们过滤掉,例如,可以重写getItems()方法,如下:

 

	@Override
	public IContributionItem[] getItems() {
		IContributionItem[] items = super.getItems();
		List<IContributionItem> remains = new ArrayList<IContributionItem>();
		for(IContributionItem i:items){
			if(isAllowed(i)){
				remains.add(i);
			}
		}
		return remains.toArray(new IContributionItem[0]);
	}
	
	private boolean isAllowed(IContributionItem itemToAdd) {
		String id = itemToAdd.getId();
		if(id==null){
			return false;
		}
		if (!id.startsWith("com.tibco.cdc.liugang")
						&& !id.equals(ActionFactory.REDO.getId()) && !id
						.equals(ActionFactory.UNDO.getId())) {
			return false;
		}
		return true;
	}

 

 

这样只有以我的包前为前缀的item和redo、undo项可以被显示出来!

分享到:
评论

相关推荐

    GEF中文教程+代码

    在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...

    GEF入门学习资料,简单地介绍了GEF使用过程中用到的基本类和函数的用法

    有一个非常不错的例子可以帮助我们学习 GEF,这个例子包括六个项目,每一个项目都是在前一个项目的基础上增加一些功能的。这个例子可以帮助我们了解 GEF 的典型功能,如 DirectEdit、Palette 等等。 在学习 GEF 的...

    GEF 入门版中文教程 源码

    6. **连接器(Connectors)**和**连接线(Edges)**:对于有向图或网络图的编辑,GEF支持创建和管理连接线,以表示元素之间的关系。 7. **手势(Gestures)**和**事件(Events)**:GEF识别用户的手势,如拖拽、点击等,并...

    GEF入门学习例子

    在GEF中,通过实现`OutlinePage`和`StructuredSelection`可以将模型数据展示在大纲视图中。 6. **鹰眼(Eyeball)**: 鹰眼功能是一种缩略图视图,让用户能快速查看整个图形区域。在GEF中,可以通过自定义小部件并集成...

    GEF中文帮助实例

    GEF支持拖放操作,用户可以将图形元素从一个位置拖动到另一个位置,或者从外部源(如资源管理器)拖放到编辑器中。开发者需要实现相关的监听器和处理器,以处理拖放事件。 总的来说,GEF提供了一个强大而灵活的框架...

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

    在本篇文章中,我们将深入探讨gef转折线的相关方法实现以及GEF的API。 首先,让我们理解一下什么是转折线。在图形编辑中,转折线通常指的是具有多个折点的线条,这些折点可以由用户交互式地调整,以改变线条的形状...

    自己下的GEF资源打包

    标题中的“GEF资源打包”指的是一个集合了关于GEF(Graph Edit Framework)的各种学习资料的压缩文件。这个资源包可能包含了对理解、学习和使用GEF非常有帮助的材料。描述进一步说明了这个包中包含的具体内容,如...

    GEF-SDK-3.7.0

    **Eclipse 插件** 是Eclipse集成开发环境(IDE)中的扩展模块,它们增加了Eclipse的功能,使其能够支持不同的编程语言、框架或特定的工作流程。GEF-SDK作为Eclipse插件,意味着它可以直接在Eclipse环境中集成,帮助...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...

    GEF-SDK-3.6.2 jar

    GEF(Graphical Editing Framework)是Eclipse项目中的一个重要组成部分,它为开发图形化编辑器提供了强大的支持。在标题“GEF-SDK-3.6.2 jar”中,"GEF"即指代这一框架,"SDK"表示软件开发工具包,"3.6.2"则是该...

    GEF中属性页面的实现

    在实际应用中,可以根据需求扩展属性视图,添加更多的属性描述符,支持不同的数据类型和交互方式,以提供更丰富的用户界面和编辑功能。通过理解并掌握GEF中的属性视图机制,开发者可以构建出强大的图形编辑工具,...

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

    GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,主要用于构建图形化编辑工具。这个实例代码2是《Eclipse插件开发》教程中的一部分,旨在帮助初学者理解如何利用GEF来创建自定义的图形编辑器。在...

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

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的...对于希望在Java和Eclipse环境中提升图形界面开发技能的程序员来说,"GEF入门必读 GEF入门系列 GEF-whole-upload"是一个不可多得的学习资源。

    GEF-Update-3.7.1.zip

    GEF提供了丰富的API和设计模式,如MVC(模型-视图-控制器)、Command模式和AdapterManager,以支持图形元素的创建、编辑和交互。 在3.7.1版本中,GEF可能包含了对性能的优化、API的改进、新特性的添加以及已知问题...

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...

    基于gef框架Demo

    在“基于gef框架Demo”中,我们很可能会发现一系列用于展示Gef功能的示例程序。 Java是Gef框架的基础语言,它是一种广泛使用的面向对象编程语言,以其跨平台兼容性和丰富的库而闻名。Eclipse则是一个强大的集成开发...

    GEF_Tutorial.rar(GEF开发指南)

    GEF支持多种交互操作,如拖放、选择、复制、粘贴、撤销/重做等。这些功能可以通过实现特定的适配器和命令来添加到你的编辑器中。 **8. 示例项目** "emf&gef.pdf"和"GEF_Tutorial.pdf"这两份文档很可能包含了详细的...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    3. "如何在Eclipse3.3.1.1中安装VE,emf,GEF插件.doc" 提供了在特定版本的Eclipse中安装相关插件的步骤,这对于搭建开发环境至关重要。 4. "GEF_Tutorial.pdf" 和 "GEF_zh(1).pdf"、"GEF_zh.pdf" 是GEF的教程,可能...

    GEF 3.10 eclipse 插件

    GEF(Graphical Editing Framework)是Eclipse平台中的一个图形编辑框架,用于构建图形化用户界面和图形编辑工具。它为开发者提供了创建可定制的、基于模型的图形编辑器所需的各种组件和服务。GEF自1999年诞生以来,...

    GEF实现拷贝粘贴

    标题“GEF实现拷贝粘贴”涉及到的是在软件开发中使用Graphical Editing Framework(GEF)进行图形界面编辑时,如何实现复制和粘贴功能的技术。GEF是Eclipse平台下用于构建图形化编辑器的框架,它提供了一套完整的...

Global site tag (gtag.js) - Google Analytics