プラグインで標準のダイアログでは単純すぎる場合、 Dialog クラスを使用して、独自のダイアログを構成することができます。以前に、readme ツールが、アクション・セットの「Readme ブラウザーを開く」アクションをどのように提供するか説明しました。 このアクション・セットは、ワークベンチ・ツールバーと、 「ウィンドウ」->「Readme ファイル・エディター」メニューに表示されます。
したがって、いつでも readme ツールの WindowActionDelegate でこのアクションの実装を見ることができます。
public void run(IAction action) { SectionsDialog dialog = new SectionsDialog(window.getShell(), ReadmeModelFactory.getInstance().getSections(selection)); dialog.open(); }
アクション・セットに対するウィンドウ・アクションの委譲者は、リソース・ナビゲーター・ビューの現在の選択 (.readme ファイル) を使用して、 readme ファイル内のセクションのリストを取得します。このリストとワークベンチ・ウィンドウのシェルが、SectionsDialog に渡されます。
ユーザーがこのアクションを選択すると、SectionsDialog が開きます。
SectionsDialog は、 org.eclipse.jface.dialogs パッケージ内の Dialog クラスをサブクラス化することにより、 readme ツール・プラグインに実装されています。
Dialog クラスは、ダイアログのシェル・ウィンドウを作成するための基本サポートを提供しており、共通のダイアログ・ボタンを作成し、ダイアログを起動します。サブクラスは、ダイアログ自体の内容を処理します。
SectionsDialog は、セクションのリストを表示するための SWT リストを作成します。 JFace ビューアーを使用してリストを取り込みます。 (JFace ビューアーについては「ビューアー」で説明します。) ボタン作成はスーパークラスが行うため、このダイアログでは、ダイアログ用のボタンを作成する必要がありません。
protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); List list = new List(composite, SWT.BORDER); ... ListViewer viewer = new ListViewer(list); ... return composite; }
protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(MessageUtil.getString("Readme Sections")); ... }
ダイアログは、必要に応じて、単純にすることも、複雑にすることもできます。ダイアログを実装する場合は、そのダイアログのコードのほとんどは、その内容領域を表す SWT コントロールの作成と、ダイアログが表示されている間に必要なイベントの処理に関連しています。ユーザーがボタンを押すと、ダイアログを構成している各種コントロール (またはビューアー) の状態を照会して、ダイアログは、何をすべきかを決定します。
ダイアログのある情報を、通常のダイアログを起動するよりも「軽量な」方法で表示したい場合があります。例えば、ダイアログが、ユーザーの作業からフォーカスを移すことなく、簡単に消すことができる一時情報を提供することを目的としている場合があります。このような場合、 PopupDialog クラスを使用してダイアログを実装できます。 PopupDialog の外観は、通常の Dialog といくつかの点で異なります。下部のボタンや標準のウィンドウ・タイトル・バーがなく、境界、余白、およびフォントがより小さくコンパクトになっています。
PopupDialog は通常のダイアログとかなり異なって見えますが、ダイアログのコンテンツを定義する、ご使用のプラグインのサブクラス内のコードはほとんど同じです。 createDialogArea メソッドを実装して、ダイアログの SWT コントロールを作成します。アプリケーション・コードの主な違いは、ダイアログを作成するコンストラクターは、通常の Dialog クラスよりも多くのパラメーターを持っているということです。例えば、SectionsDialog は、単純にダイアログのスーパークラスを変更して、コンストラクターのダイアログを構成することにより、PopupDialog に変換できます。
public class SectionsDialog extends PopupDialog { protected IAdaptable input; /** * Creates a new SectionsDialog. */ public SectionsDialog(Shell parentShell, IAdaptable input) { super(parentShell, SWT.DEFAULT, false, // do not take focus when opened false, // do not persist the bounds false, // do not show a resize menu false, // do not show a menu item for persisting bounds null, // no title null); // no info text this.input = input; } ...