在Eclipse RCP 4中禁用最大化/最小化修剪空间

时间:2014-09-22 09:36:36

标签: eclipse eclipse-rcp eclipse-plugin e4

在Eclipse 3和Eclipse 4中,当EditorSashContainer有一个EditorStack时,EditorStacks看起来像这样:

EditorSashContainer with one EditorStack

在Eclipse 4中,当有多个Editor时,它会添加额外的修剪(我已经涂上了红色),这在Eclipse 3中没有做到:

EditorSashContainer with multiple EditorStacks

我理解,既然我们已经进入E4,那么EditorStackEditorSashContainerPart就不会出现PartStackPartSashContainerPartSashContainer。但是这个" root"之间有一些不同之处。 PartSashContainer和"常规" PartSashContainer,因为只有这个" root"一个有最大化/最小化按钮和额外的修剪:

PartSashContainers with and without trim

我的问题是:

  • " Root"之间有什么不同?和"常规" PartSashContainer(也许一个不是PartSashContainer?)
  • 如何禁用此行为?

我的自定义RCP应用程序只有一个" root" application.css,这种额外的装饰来来去去是令人不安的。我已经与org.eclipse.e4.ui.workbench.addons.swt混淆了,甚至离开了{{1}},但我被卡住了。

1 个答案:

答案 0 :(得分:1)

Welp,它不漂亮,但我找到了办法。感谢greg-449提供关键的MArea提示。

您可以通过在产品扩展程序中添加这样的代码段来设置rendererFactoryUri

<property
    name="rendererFactoryUri"
    value="bundleclass://com.myplugin/package.to.MyWorkbenchRendererFactory">
</property>

如果您未设置它,Eclipse将使用this by default.

如果您将MArea的渲染器设置为常规MPartSashContainer的渲染器,它就可以正常工作。

这是我的代码:

import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.advanced.MArea;
import org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer;
import org.eclipse.e4.ui.workbench.renderers.swt.WorkbenchRendererFactory;

public class MyWorkbenchRendererFactory extends WorkbenchRendererFactory {
    private SashRenderer areaRenderer;

    @Override
    public AbstractPartRenderer getRenderer(MUIElement uiElement, Object parent) {
        if (uiElement instanceof MArea) {
            if (areaRenderer == null) {
                areaRenderer = new SashRenderer();
                initRenderer(areaRenderer);
            }
            return areaRenderer;
        } else {
            return super.getRenderer(uiElement, parent);
        }
    }
}

当然,现在“最小化/最大化”按钮会呈现奇怪的效果,但无论如何我都会禁用它们,所以修复那部分是你的问题; - )。

相关问题