2014-09-22 60 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); 
     } 
    } 
} 

當然,現在的「最小化/最大化」按鈕將呈現奇怪,但我無論如何禁用它們,所以固定的部分是你的問題;-)。