Top / Eclipse / プラグイン開発のTIPS集 / GooglePlugin / ドラッグアンドドロップを実装する

ツールバーにいろいろな機能を実装 まででちょっといい感じになってきました。次はドラッグアンドドロップを実装します。まずは

  • ドラッグしてデスクトップにショートカットを作成する

を実装したいと思います。つまりドラッグの始点側の実装です。 JFaceのビューワにはすでにドラッグ機能を実装するための便利なメソッドが用意されています。 それが

int dragOption = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] transfers = new Transfer[] { TextTransfer.getInstance(),
         FileTransfer.getInstance() };
viewer.addDragSupport(dragOption, transfers, new DragSourceAdapterImpl(viewer));

です。この記述をすることで、

  • このviewerはドラッグのcopyとMoveが対応
  • TransferはTextTransfer?FileTransfer?
  • ドラッグしたときの処理*1DragSourceAdapterImpl?(extends DragSourceAdapter?)に記述してある

という意味になります。さてあとはDragSourceAdapterImpl?の記述となりますが、以下のようにしました。

private class DragSourceAdapterImpl extends DragSourceAdapter {
  private StructuredViewer viewer;

  public DragSourceAdapterImpl(StructuredViewer viewer) {
    this.viewer = viewer;
  }
  
  /**
  * ドラッグしたデータからeventに値をセットするためのメソッド
  * Method declared on DragSourceListener
  */
  public void dragSetData(DragSourceEvent event) {
    logger.debug("dragSetData(DragSourceEvent) - start");

    // viewerからResultElementを取り出す。
    IStructuredSelection selection = (IStructuredSelection) viewer
        .getSelection();
    Object obj = ((IStructuredSelection) selection).getFirstElement();
    ResultElement element = (ResultElement) obj;

    // 自分でイベントを作っていく感じ?
    if (FileTransfer.getInstance().isSupportedType(event.dataType)) {
      logger.debug("FileTransfer event.dataType");
      // FileTransferだったら、ファイルクラスを作成して
      // ファイルのパスの配列をeventにセットする。
      // (こうすれば、eventで指定された場所のファイルがドロップした箇所に移動される)
      try {
        File resultFile = createFileFromResultElement(element);
        event.data = new String[] { resultFile.getAbsolutePath() };
      } catch (IOException e) {
        logger.error(e);
        GooglePlugin.log(e);
      }
      // これでこのファイルがコピーされる。
    } else if (TextTransfer.getInstance().isSupportedType(
        event.dataType)) {
      // TextTransferだったら、検索結果のサイトのタイトルをeventにセット
      logger.debug("TextTransfer event.dataType");
      event.data = element.getTitle();
    } else if (PluginTransfer.getInstance().isSupportedType(
        event.dataType)) {
      logger.debug("PluginTransfer event.dataType");
    }
    logger.debug(event);
    logger.debug("dragSetData(DragSourceEvent) - end");
  }
}

他にも整理をしましたが、追加の前と後ではこれくらいの違いがあります。

リンク

ドラッグアンドドロップに関してはhttp://cutie.dip.jp/pc/java/swt/20.phpを非常に参考にさせていただきました。

次はいよいよ公開に向けてやっていきます。まずはFeatureを作成していきます。


この記事は

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

Top / Eclipse / プラグイン開発のTIPS集 / GooglePlugin / ドラッグアンドドロップを実装する

現在のアクセス:11798


*1 持ち上げた瞬間、落とした瞬間など

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