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的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...
有一个非常不错的例子可以帮助我们学习 GEF,这个例子包括六个项目,每一个项目都是在前一个项目的基础上增加一些功能的。这个例子可以帮助我们了解 GEF 的典型功能,如 DirectEdit、Palette 等等。 在学习 GEF 的...
6. **连接器(Connectors)**和**连接线(Edges)**:对于有向图或网络图的编辑,GEF支持创建和管理连接线,以表示元素之间的关系。 7. **手势(Gestures)**和**事件(Events)**:GEF识别用户的手势,如拖拽、点击等,并...
在GEF中,通过实现`OutlinePage`和`StructuredSelection`可以将模型数据展示在大纲视图中。 6. **鹰眼(Eyeball)**: 鹰眼功能是一种缩略图视图,让用户能快速查看整个图形区域。在GEF中,可以通过自定义小部件并集成...
GEF支持拖放操作,用户可以将图形元素从一个位置拖动到另一个位置,或者从外部源(如资源管理器)拖放到编辑器中。开发者需要实现相关的监听器和处理器,以处理拖放事件。 总的来说,GEF提供了一个强大而灵活的框架...
在本篇文章中,我们将深入探讨gef转折线的相关方法实现以及GEF的API。 首先,让我们理解一下什么是转折线。在图形编辑中,转折线通常指的是具有多个折点的线条,这些折点可以由用户交互式地调整,以改变线条的形状...
标题中的“GEF资源打包”指的是一个集合了关于GEF(Graph Edit Framework)的各种学习资料的压缩文件。这个资源包可能包含了对理解、学习和使用GEF非常有帮助的材料。描述进一步说明了这个包中包含的具体内容,如...
**Eclipse 插件** 是Eclipse集成开发环境(IDE)中的扩展模块,它们增加了Eclipse的功能,使其能够支持不同的编程语言、框架或特定的工作流程。GEF-SDK作为Eclipse插件,意味着它可以直接在Eclipse环境中集成,帮助...
GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...
GEF(Graphical Editing Framework)是Eclipse项目中的一个重要组成部分,它为开发图形化编辑器提供了强大的支持。在标题“GEF-SDK-3.6.2 jar”中,"GEF"即指代这一框架,"SDK"表示软件开发工具包,"3.6.2"则是该...
在实际应用中,可以根据需求扩展属性视图,添加更多的属性描述符,支持不同的数据类型和交互方式,以提供更丰富的用户界面和编辑功能。通过理解并掌握GEF中的属性视图机制,开发者可以构建出强大的图形编辑工具,...
GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,主要用于构建图形化编辑工具。这个实例代码2是《Eclipse插件开发》教程中的一部分,旨在帮助初学者理解如何利用GEF来创建自定义的图形编辑器。在...
《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...
**GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的...对于希望在Java和Eclipse环境中提升图形界面开发技能的程序员来说,"GEF入门必读 GEF入门系列 GEF-whole-upload"是一个不可多得的学习资源。
GEF提供了丰富的API和设计模式,如MVC(模型-视图-控制器)、Command模式和AdapterManager,以支持图形元素的创建、编辑和交互。 在3.7.1版本中,GEF可能包含了对性能的优化、API的改进、新特性的添加以及已知问题...
4. Command执行的结果会被记录在EditDomain的命令堆栈中,以支持撤销/重做功能。 5. 最终,模型的变化通过控制器传递给视图,实现视图的实时更新。 #### 四、GEF的优势及设计哲学 GEF的设计理念在于减少模型与视图...
在RCP项目中,**Editor**是最常见的GEF承载对象,它继承自`EditorPart`,提供了图形修改后的自动保存机制,这是View不具备的功能。 为了构建GEF编辑器,需要创建以下三个核心组件: 1. **模型(Model)**:定义数据...
在“基于gef框架Demo”中,我们很可能会发现一系列用于展示Gef功能的示例程序。 Java是Gef框架的基础语言,它是一种广泛使用的面向对象编程语言,以其跨平台兼容性和丰富的库而闻名。Eclipse则是一个强大的集成开发...
GEF支持多种交互操作,如拖放、选择、复制、粘贴、撤销/重做等。这些功能可以通过实现特定的适配器和命令来添加到你的编辑器中。 **8. 示例项目** "emf&gef.pdf"和"GEF_Tutorial.pdf"这两份文档很可能包含了详细的...
3. "如何在Eclipse3.3.1.1中安装VE,emf,GEF插件.doc" 提供了在特定版本的Eclipse中安装相关插件的步骤,这对于搭建开发环境至关重要。 4. "GEF_Tutorial.pdf" 和 "GEF_zh(1).pdf"、"GEF_zh.pdf" 是GEF的教程,可能...