在Eclipse 3和Eclipse 4中,当EditorSashContainer
有一个EditorStack
时,EditorStacks
看起来像这样:
在Eclipse 4中,当有多个
Editor
时,它会添加额外的修剪(我已经涂上了红色),这在Eclipse 3中没有做到:
我理解,既然我们已经进入E4,那么EditorStack
,EditorSashContainer
和Part
就不会出现PartStack
,PartSashContainer
和PartSashContainer
。但是这个" root"之间有一些不同之处。 PartSashContainer
和"常规" PartSashContainer
,因为只有这个" root"一个有最大化/最小化按钮和额外的修剪:
我的问题是:
PartSashContainer
(也许一个不是PartSashContainer
?)我的自定义RCP应用程序只有一个" root" application.css
,这种额外的装饰来来去去是令人不安的。我已经与org.eclipse.e4.ui.workbench.addons.swt
混淆了,甚至离开了{{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);
}
}
}
当然,现在“最小化/最大化”按钮会呈现奇怪的效果,但无论如何我都会禁用它们,所以修复那部分是你的问题; - )。