2011-12-22 105 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

我剛剛發現下面的活動模式消除了外部工具菜單中的貢獻。這個很難弄清楚。

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

     <activityPatternBinding 
     activityId="org.eclipse.ui.navigator.resources.unwanted" 
     pattern=".*ExternalTool.*"> 
     </activityPatternBinding>