EclipseRCP:如何获得显示视图菜单而不是对话框
我已经添加到透视图的EclipseRCP:如何获得显示视图菜单而不是对话框,eclipse,eclipse-plugin,eclipse-rcp,Eclipse,Eclipse Plugin,Eclipse Rcp,我已经添加到透视图的org.eclipse.ui.menu <command commandId="org.eclipse.ui.views.showView" style="pulldown"> </command> 这会将Show View项添加到主菜单中,但该项不是菜单(与Eclipse窗口菜单中的一样)。相反,按下它会显示一个对话框,我可以在其中选择一个视图。如何获得菜单?您必须创建如下所示的ContributionItem类: 公共
org.eclipse.ui.menu
<command
commandId="org.eclipse.ui.views.showView"
style="pulldown">
</command>
这会将
Show View
项添加到主菜单中,但该项不是菜单(与Eclipse窗口菜单中的一样)。相反,按下它会显示一个对话框,我可以在其中选择一个视图。如何获得菜单?您必须创建如下所示的ContributionItem类:
公共类MyShowViewContributionItem扩展org.eclipse.ui.internal.ShowViewMenu{
公共MyShowViewContributionItem(){
这个(“om.myplugin.myShowViewId”);
}
公共MyShowViewContributionItem(字符串id){
super(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow(),id);
}
}
然后在plugin.xmlorg.eclipse.ui.menu
扩展中:
干杯,
Max我想分享一下我最近尝试做同样事情的实验,Max在遗嘱中的建议是可行的,但让您使用内部代码(导致一个“”警告) 另一种方法是通过应用程序操作栏advisor构建菜单。尽管如此,这种方法将使您不得不编写代码(反对在插件XML定义中使用提供菜单贡献)。考虑下面的例子: 这种方法的一个可能的缺点是在advisor中创建的菜单与菜单贡献创建的菜单之间的交互。因为,您需要在菜单贡献中添加更多排序逻辑。这对大多数人来说可能是好的,但是,您失去了
org.eclipse.ui.menus
中集中式菜单结构的“感觉”(即使当其他插件使用自己的菜单贡献时,这种感觉只是一种错觉)
我还包括了透视菜单的构建;完整选项,但如果有人试图使用透视图执行相同的菜单构建,我会添加它。完成此操作后,我会在菜单中看到
,尽管在透视图扩展中添加了
并清除了工作区数据。你知道怎么解决这个问题吗?
public class ApplicationActionBarAdvisor extends ActionBarAdvisor
{
private IContributionItem contributionOpenPerspective;
private IContributionItem contributionShowView;
...
protected void makeActions(IWorkbenchWindow window)
{
...
contributionOpenPerspective = ContributionItemFactory.
PERSPECTIVES_SHORTLIST.create(window);
contributionShowView = ContributionItemFactory.
VIEWS_SHORTLIST.create(window);
...
}
protected void fillMenuBar(IMenuManager menuBar)
{
...
MenuManager windowMenu = new MenuManager("&Window",
IWorkbenchActionConstants.M_WINDOW);
menuBar.add(windowMenu);
MenuManager openPerspectiveMenu = new MenuManager("&Open Perspective");
openPerspectiveMenu.add(perspectivesContribution);
windowMenu.add(openPerspectiveMenu);
MenuManager showViewMenu = new MenuManager("Show &View");
showViewMenu.add(viewsContribution);
windowMenu.add(showViewMenu);
...
}
}