2014-09-22 301 views
0

在Eclipse 3和Eclipse 4,EditorSashContainer看起来是这样的,当它有一个EditorStack禁用最大化/最小化内饰空间在Eclipse RCP 4

EditorSashContainer with one EditorStack

在Eclipse 4

,它增加了额外的装饰(我已经为红色),当有多个EditorStacks,它没有在Eclipse 3做:

EditorSashContainer with multiple EditorStacks

据我所知,现在我们”在E4中,不存在Editor,EditorStackEditorSashContainer,只是Part,PartStackPartSashContainer。但有一点这个“根” PartSashContainer和“常规” PartSashContainer之间的不同,因为只有这个“根”一个有最大化/最小化按钮和多余的装饰:

PartSashContainers with and without trim

我的问题是这样的:

  • 什么是“根”和“正规军”之间的不同PartSashContainer(说不定是不是PartSashContainer?)
  • 我如何禁用此行为?

我的自定义RCP应用程序只有一个“根”PartSashContainer,这令人不安,因为这种额外修剪来来去去。我用application.css,甚至去分歧org.eclipse.e4.ui.workbench.addons.swt,但我卡住了。

+0

我不认为这是PartSashContainer,因为它只在分割编辑区域时出现。这可能是由分裂额外添加的东西。 – 2014-09-22 09:50:02

+0

这是我第一次猜测,但看着代码,我找不到嫌疑犯。 https://github.com/eclipse/eclipse.platform.ui/tree/master/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/ dndaddon – 2014-09-22 15:44:46

+1

我相信这是由MinMaxAddon添加的额外MArea,但代码非常难以阅读,甚至更难以改变。如果您安装Eclipse SDK,则可以在Eclipse中阅读Eclipse源代码。 – 2014-09-22 15:58:06

回答

0

韦尔普,它不漂亮,但我找到了一种方法。感谢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); 
     } 
    } 
} 

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