アプリケーション・ダイアログ

プラグインで標準のダイアログでは単純すぎる場合、 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 は、okButtonPressed メソッドをインプリメントしていません。「何もしない」という実装を Dialog から継承しています。これは一般的ではありません。ダイアログでは、通常、押されたダイアログ・ボタンの 1 つに応答して、何らかの処理が実行されます。

ダイアログは、必要に応じて、単純にすることも、複雑にすることもできます。ダイアログを実装する場合は、そのダイアログのコードのほとんどは、その内容領域を表す 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;
      }
      ...