Eclipse插件/产品 - 强制顶级酷吧布局?

时间:2014-01-23 18:47:56

标签: eclipse-plugin eclipse-rcp

我在插件中定义了Eclipse产品 - 它没有定义自己的Application类(即没有自定义的IApplication实现)。我在plugin.xml中定义的主工具栏中使用了一些动态下拉项。我正在使用Eclipse 4.3(Kepler)平台构建产品。

在运行时,我希望工具栏项显示当前选择了哪些下拉项。对于通用项目,我使用图标,但对于非通用项目,我想显示一些标识文本。识别文本的长度并不总是相同。

我正在使用IElementUpdater来更新下拉项以及工具栏项。一切正常,但酷吧/工具栏/剪裁栏不重新布局。如果新文本比它正在替换的文本长,或者如果我从图标切换到文本,反之亦然,则工具栏显示为空 - 甚至没有显示下拉箭头。我的测试团队报告下拉工具项目“消失”,这是对体验的一个非常好的描述。

有没有办法强制主工具栏/ coolbar / trimbar复杂重新布局?

我做了一些研究,似乎我可以通过定义自己的IApplication实现并使用ActionBarAdvisor子类捕获Coolbar / Toolbar管理器以便以后调用layout()来实现这一点。这是一个非常重要的解决方案 - 还有其他吗?

1 个答案:

答案 0 :(得分: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);