2014-01-23 33 views
1

我有一個定義在插件中的Eclipse產品 - 它沒有定義自己的Application類(即沒有定製的IApplication實現)。我在plugin.xml中定義的主工具欄中使用了一些動態下拉項目。我正在使用Eclipse 4.3(開普勒)平臺構建產品。Eclipse插件/產品 - 強制頂級coolbar佈局?

在運行時,我希望工具欄項目顯示當前選擇哪個下拉項目。對於通用項目,我使用圖標,但對於非通用項目,我想顯示一些標識文本。識別文本並不總是相同的長度。

我正在使用IElementUpdater更新下拉項目和工具欄項目。一切工作正常,除了coolbar/toolbar/trimbar不重新佈局。如果新文本比要替換的文本長,或者如果從圖標切換到文本或反之亦然,則工具欄顯示爲空 - 即使顯示下拉箭頭也不顯示。我的測試團隊報告下拉工具項目「消失」,這是對體驗的很好描述。

有什麼辦法強制主工具欄/ coolbar/trimbar複雜的重新佈局?

我已經做了一些研究,似乎我可以通過定義我自己的IApplication實現並使用ActionBarAdvisor子類捕獲Coolbar/Toolbar管理器以便稍後調用layout()來完成此操作。這是一個相當重量級的解決方案 - 有沒有其他的?

回答

2

您始終可以從PartSite檢索工具欄管理器。還有一些子類EditorSiteViewSite

IWorkbenchPartSite site = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart().getSite(); 
     ToolBarManager mgr = null; 
     if (site instanceof IEditorSite) { 
      IEditorSite editorSite = (IEditorSite) site; 
      mgr = (ToolBarManager) editorSite.getActionBars().getToolBarManager(); 
     } else if (site instanceof IViewSite) { 
      IViewSite viewSite = (IViewSite) site; 
      mgr = (ToolBarManager) viewSite.getActionBars().getToolBarManager(); 

     } 

或者,如果你知道有可用的活動編輯:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorSite().getActionBars().getToolBarManager(); 

或視圖內:

ToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); 

然後你會得到可能的佈局它:

mgr.getControl().layout(true); 
+0

感謝你 - 我的問題是我需要佈局主工具欄,而不是特定的編輯器工具欄。我正在使用的操作被添加到主工具欄,因爲我希望它們始終可用。 –

+0

哦,對不起,沒有辦法檢索主工具欄,除了可能是您提到的那個。 –