MTrimmedWindow 用に Eclipse RCP によって生成されたシェルをユーザー定義のウィンドウに置き換える方法はありますか?
Eclipse は、特定のスタイル タイプを持つシェルを作成します。これは、作成中にのみ提供できます。MTrimmedWindow 用に作成されたシェル要素から最大化とサイズ変更を削除したいと考えています。上記の問題を解決できる方がいらっしゃいましたら、ご返信ください。
MTrimmedWindow 用に Eclipse RCP によって生成されたシェルをユーザー定義のウィンドウに置き換える方法はありますか?
Eclipse は、特定のスタイル タイプを持つシェルを作成します。これは、作成中にのみ提供できます。MTrimmedWindow 用に作成されたシェル要素から最大化とサイズ変更を削除したいと考えています。上記の問題を解決できる方がいらっしゃいましたら、ご返信ください。
作成後にシェルのスタイルを変更することはできず、レンダラーによって作成された後にシェル自体を交換することはできません。しかし、状況は絶望的ではありません。
Eclipse 4 はレンダラーを使用して、アプリケーション モデルから UI 要素を生成します。これらのレンダラーは、レンダリング フレームワークを使用して交換できます。これは、既定とは異なるスタイルのシェルを作成する 1 つの方法です。
ソリューションには、MWindow 型の UIElements 用の独自のレンダラーを作成し、WorkbenchRendererFactory を提供して MWindows 用の新しい SWT レンダラーを作成し、新しいファクトリを製品に登録する必要があります。
デフォルト: WBWRenderer によるシェル作成
WBWRenderer (ワークベンチ ウィンドウ レンダラー) は、MWindow 型の SWT 要素の標準レンダラーです。
では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 をテンプレートとして使用して別のレンダラーを提供できます。これにより、シェル作成のコードを変更できます。
wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE |
SWT.MIN | rtlStyle);
このレンダラーは、MWindows を表示するために使用されるレンダラーとして WorkbenchRendererFactory によって返される必要があります。さらに、レンダラー ファクトリを製品プロパティとして plugin.xml に追加する必要があります。
これらの変更により、最大化またはサイズ変更できない TrimmedWindow が発生します。
WorkbenchRendererFactory を記述して登録する方法の例は、ここにあります。
より良い解決策はありますか?
実際、WBWRenderer はすでにタグを使用して MWindow の動作を決定しているため、SWT シェルのスタイルを設定するためのより良い方法がある可能性がありshellMaximized
ますshellMinimized
。これらのタグは、アプリケーション モデル エディターのトリミングされたウィンドウの補助タブで設定できます。
swt スタイルのタグを同様の方法で設定できれば、それらを使用してシェル スタイルを設定できます。これは、Eclipse の機能要求になります。
これは、 https://bugs.eclipse.org/bugs/show_bug.cgi?id=386951に記載されているように、特定の「永続状態」キー フラグで解決できるようになりました。たとえば、NO_TRIM ウィンドウを実現するには、キー/値の styleOverride/8 を追加します。
int val = SWT.NO_TRIM;
System.out.println(val);