Top / Eclipse / プラグイン開発のTIPS集 / ウィザードを実装する

Eclipseには便利なウィザード機能がありますが、あのウィザードも拡張ポイントで実装されています。これを試してみます。

ウィザードは、ウィザード全体を管理するIWizardインタフェースと、各ページを表すIWizardPage?インタフェースで構成されます。

wiz_arch.jpg

構造

ウィザード機能は以下のクラスで構成されています。

IWizardインタフェース
一つのウィザードに対応するインタフェースです。拡張ポイントとして定義されます。通常はデフォルト実装のクラスWizardを使用します。Wizardクラスの主なメソッドは以下の通り:
  • public void init(IWorkbench workbench, IStructuredSelection? selection)
    • ウィザードを起動したときに呼ばれる初期化メソッドです。ウィザードを起動したときに選択されているオブジェクト(アクティブなビューで選択されているオブジェクト)がselectionとしてわたってきます。
  • public void addPages();
    • ウィザードにページを追加するメソッドです。このメソッドをWizardクラスのサブクラスでOverrideします。通常、追加したいページを直接newして作成し、
      public void addPage(IWizardPage page)
      メソッドを使って追加していきます。ちなみにウィザードの各ページクラス(IWizardPage?の実装クラス)はWizardクラスのサブクラスのフィールドに保持しておくことが多いみたいです。
  • public boolean canFinish()
    • ウィザードの終了ボタンのenable/disableを制御するメソッドです。このメソッドがtrueを返すとき、ウィザードの終了ボタンが有効となります。このメソッドはページが送られたり、フォーカスが移動したときに発生する模様。Wizardクラスのデフォルトの実装は、全てのページのisPageComplete?がtrueかどうかをチェックしているみたいです。
  • public boolean performFinish()
    • 終了ボタンを押したときに呼ばれるメソッドです。各ページで入力した情報を収集して、ウィザードのビジネスメソッドを実装します。
IWizardPage?インタフェース
ウィザードの1ページとなるインタフェースです。主なメソッドは以下の通り:

書き途中!!

ウィザードで、あらかじめ選択されていた箇所を表示させたい

ウィザードクラス(WizardPage?のサブクラス)のcreateControl内で以下のメソッドを呼んで初期化します。

private void initialize() {
  // initで
  if (selection != null && selection.isEmpty() == false
      && selection instanceof IStructuredSelection) {
    IStructuredSelection ssel = (IStructuredSelection) selection;
    if (ssel.size() > 1)
      return;
    Object obj = ssel.getFirstElement();
    if (obj instanceof IResource) {
      IContainer container;
      if (obj instanceof IContainer)
        container = (IContainer) obj;
      else
        container = ((IResource) obj).getParent();
        containerText.setText(container.getFullPath().toString());
    }    ↑フォルダ名とかをあらかじめセットしたい場合。
  }
}

こうすると例えばナビゲータでプロジェクトを選択していた場合、あらかじめそのディレクトリが表示され、親切ですね。


この記事は

選択肢 投票
おもしろかった 1  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / ウィザードを実装する

現在のアクセス:8775


添付ファイル: filewiz_arch.jpg 580件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-08 (火) 19:00:45 (1228d)