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项可以被显示出来!
分享到:
相关推荐
dudu翻译的GEF中文教程,入门最佳资料。附每章代码。
在GEF中property view 页面的实现!介绍了其实现的步骤方法!还结合了实例进行讲解!
这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。
GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制
GEF入门实例代码2《Eclipse插件开发》中实例
我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload
这是我参考了一些其他资料,自己写的一个GEF示例...1. 在你的Eclipse中要有GEF, Draw2d的包 2. 将此压缩包中的eclipse project引入到你的Eclipse环境中 3. 运行这个插件 4. 看到界面后,点击 Tools -- Open GEF Editor
RCP GEF 入门教程,从法语班翻译过来的,自认为是比较全面细致的GEF入门教程,配套源码,很有学习价值!!!
RCP与GEF的课件,简单的介绍了RCP和GEF中的各组件的功能,已经工作流程
GEF简易教程-学习GEF的入门教程,不错的gef入门教程
学习GEF的入门资料,简单地介绍了GEF使用过程中用到的基本类和函数的用法。
gef 绘图折线的实现方法。 gef API chm 格式
GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...
GEF eclipse 插件
GEF.rar GEF.rar GEF.rar
eclipse中emf,gef,ve的安装
GEF-ALL-3.7 GEF-ALL-3.8 官方包。 GEF Draw2d 学习资料
Agenda Start things off What is GEF? GEF Demo Draw2d Overview Example GEF Overview Break Hands-on Activity: Shapes Example
GEF理解之第三部分,学习gef必备文档资料啊,值得下载
GEF理解之第一部分,学习gef必备文档资料啊,值得下载