Top / Eclipse / プラグイン開発のTIPS集 / RCPで終了するときに、終了してよいかをたずねるようにする

WorkbenchWindowAdvisor?のサブクラスでpreWindowShellClose?を以下のようにOverrideする。

public boolean preWindowShellClose() {
  // 複数上がってる場合はダイアログ出さないで閉じちゃう。
  if (getWorkbench().getWorkbenchWindowCount() > 1) {
      return true;
  }
  // the user has asked to close the last window, while will cause the
  // workbench to close in due course - prompt the user for confirmation
  IPreferenceStore store = ApplicationsPlugin.getDefault()
          .getPreferenceStore();
  // この設定値("EXIT_PROMPT_ON_CLOSE_LAST_WINDOW")をみて、ダイアログを出すかを決定する。
  boolean promptOnExit = store
          .getBoolean("EXIT_PROMPT_ON_CLOSE_LAST_WINDOW");
 
  // storeの設定がtrueだったら
  if (promptOnExit) {
      String message;
      String productName = null;
      IProduct product = Platform.getProduct();
      if (product != null) {
          productName = product.getName();
      }
      if (productName == null) {
          message = "Exit application?";
      } else {
          message = NLS.bind("Exit {0}?", productName);
      }
      MessageDialogWithToggle dlg = MessageDialogWithToggle
              .openOkCancelConfirm(getWindowConfigurer().getWindow()
                      .getShell(), "終了の確認", message, "常にプロンプトなしで終了",
                      false, null, null);

      if (dlg.getReturnCode() != IDialogConstants.OK_ID) {
          return false;
      }
      if (dlg.getToggleState()) {
          // チェックボックスを付けた(はずした?)とき、falseで保存する。
          store.setValue("EXIT_PROMPT_ON_CLOSE_LAST_WINDOW", false);
          ApplicationsPlugin.getDefault().savePluginPreferences();
      }
  }
  return true;
}

上で、チェックボックスなしのダイアログを使う

上のやり方は、Eclipse3.1のIDEをパクリました。「常にプロンプトなしで終了」チェックボックスを出さないダイアログは以下でよいと思います。

return MessageDialog.openConfirm(getWindowConfigurer().getWindow()
 .getShell(), "終了の確認", message);

ちなみに、http://www.eclipsecon.org/2005/tutorials.php によるとRCPのStartupからShutdownまでに呼ばれるメソッド*1は以下のようになっています。

pic.png

この記事は

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

Top / Eclipse / プラグイン開発のTIPS集 / RCPで終了するときに、終了してよいかをたずねるようにする

現在のアクセス:6417


*1 フックできるメソッドとでも言う?

添付ファイル: filepic.png 501件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-07-12 (木) 12:14:56 (2622d)