【问题标题】:Eclipse plug-in/product - force top-level coolbar layout?Eclipse 插件/产品——强制顶级coolbar 布局?
【发布时间】:2014-01-24 15:43:22
【问题描述】:

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

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

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

有什么方法可以强制主工具栏/coolbar/trimbar 复合体重新布局?

我已经进行了一些研究,看来我可以通过定义自己的 IApplication 实现并使用 ActionBarAdvisor 子类捕获 Coolbar/Toolbar 管理器以供以后调用 layout() 来做到这一点。这是一个相当重量级的解决方案 - 还有其他解决方案吗?

【问题讨论】:

    标签: eclipse-plugin eclipse-rcp


    【解决方案1】:

    您始终可以从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);
    

    【讨论】:

    • 谢谢你 - 我的问题是我需要布局主工具栏,而不是特定的编辑器工具栏。我正在使用的操作已添加到主工具栏中,因为我希望它们始终可用。
    • 哦,对不起,没有办法检索主工具栏,除了,可能是你提到的那个。
    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多