Мой плагин 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
в качестве параметра элемента.
У кого-нибудь есть идеи, как это обойти?