// 下階層用テンプレート
#topicpath
----

[[ツールバーにいろいろな機能を実装>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
-ドラッグしたときの処理((持ち上げた瞬間、落とした瞬間など))はDragSourceAdapterImpl(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://www.masatom.in/cgi-bin/viewvc.cgi/nu.mine.kino.plugin.google.ui/source/nu/mine/kino/plugin/google/ui/views/GoogleResultView.java.diff?r1=1.5&r2=1.6&root=cvs]]の違いがあります。

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


次はいよいよ公開に向けてやっていきます。まずは[[Featureを作成>Eclipse/プラグイン開発のTIPS集/GooglePlugin/Featureを作成してUpdateSiteを作成する]]していきます。

----
この記事は
#vote(おもしろかった[1],そうでもない[1])
#vote(おもしろかった[2],そうでもない[1])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS