有没有办法用用户定义的窗口替换 Eclipse RCP 为 MTrimmedWindow 生成的 shell?
Eclipse 创建一个具有特定样式类型的 shell,只能在创建时提供。我想从为 MTrimmedWindow 创建的 shell 元素中删除最大化和调整大小。如果有人对上述问题有解决方案,请回复。
有没有办法用用户定义的窗口替换 Eclipse RCP 为 MTrimmedWindow 生成的 shell?
Eclipse 创建一个具有特定样式类型的 shell,只能在创建时提供。我想从为 MTrimmedWindow 创建的 shell 元素中删除最大化和调整大小。如果有人对上述问题有解决方案,请回复。
外壳的样式在创建后无法更改,外壳本身在渲染器创建后无法交换。但情况并非没有希望。
Eclipse 4 使用渲染器从应用程序模型生成 UI 元素。这些渲染器可以通过使用渲染框架进行交换,这是创建具有不同于默认样式的外壳的一种可能方式。
该解决方案将涉及为 MWindow 类型的 UIElements 编写自己的渲染器,提供 WorkbenchRendererFactory 来为 MWindows 创建新的 SWT 渲染器,并将新工厂注册到产品中。
默认值:由 WBWRenderer 创建的 Shell
WBWRenderer(工作台窗口渲染器)是 MWindow 类型的 SWT 元素的标准渲染器。
在WBWRenderer#createWidget
中,shell 是使用样式创建的SWT.SHELL_TRIM
,这是一种方便的样式SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE
:
wbwShell = new Shell(Display.getCurrent(), SWT.SHELL_TRIM | rtlStyle);
这将导致 TrimmedWindow 可以最大化和调整大小,而在创建后无法更改此行为。
新渲染器创建外壳
为了解决上述限制,您可以提供不同的渲染器,使用 WBWRenderer 作为模板。这允许您更改创建 shell 的代码,例如
wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE |
SWT.MIN | rtlStyle);
此渲染器需要由 WorkbenchRendererFactory 返回,作为用于显示 MWindows 的渲染器。此外,渲染器工厂必须作为产品属性添加到 plugin.xml 中。
这些更改将导致 TrimmedWindow 无法最大化或调整大小。
可以在此处找到如何编写和注册 WorkbenchRendererFactory 的示例。
更好的解决方案?
实际上,由于 WBWRenderer 已经使用标签来确定 MWindow 行为,因此可能有更好的方法来设置 SWT shell 的样式:shellMaximized
和shellMinimized
. 这些标签可以在应用程序模型编辑器的修剪窗口的补充选项卡中设置。
如果可以以类似的方式设置 swt 样式标签,则可以使用它们来设置 shell 样式。这将是 Eclipse 的功能请求。
现在可以使用特定的“持久状态”键标志来解决此问题,如https://bugs.eclipse.org/bugs/show_bug.cgi?id=386951中所述。比如实现一个NO_TRIM窗口,添加key/value styleOverride/8,如果你得到的数字,这里的8就是value
int val = SWT.NO_TRIM;
System.out.println(val);
除了 col.panic 的回答,如果你想要一种风格
SWT.CLOSE | SWT.TITLE
您的 styleOverride 值为 96
System.out.println(SWT.CLOSE | SWT.TITLE) = 96