簡體   English   中英

在Eclipse E4中設置固定的零件尺寸

[英]Set fixed part size in Eclipse E4

我有一個要在e4中構建的應用程序,但無法將幾個零件固定為固定大小。 我有一個PartSashContainer其中包含兩個Parts和另一個PartSashContainer 我最初在containerData參數中設置了大小,但是這些值是相對的,仍然允許重新調整零件的大小。 我要確保這些零件的高度固定,並且無法調整大小。 有一個簡單的方法嗎?

來自Application.e4xmi的列表視圖

Eclipse bug 361731是對此功能的請求。 目前尚未實施。

可能可以使用自定義渲染器,但這是一項艱巨的工作。

我不確定在Neon之前是否可以使用此功能,但是Eclipse Neon允許您將“ NoMove”作為標簽添加到要鎖定且不調整大小的Part Sash Container框格Part Sash Container中。


我有一個非常相似的任務,幾次偶然發現了您的問題。 我需要按照帶有固定大小的應用程序標頭和固定大小的頁腳的企業設計來實現RCP應用程序。 我沒有找到完美的方法,但是有關自定義渲染器Vogella教程給了我一些提示。 我仍然必須重復一些代碼,但找不到聰明的方法。

我的要求:

  • 應用程序標頭位於頂部,高度固定,標頭上方沒有控件
  • 應用程序標題位於頂部,具有固定大小,標題上方沒有控件
  • 底部的應用頁腳,同樣具有固定高度

所以我所做的是:

  • 刪除第一部分上方呈現的所有內容(主菜單,工具欄...)
  • 用1個零件(頁眉),2個所需控件(內容),3個最后零件(頁腳)創建零件窗框容器
  • 在此部件框格容器中執行以下操作:
    1. 在“標簽”中添加“ fx_fixedLayout”(因為我不想調整“腰帶”的大小)
    2. 將“ CUSTOM_RENDERER_UI = my.renderer.MainSashRenderer”添加到“持久狀態”
  • 創建“ org.eclipse.e4.ui.workbench.renderers.swt.SashLayout”的副本,並將其命名為“ my.renderer.MainSashLayout”。 更改方法“ tileSubNodes”,並為第一個和最后一個孩子設置固定高度。
  • 擴展類“ SashRenderer”,並將其命名為“ MainSashRenderer”
  • 創建一個擴展到“ WorkbenchRendererFactory”的新“ MainWorkbenchRendererFactory”,以鈎住新的渲染器。此類僅將“ MainSashRenderer”附加到具有特定ID的“ MPartSashContainer”對象(因為我希望所有其他Sash都保持不變)。

public class MainWorkbenchRendererFactory extends WorkbenchRendererFactory {

    private final static String MAIN_SASH_ID = "myapp.partsashcontainer.main";

    @Override
    public AbstractPartRenderer getRenderer(MUIElement uiElement, Object parent) {
        if (uiElement instanceof MPartSashContainer
        && MAIN_SASH_ID.equalsIgnoreCase(((MPartSashContainer)uiElement).getElementId())) {
            MainSashRenderer renderer = new MainSashRenderer();
            super.initRenderer(renderer);
            return renderer;
        }
        return super.getRenderer(uiElement, parent);
    }
}

在“ MainSashRenderer”類中,將引用從“ SashLayout”更改為“ MainSashLayout”。

在“ MainSashLayout”類中,方法tileSubNodes:

    // subsctract size for header and footer:
    availableSpace -= (this.footerHeightPx + this.headerHeightPx);

    // Subtract off the room for the sashes
    availableSpace -= ((childCount - 1) * sashWidth);

    if (availableSpace < 0)
    availableSpace = 0;

    for (MUIElement subNode : visibleChildren) {

    if (childNum == 0) {
        newSize = this.headerHeightPx;
    } else if (childNum == visibleChildren.size()-1) {
        newSize = this.footerHeightPx;
    } else {
        // Calc the new size as a %'age of the total
        double ratio = getWeight(subNode) / totalWeight;
        newSize = (int) ((availableSpace * ratio) + 0.5);
    }
...

窗口大小不同的結果(頁眉和頁腳保持像素高度): 窗口大小不同的屏幕截圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM