我的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
。
有人知道如何解决这个问题吗?
答案 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