Eclipse RCP получает вклады панели инструментов программно - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть приложение RCP, и я хочу отключить / включить некоторые элементы панели инструментов при выполнении некоторых действий. Мое расширение:

<extension point="org.eclipse.ui.menus">
   <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar">
      <toolbar id="vendor.toolbar1h">
         <command commandId="vendor.commands.MyCommand"
          icon="icon.png"
          id="MyButtonID1"
          style="toggle">
         </command>
      </toolbar>
   </menuContribution>
</extension>

Я пытаюсь перечислить все вклады панели инструментов с этим кодом, но он не работает, он показывает только вклады представлений.

IViewReference[] refs = PlatformUI.getWorkbench()
   .getActiveWorkbenchWindow().getActivePage().getViewReferences();
for (IViewReference ref : refs) {
   System.err.println("ID: "+ref.getId());
   IViewPart viewPart = PlatformUI.getWorkbench()
      .getActiveWorkbenchWindow().getActivePage().findView(ref.getId());
   IActionBars bars = viewPart.getViewSite().getActionBars();
   if (bars != null) {
      IToolBarManager tbm = bars.getToolBarManager();
      if (tbm != null) {
         IContributionItem[] items = tbm.getItems();
         for (IContributionItem item : items)
            System.err.println("\t" + item);
         }
      }
}

Существует ли способ получить главную панель действий?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Нет, нет возможности получить доступ к главной панели инструментов. Панель инструментов IActionBars возвращает панель инструментов просмотра (прямо рядом с вкладкой просмотра).

Но вы включаете / отключаете команду на основе включения активного обработчика. Ваш обработчик отвечает за определение его включенного состояния.

Программно, если вы подкласс org.eclipse.core.commands.AbstractHandler, вы бы позвонили setBaseEnabled(boolean state), чтобы убедиться, что он запускает правильное событие.

Декларативно: при добавлении через org.eclipse.ui.handlers он также поддерживает элемент enabledWhen. Имеет доступ к состоянию приложения, указанному в org.eclipse.ui.ISources

0 голосов
/ 16 июля 2015

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

       <activity id="org.eclipse.ui.navigator.resources.unwanted" name="unwanted"/> 

       <activityPatternBinding
       activityId="org.eclipse.ui.navigator.resources.unwanted"
       pattern=".*ExternalTool.*">
       </activityPatternBinding>
0 голосов
/ 13 сентября 2012

Если вы хотите получить доступ к своим элементам на главной панели инструментов, как только IHandler реализует интерфейс IElementUpdater, среда команд Eclipse будет использовать этот класс для обновления метки, всплывающей подсказки или даже изображений команды. Смотрите это для более подробной информации:

http://www.robertwloch.net/2011/01/eclipse-tips-tricks-label-updating-command-handler/

...