我在插件中定义了Eclipse产品 - 它没有定义自己的Application类(即没有自定义的IApplication实现)。我在plugin.xml中定义的主工具栏中使用了一些动态下拉项。我正在使用Eclipse 4.3(Kepler)平台构建产品。
在运行时,我希望工具栏项显示当前选择了哪些下拉项。对于通用项目,我使用图标,但对于非通用项目,我想显示一些标识文本。识别文本的长度并不总是相同。
我正在使用IElementUpdater来更新下拉项以及工具栏项。一切正常,但酷吧/工具栏/剪裁栏不重新布局。如果新文本比它正在替换的文本长,或者如果我从图标切换到文本,反之亦然,则工具栏显示为空 - 甚至没有显示下拉箭头。我的测试团队报告下拉工具项目“消失”,这是对体验的一个非常好的描述。
有没有办法强制主工具栏/ coolbar / trimbar复杂重新布局?
我做了一些研究,似乎我可以通过定义自己的IApplication实现并使用ActionBarAdvisor子类捕获Coolbar / Toolbar管理器以便以后调用layout()来实现这一点。这是一个非常重要的解决方案 - 还有其他吗?
答案 0 :(得分:2)
您始终可以从PartSite
检索工具栏管理器。还有子类EditorSite
和ViewSite
:
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);