实现在GEF中被选中图形上的右键菜单
2008-07-29 17:20
204 查看
要实现在GEF中被选中图形上的右键菜单,每个action完成如下三项工作:
1、
action类定义,一般情况的action都会在选中图形后操作,所以,一般都会继承自org.eclipse.gef.ui.actions.SelectionAction
2、
在DbdesignerDiagramEditor的createActions中将上述action注册到ActionRegistry,并设定和selectionaction的关系,这个类的是GEF生成的代码,只需要修改以下两个地方
3、
在新增一个MyDiagramContextMenuProvider类,注册到右键菜单
1、
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; } } [code]
2、
在DbdesignerDiagramEditor的createActions中将上述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()); } }
3、
在新增一个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[code]
相关文章推荐
- GEF,DRAW2D,在子图形上点击鼠标左键,让父图形被选中的实现方式
- 【Unity编辑器】使用反射和Attribute实现自定义右键菜单
- JS - 实现右键菜单功能
- DirectUI界面编程(六)实现右键弹出菜单
- silverlight右键菜单实现
- Silverlight系列(右键菜单、控件移动的实现)
- C#(Winform)右键菜单的实现以及选中某项后勾选
- ListBox添加右键菜单并选择该项功能的实现
- Windows 右键菜单中实现将Oracle trc文件转换为可读文件
- 在QListWidget的item上实现右键菜单 (2009-11-23 16:41)
- js实现浏览器右键菜单,屏蔽默认菜单
- javascript中如何实现浏览器上的右键菜单
- Qt之右键菜单实现
- C#中用鼠标右键选中tabpage选项卡 并且弹出右键菜单,实现选项卡的关闭
- 给ECharts添加右键点击事件,实现右键功能菜单
- [置顶] echars-all.js 2.2.7组织结构图及自定义右键菜单的实现思路及源码
- zTree结合jquery.contextMenu.js实现右键菜单
- arcengine实现右键菜单打开/关闭所有图层