【问题标题】:How to remove unwanted menu contributions in eclipse rcp application?如何在 eclipse rcp 应用程序中删除不需要的菜单贡献?
【发布时间】:2013-11-08 08:57:37
【问题描述】:

我制作了一个 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 隐藏菜单。但是我不能隐藏整个菜单,只能隐藏它的动作! Remove "File, edit,...etc" menus from Eclipse RCP application

现在如何移除 Refractor 选项? 谢谢。

【问题讨论】:

    标签: java eclipse eclipse-plugin eclipse-rcp


    【解决方案1】:

    您可以使用活动,如here 所述。 首先,你需要find the ID of the menu:

    1. 使用插件间谍

    第一种方法是使用 Plug-In Spy。按 alt-shift-F2 并单击 要隐藏的菜单项或工具栏按钮。如果有身份证 标题“活动操作定义标识符”下的字符串,那么您是 运气好。此项目已使用命令扩展添加,您可以 将此 ID 用作活动扩展的模式参数。但不是 所有使用命令扩展添加的项目都会显示它们的 ID 字符串到插件间谍。

    附带说明,ID 字符串是用句点分隔的。例如 ID 为 一个按钮可能是“org.eclipse.ui.navigate.backwardHistory”。常规的 表达式使用句点代表任何字符。幸运的时期 用作通配符与实际句点字符匹配,因此您不需要 如果你不想逃避他们。我发现它使阅读更容易一些 如果他们没有逃脱并且极不可能会导致任何 模棱两可的匹配。

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

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

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

    您想做的是尝试获取几条信息:

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

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

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

    然后创建一个永远不会被激活的新Activity 和一个对应的activityPatternBinding 与您在上一步中找到的id。在您的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>  
    

    【讨论】:

    • menuItemID 是我要隐藏的菜单的 ID?什么是 activePartId 和 nonExistentPartId。我还发现 Refactor 是由 org.eclipse.ltk.ui.refactoring 添加的,并且在命令扩展下,相应类别的 id 是:org.eclipse.ltk.ui.category.refactoring 那么内容是什么?
    • "menuItemID 是我要隐藏的菜单的 ID?"是的。这不必与命令类别的 ID 相同,请查看“org.eclipse.ui.menus”扩展名。 activePartId 是变量的名称,它保持原样。 nonExistentPartId 是一些不存在的部件 ID。您还可以将 下的标记替换为任何其他始终为假的表达式(例如“某物的计数为 -1”)
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多