繁体   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