ツールバーにいろいろな機能を実装 まででちょっといい感じになってきました。次はドラッグアンドドロップを実装します。まずは
を実装したいと思います。つまりドラッグの始点側の実装です。 JFaceのビューワにはすでにドラッグ機能を実装するための便利なメソッドが用意されています。 それが int dragOption = DND.DROP_COPY | DND.DROP_MOVE; Transfer[] transfers = new Transfer[] { TextTransfer.getInstance(), FileTransfer.getInstance() }; viewer.addDragSupport(dragOption, transfers, new DragSourceAdapterImpl(viewer)); です。この記述をすることで、
という意味になります。さてあとは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を作成していきます。 この記事は 現在のアクセス:11936 |