429792 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

ZIGENのプラグイン開発 for Eclipse

ZIGENのプラグイン開発 for Eclipse

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2005.03.24
XML
今回は、データベース切断用Actionを実装します。

実装のポイントは、以下の3点です。

1.コンストラクタでsetEnabled(boolean)にfalseを設定する
  ※初期状態は、実行できないように制御する
  
2.DataBase要素の子をすべて削除し、Viewを再描画する
  db.removeChildAll();
  TreeViewer treeView = (TreeViewer)viewer;
  treeView.expandToLevel(db,1);
  viewer.refresh();

3.DataBase要素に対して切断状態であることを設定する
  db.setConnected(false);
  ※DataBaseクラスには、接続状態を持つプロパティを追加しています。


ポップアップメニュー上で、接続・切断のメニューを交互に有効にするには
TreeView#fillContextMenu()メソッドで行います。
実装は、以下の通りです。

zigen.plugin.db.ui.views/TreeView
  :
  private void fillContextMenu(IMenuManager manager) {
    // 選択したものによって表示するメニューを変更したい
    Object element = (Object)((StructuredSelection)viewer.getSelection()).getFirstElement();
    if(element instanceof Root){
      removeDBAction.setEnabled(false); // 削除不可能
      manager.add(registDBAction);
      manager.add(removeDBAction);
      manager.add(new Separator());
      
    }else if(element instanceof DataBase){
      removeDBAction.setEnabled(true);   // 削除可能
      manager.add(connectDBAction);     // 接続
      manager.add(closeDBAction);      // 切断
      manager.add(new Separator());
      manager.add(registDBAction);    // DB定義登録
      manager.add(editDBAction);      // DB定義編集
      manager.add(removeDBAction);    // DB定義削除
      
      // 選択したDataBase要素に応じて、接続/切断のsetEnabledを行う
      DataBase db = (DataBase)element;
      if(db.isConnected){
        connectDBAction.setEnabled(false);
        closeDBAction.setEnabled(true);
      }else{
        connectDBAction.setEnabled(true);
        closeDBAction.setEnabled(false);
      }

    }else if(element instanceof Schema){
    }else if(element instanceof Table){
    }
    // Other plug-ins can contribute there actions here
    manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
  }  
  




以下に、CloseDBActionクラスの完全なコードを記載します。

zigen.plugin.db.ui.actions/CloseDBAction
public class CloseDBAction extends Action {
  StructuredViewer viewer = null;
  
  /**
   * コンストラクタ
   * @param viewer
   */
  public CloseDBAction(StructuredViewer viewer){
    this.viewer = viewer;
    this.setText("切断(&L)");
    this.setToolTipText("切断");
    this.setEnabled(false); // 初期状態では、falseを設定
    
  }
  /**
   * Action実行時の処理
   */
  public void run() {
    Object element = (Object)((StructuredSelection)viewer.getSelection()).getFirstElement();
    if(element instanceof DataBase){
      DataBase db = (DataBase)element;
      try {
        db.removeChildAll();
        TreeViewer treeView = (TreeViewer)viewer;
        treeView.expandToLevel(db,1);
        viewer.refresh();

        
        // 切断状態とする
        db.setConnected(false);
        
      } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
        DbPlugin.getDefault().showErrorMessage(e.getMessage());
      }
    }
  }
  
  public void setEnabled(boolean b){
    super.setEnabled(b);
    if(b){
    //  this.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
    //      getImageDescriptor(ISharedImages.IMG_DELETE));
    }else{
      // 押下できない用のアイコンを設定
    //  this.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
    //      getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED));
    }
  }

}

--------------------------------------------------------------------------
ここまで作成したソースです。
Eclipseプラグイン開発のプロジェクトフォルダをZIP圧縮しています。
zigen.plugin.db.20050324.zip
-------------------------------------------------------------------------





お気に入りの記事を「いいね!」で応援しよう

Last updated  2005.03.24 20:51:07
コメント(0) | コメントを書く


PR

Calendar

Comments

名前なし@ Re:テーブルのデータをエクセル風に編集できない?(03/27) ExcelでOracle,MySQLのデータを取得/更新…
ZIGEN@ Re:いつも使ってます!!(04/14) ヘタグラマさん こんにちは^^ コメ…
ヘタグラマ@ いつも使ってます!! いつも便利に使ってます。 もう手放せな…
★みゆきち★@ 性感エステってもったいないよね ムラムラってきたら性感エステに通ってた…
ZIGEN_M@ Re[2]:4000行はないけれど、(03/13) こんにちは、ZIGENです。 そ、そうです…

Category

Freepage List

Favorite Blog

松のページブログ 松-booleanさん

Profile

ZIGEN_M

ZIGEN_M


© Rakuten Group, Inc.