2011-12-22 4 views
2

У меня есть приложение RCP, и я хочу отключить/включить некоторые элементы панели инструментов при выполнении некоторых действий. Мое расширение:Eclipse 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); 
     } 
     } 
} 

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

ответ

2

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

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

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

Декларативно, когда внесенный через org.eclipse.ui.handlers он имеет элемент поддержки enabledWhen. У этого есть доступ к состоянию приложения, указанному в org.eclipse.ui.ISources

0

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

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

0

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

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

     <activityPatternBinding 
     activityId="org.eclipse.ui.navigator.resources.unwanted" 
     pattern=".*ExternalTool.*"> 
     </activityPatternBinding> 
Смежные вопросы