如何动态更新菜单标签为org.eclipse.ui.menus扩展做出了贡献

时间:2019-06-27 13:14:04

标签: eclipse-plugin eclipse-rcp

我的eclipse插件将菜单添加到主菜单。其中有一个子菜单(selection),它又具有一些子元素(items)。我想基于下面的选定项以编程方式更新selection的标签。 (见下文)


    File   MyMenu   Edit
    ─────┬─────────────────────┬──────────────────
         │ Selection: Item B  >│┌───────────┐
         └─────────────────────┘│   Item A  │
                                │ v Item B  │
                                │   Item C  │
                                └───────────┘

使用命令框架,我能够实现大部分功能(请参阅下文),但是我不知道如何以编程方式将selection子菜单及其所选子项的文本附加到该子菜单。

以下是插件xml扩展的相关部分:

    <extension point="org.eclipse.ui.commands">
      <command
            defaultHandler="menu_selector.DoSelectHandler"
            id="command.do_select"
            name="Select Option">
         <commandParameter
               id="command.do_select.option_value"
               name="Option Value"
               optional="false">
         </commandParameter>
         <commandParameter
               id="command.do_select.persisted_value"
               name="Persisted Value"
               optional="false">
         </commandParameter>
      </command>
    </extension>

    <extension point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="menu:org.eclipse.ui.main.menu?after=additions">
         <menu
               label="MyMenu">
            <menu
                  id="menu.selection"
                  label="Selection: ">
               <dynamic
                     class="menu_selector.ItemsProvider"
                     id="items">
               </dynamic>
            </menu>
         </menu>
      </menuContribution>
    </extension>

在类ItemsProvider中,我实现了getContributionItems(),用items命令填充了do_select动态子菜单。

DoSelectHandler实现IElementUpdater。在updateElement(UIElement element, Map parameters)动态菜单中,命令框架将在显示之前为其所有命令调用其items方法。我使用它来调用相关元素参数上的setChecked(true),以将v字符设置在items动态菜单中所选项目的前面。

这也是更新selection菜单的逻辑方法,但是我看不到如何实现。在commandId菜单上设置selection不会使命令框架调用updateElement()作为元素参数的selection

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

通过指定自己的班级来贡献菜单可以得到更多控制

   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            class="org.examples.menu.VeryDynamicMenuFactory"
            locationURI="menu:org.eclipse.ui.main.menu?after=additions">
      </menuContribution>
   </extension>

该类应扩展org.eclipse.ui.menus.ExtensionContributionFactory