外壳的样式在创建后无法更改,外壳本身在渲染器创建后也无法更改。但情况并非毫无希望。
Eclipse 4 使用渲染器从应用程序模型生成 UI 元素。这些渲染器can可以通过使用渲染框架进行交换,这是创建与默认样式不同的 shell 的一种可能方法。
该解决方案涉及为 MWindow 类型的 UIElements 编写自己的渲染器,提供 WorkbenchRendererFactory 来为 MWindows 创建新的 SWT 渲染器,以及向产品注册新工厂。
默认值:由 WBWRenderer 创建外壳
WBWRenderer(工作台窗口渲染器)是 MWindow 类型的 SWT 元素的标准渲染器。
In WBWRenderer#createWidget
,外壳是用样式创建的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 的示例here http://www.vogella.com/articles/Eclipse4Renderer/article.html#renderer_own.
更好的解决方案?
实际上,可能有更好的方法来设置 SWT shell 的样式,因为 WBWRenderer 已经使用标签来确定 MWindow 行为:shellMaximized
and shellMinimized
。这些标签可以在应用程序模型编辑器中修剪窗口的补充选项卡中设置。
如果可以以类似的方式设置 swt 样式标签,则它们可以用于设置 shell 样式。这将是对 Eclipse 的功能请求。