![](/img/trans.png)
[英]How to not show context menu for multi selection in Eclipse Plugin Development
[英]Eclipse plugin dev - How to show default IResource context menu in non-text custom editor?
我正在编写一个Eclipse插件,以在自己的自定义编辑器中显示自己文件类型的内容。 该文件基本上由Project Explorer中的1..n IFile组成,这些文件显示在SWT TreeView中。 这个TreeView中的条目是一些以平面列表组织的Bean,但是我提供了一个适配器将它们转换为IFile。
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="de.dstg.delta.collections.model.Collection$Member"
class="de.dstg.delta.collections.CollectionMemberAdapterFactory">
<adapter
type="org.eclipse.ui.views.properties.IPropertySource2">
</adapter>
<adapter
type="org.eclipse.core.resources.IFile">
</adapter>
</factory>
</extension>
显示自定义SWT菜单没问题,但是我认为正确的方法是使用Eclipse菜单结构,尤其是通过为Resources提供默认行为。 如何在我的SWT TableView中显示默认上下文弹出菜单,通过右键单击Project Explorer中的资源可以使用该菜单?
编辑第二个问题已删除
EDIT2根据greg-449的回答,问题仍然存在,上下文菜单显示没有我想要这种选择类型的条目。 如果我需要删除或使用 “文件基础”之类的文件来打开文件,而无需自己实施。
我们还从其他插件中提供了一些其他菜单,当选择了适当的文件类型时,这些菜单应该在此处可见。 这在Project Explorer中有效,但在我的表格视图中无效。
我认为问题是所选元素的类型。 插件间谍在我的表格视图中显示以下内容:所选元素的类型: Collection$Member
,对所选元素有效的接口: IAdaptable
而Project Explorer分别显示File
和IFile
。
我的适配器可以正常工作,并在从未知的Eclipse源触发时提供相关的IFile
。 我想我必须明确地说,上下文菜单应该使用IFile
类型来获取正确的菜单项,但是我不知道如何。 还是我错过了什么?
确实没有“默认”菜单。 某些菜单项被定义为添加到定义特定占位符的所有弹出菜单中。
要使用占位符,必须在Eclipse中注册上下文菜单,例如:
private void createContextMenu(Viewer viewer) {
Control menuControl = viewer.getControl();
MenuManager menuMgr = new MenuManager("#PopUp");
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager mgr) {
fillContextMenu(mgr);
}
});
Menu menu = menuMgr.createContextMenu(menuControl);
menuControl.setMenu(menu);
// register the context menu such that other plugins may contribute to it
getSite().registerContextMenu(menuMgr, viewer);
}
private void fillContextMenu(IMenuManager menu) {
// TODO add your actions
// Standard additions
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
您可能还需要将查看器设置为“选择提供者”:
getSite().setSelectionProvider(viewer);
许多菜单项都会对此进行检查,以查看当前选择的类型。
没有什么可以自动为您提供“打开方式”或“删除”之类的功能,您必须在“ fillContextMenu”部分中自行添加这些内容。
您可以将org.eclipse.ui.actions.OpenWithMenu
用于“打开方式”。
IFile file = ... currently selected file
IMenuManager submenu = new MenuManager("Open With...");
submenu.add(new OpenWithMenu(getSite().getPage(), file);
menu.append(submenu);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.