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

Gou*_*sad 7 eclipse-plugin eclipse-rcp e4

有没有办法用一个用户定义的窗口替换由Eclipse RCP为MTrimmedWindow生成的shell?

Eclipse创建一个具有特定样式类型的shell,只能在创建时提供.我想从为MTrimmedWindow创建的shell元素中删除最大化并调整大小.如果有人对上述问题有解决方案,请回复.

Mod*_*ens 6

创建后无法更改shell的样式,并且在渲染器创建shell后,无法更换shell本身.但情况并非毫无希望.

Eclipse 4使用渲染器从应用程序模型生成UI元素.可以使用Rendering Framework交换这些渲染器,这是创建一个样式与默认样式不同的shell的一种可能方法.

该解决方案将涉及为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);
Run Code Online (Sandbox Code Playgroud)

这将导致TrimmedWindow可以最大化和调整大小,而无法在创建后更改此行为.

新渲染器创建Shell

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

wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE |
                         SWT.MIN | rtlStyle);
Run Code Online (Sandbox Code Playgroud)

此渲染器需要由WorkbenchRendererFactory返回,作为用于显示MWindows的渲染器.此外,必须将渲染器工厂添加为plugin.xml中的产品属性.

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

可在此处找到有关如何编写和注册WorkbenchRendererFactory的示例.

更好的解决方案?

实际上,由于WBWRenderer已经使用标签来确定MWindow行为,因此可以有更好的方式来设置SWT shell的样式:shellMaximizedshellMinimized.可以在应用程序模型编辑器中修剪窗口的补充选项卡中设置这些标记.

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