通常,在编辑器中,可以使用以下内容提供上下文菜单(在org.eclipse.ui.menus扩展名中声明)。
MenuManager menuManager = new MenuManager();
Control menuParent = ... ;//some Control in the editor
Menu contextMenu = menuManager.createContextMenu(menuParent);
menuParent.setMenu(contextMenu);
getEditorSite().registerContextMenu(CONTEXT_MENU_ID, menuManager, getMySelectionProvider(), false);
我想在Dialog中做类似的事情。
显然,我的谷歌搜索技能今天缺乏,因为我似乎找不到任何东西,只有一个人在DZone上问同样的事情而没有成功。
是否可以通过扩展点将菜单提供给对话框中的控件?
答案 0 :(得分:8)
使用IMenuService
工作台窗口:
IMenuService mSvc = (IMenuService) window.getService(IMenuService.class);
MenuManager mgr = new MenuManager();
mSvc.populateContributionManager(mgr, "popup:my.dialog.menu");
control.setMenu(mgr.createContextMenu(control));
答案 1 :(得分:0)
以下是我为ViewPart
所做的事情。我不知道它是否适用于Dialog
。
protected void createContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager m) {
WorkAssignmentView.this.fillContextMenu(m);
}
});
Menu menu = menuMgr.createContextMenu(activeViewer.getControl());
activeViewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, activeViewer);
}
其中WorkAssignmentView
是我的ViewPart
课程的名称,activeViewer
是TableViewer
。
如果您可以执行control.getControl().setMenu(menu);
,那么您应该可以将其用作模型。
这是填充上下文菜单的方法。
protected void fillContextMenu(IMenuManager menuMgr) {
WorkAssignmentViewRow[] row = this.getSelectedAssignments();
menuMgr.add(addAction);
if (status.equals(WorkAssignmentViewRow.ACTIVE)) {
menuMgr.add(new Separator());
menuMgr.add(modifyAction);
menuMgr.add(changeAction);
menuMgr.add(new Separator());
menuMgr.add(deleteAction);
menuMgr.add(new Separator());
menuMgr.add(whoIsModifyingAction);
menuMgr.add(new Separator());
menuMgr.add(displayAction);
menuMgr.add(displayFullAction);
menuMgr.add(new Separator());
menuMgr.add(updateAction);
menuMgr.add(commitAction);
menuMgr.add(new Separator());
menuMgr.add(developmentMoveAction);
menuMgr.add(new Separator());
menuMgr.add(testMoveAction);
menuMgr.add(new Separator());
menuMgr.add(productionMoveAction);
menuMgr.add(displayProductionAction);
menuMgr.add(new Separator());
} else if (status.equals(WorkAssignmentViewRow.INACTIVE)){
menuMgr.add(new Separator());
menuMgr.add(changeAction);
menuMgr.add(new Separator());
menuMgr.add(deleteAction);
menuMgr.add(new Separator());
menuMgr.add(displayAction);
menuMgr.add(displayFullAction);
menuMgr.add(new Separator());
} else {
menuMgr.add(new Separator());
menuMgr.add(displayAction);
menuMgr.add(displayFullAction);
menuMgr.add(new Separator());
}
menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
答案 2 :(得分:0)
我设法在自定义表格中显示上下文菜单(我也在View中使用) 在“首选项”对话框中进行控制。
在我的ViewPart中,我有方法:
public static MyView getView() {
MyView myView = (MyView)
Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().
getActivePage().findView(MyView.ID);
return myView;
}
在我的RCP应用程序中,视图始终可见,因此该方法永远不应该 return null。
然后在我的偏好页面的ctor中,在对话框中打开:
m_viewPart = MyView.getView();
在首选项页面中创建控件时,我会注册上下文菜单 我的ViewPart:
Control control = new ...
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createContextMenu(control);
control.setMenu(menu);
viewPart.getSite().registerContextMenu("si.test.myCtxMenu",
menuManager,
selectionProvider);
在对话框中注册组件的上下文菜单可能不是最好的主意 到ViewPart,但它很简单并且有效。