Eclipse plugin 如何创建我自己的shell来替换e4 RCP中在MTrimmedWindow中创建的shell?

Eclipse plugin 如何创建我自己的shell来替换e4 RCP中在MTrimmedWindow中创建的shell?,eclipse-plugin,eclipse-rcp,e4,Eclipse Plugin,Eclipse Rcp,E4,有没有办法将EclipseRCP为MTrimmedWindow生成的shell替换为用户定义的窗口 Eclipse创建具有特定样式类型的shell,该样式类型只能在创建时提供。我想从为MTrimmedWindow创建的shell元素中删除maximize和resize。如果有人对上述问题有解决办法,请回复 外壳的样式在创建后不能更改,并且外壳本身在渲染器创建后不能交换。但情况并非没有希望 Eclipse4使用渲染器从应用程序模型生成UI元素。这些渲染器可以使用渲染框架进行交换,这是创建具有不同于

有没有办法将EclipseRCP为MTrimmedWindow生成的shell替换为用户定义的窗口


Eclipse创建具有特定样式类型的shell,该样式类型只能在创建时提供。我想从为MTrimmedWindow创建的shell元素中删除maximize和resize。如果有人对上述问题有解决办法,请回复

外壳的样式在创建后不能更改,并且外壳本身在渲染器创建后不能交换。但情况并非没有希望

Eclipse4使用渲染器从应用程序模型生成UI元素。这些渲染器可以使用渲染框架进行交换,这是创建具有不同于默认样式的shell的一种可能方法

解决方案包括为MWindow类型的UIElements编写自己的渲染器,提供WorkbenchRenderFactory为MWindows创建新的SWT渲染器,并向产品注册新工厂

默认值:WBWRenderer创建Shell

WBWRenderer(工作台窗口渲染器)是MWindow类型SWT元素的标准渲染器

wbwrender#createWidget
中,使用样式
SWT.shell_TRIM
创建shell,这是
SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE

wbwShell = new Shell(Display.getCurrent(), SWT.SHELL_TRIM | rtlStyle);
这将导致TrimmedWindow可以最大化和调整大小,而不可能在创建后更改此行为

通过新渲染器创建Shell

要绕过上述限制,可以使用WBWRenderer作为模板提供不同的渲染器。这允许您更改shell创建的代码,例如

wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE |
                         SWT.MIN | rtlStyle);
此渲染器需要由WorkbenchRenderFactory返回,作为用于显示MWindows的渲染器。此外,必须将渲染器工厂作为产品属性添加到plugin.xml中

这些更改将导致TrimmedWindow无法最大化或调整大小

可以找到如何写入和注册WorkbenchRenderFactory的示例

更好的解决方案?

实际上,可能有一种更好的方式来设计SWT shell的样式,因为WBWRenderer已经使用标记来确定MWindow行为:
shellMaximized
shellMinimized
。可以在应用程序模型编辑器中修剪窗口的“补充”选项卡中设置这些标记


如果可以以类似的方式设置swt样式标记,则可以使用它们来设置shell样式。这将是Eclipse的一个功能请求。

这现在可以通过一个特定的“持久化状态”键标志来解决,如中所述。例如,要实现无修剪窗口,请添加键/值styleOverride/8,其中,如果您获得

    int val = SWT.NO_TRIM;
    System.out.println(val);

除了恐慌上校的回答,如果你想要一种

SWT.CLOSE | SWT.TITLE
您的styleOverride值将是96

System.out.println(SWT.CLOSE | SWT.TITLE) = 96

非常感谢。我们将尝试上述解决方案。在eclipse论坛的一篇帖子中,我还建议使用标记选项。再次非常感谢。@GouthamPrasad我刚刚发现了一个关于Eclipse4中应用程序窗口样式特性的错误报告