1

我制作了一个 Eclipse RCP 应用程序,一切正常,但我最近注意到菜单中的 Refractor 选项。我想摆脱它。我在 ActionBarAdvisor.java 中有以下内容:

@Override
    protected void fillMenuBar(IMenuManager menu) {

        menu.add(createFile());
        menu.add(createEdit());
        menu.add(createNavigate());
        menu.add(createProject());
        menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        menu.add(createWindow());
        menu.add(createHelp());

    }

上述功能将操作添加到菜单中:

edit.add(undoAct);

并且 undoAct 也被定义为:

private IWorkbenchAction undoAction

makeActions 函数的内容如下:

@Override
    protected void makeActions(IWorkbenchWindow window) {
        undoAction = ActionFactory.UNDO.create(window);
        undoAction.setText("Undo Menu");
        register(undoAction);
}

我发现一个建议说使用 hideActionSets 隐藏菜单。但是我不能隐藏整个菜单,只能隐藏它的动作! 从 Eclipse RCP 应用程序中删除“文件、编辑等”菜单

现在如何删除 Refractor 选项?谢谢你。

4

1 回答 1

3

您可以使用活动,如此所述。首先,您需要找到菜单的 ID

  1. 使用插件间谍

第一种方法是使用 Plug-In Spy。按 alt-shift-F2 并单击要隐藏的菜单项或工具栏按钮。如果标题“活动操作定义标识符”下有一个 ID 字符串,那么您很幸运。此项目已使用命令扩展添加,您可以使用此 ID 作为活动扩展的模式参数。但并非所有使用命令扩展添加的项目都将其 ID 字符串呈现给插件间谍。

作为旁注,ID 字符串是用句点分隔的。例如,按钮的 ID 可能是“org.eclipse.ui.navigate.backwardHistory”。正则表达式使用句点代表任何字符。幸运的是,用作通配符的句点与实际句点字符匹配,因此如果您不想转义它们,则无需转义。我发现如果它们没有被转义,它会更容易阅读,而且它不太可能导致任何模棱两可的匹配。

  1. 使用插件注册表和 plugin.xml 文件

第二种方法是使用插件注册表。您可以通过以下方式打开此视图:

窗口/显示视图.../其他/插件开发/插件注册表

您想要做的是尝试获取一些信息:

a) 贡献 UI 元素的插件 b) 关于插件使用何种扩展来创建 UI 元素的信息

如果有一个非常独特的词与 UI 元素或其工具提示相关联,那么您可以在插件注册表的过滤器字段中使用它来尝试确定哪个插件贡献了 UI 元素。过滤器字段不是一个非常强大的工具,因此使用起来可能有点令人沮丧。它不允许使用通配符并且不匹配空格字符。

当您跟踪哪个插件贡献了 UI 元素时,您可以从 Plug-Ins 视图中打开有问题的插件,该视图与 Plug-in Development 透视图中的 Package Explorer 分组。然后转到 Extensions 选项卡并搜索 ID 字符串,该字符串通常可以在 Command 或 ActionSet 扩展的使用中找到。如果 UI 元素是使用 ActionSet 添加的,那么您可以在提供给活动扩展的模式参数中将插件 ID 作为 UI ID 的前缀。例如 org.eclipse.ui.actionsets.foo 变成了模式 org.eclipse.ui/org.eclipse.ui.actionsets.foo。

然后创建一个Activity永远不会被激活的新的,并activityPatternBindingid您在上一步中找到的对应。它在您的plugin.xml:

<extension point="org.eclipse.ui.activities">  
   <activity id="myActivity" name="MenuHidingActivity">  
      <enabledWhen>  
         <with variable="activePartId">    
            <equals value="nonExistentPartId"></equals>      
         </with>
      </enabledWhen>
   </activity>
   <activityPatternBinding activityId="myActivity" pattern="menuItemID">  
   </activityPatternBinding>
</extension>  
于 2013-10-29T12:26:33.713 回答