Как динамически обновить метку меню, внесенного в расширение org.eclipse.ui.menus - PullRequest
1 голос
/ 27 июня 2019

Мой плагин 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 голосов
/ 30 июня 2019

Вы можете получить больше контроля, указав свой собственный класс для добавления в меню

   <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

...