// 下階層用テンプレート
#topicpath
----
つぎは [[「検索ロジックをビューに実装」>Eclipse/プラグイン開発のTIPS集/GooglePlugin/実際の検索ロジックをビューに実装]] で実装したビューのメソッドを呼び出すポップアップメニューをJavaエディタに実装します。

エディタのポップアップにプラグインする方法などは[[メニューバーとか、ポップアップとかのまとめ>Eclipse/プラグイン開発のTIPS集/メニューバーとか、ポップアップとかのまとめ]]


***plugin.xml [#w13e0f16]
 <extension point="org.eclipse.ui.popupMenus">
   <viewerContribution
     targetID="#CompilationUnitEditorContext"
     id="nu.mine.kino.plugin.google.ui.contributions.CompilationUnitEditorContext">
   <action
       label="Googleで検索"
       icon="icons/icon.gif"
       class="nu.mine.kino.plugin.google.ui.popup.actions.CompilationUnitEditorContextAction"
       menubarPath="additions"
       id="nu.mine.kino.plugin.google.ui.popup.actions.CompilationUnitEditorContextAction">
     <selection
        class="org.eclipse.jface.text.ITextSelection">
     </selection>
   </action>
   </viewerContribution>
 </extension>

これでJavaエディタのポップアップメニューに「Googleで検索」というメニューが表示されます。

***スクリーンショット [#x2bc6c02]
#ref(menu.png)


***ソースコード [#ce995de6]
ソースコードは以下のようになりました。
 package nu.mine.kino.plugin.google.ui.popup.actions;
 
 import nu.mine.kino.plugin.google.ui.views.GoogleResultView;
 
 import org.apache.log4j.Logger;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IEditorActionDelegate;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.texteditor.AbstractTextEditor;
 
 /**
  * @author Masatomi KINO
  * @version $Revision$
  */
 public class CompilationUnitEditorContextAction implements
     IEditorActionDelegate {
   private static final Logger logger = Logger
       .getLogger(CompilationUnitEditorContextAction.class);
 
   private ISelection selection;
 
   private IEditorPart editorPart;
 
   public void setActiveEditor(IAction action, IEditorPart targetEditor) {
     this.editorPart = targetEditor;
   }
 
   public void selectionChanged(IAction action, ISelection selection) {
     this.selection = selection;
   }
 
   public void run(IAction action) {
     logger.debug("run(IAction) - start");
 
     AbstractTextEditor editor = (AbstractTextEditor) editorPart;
 
     final ITextSelection textSelection = (ITextSelection) selection;
     logger.debug("選択されている文字列は" + textSelection.getText());
 
     IWorkbenchPage workbenchPage = editor.getSite().getPage();
 
     try {
       logger.debug("Viewを取得します");
       final GoogleResultView view = (GoogleResultView) workbenchPage
           .showView("nu.mine.kino.plugin.google.ui.views.GoogleResultView");
       logger.debug("Viewを取得しました");
       logger.debug(view);
       view.search(textSelection.getText());
     } catch (PartInitException e) {
       logger.error(e);
     }
 
     logger.debug("run(IAction) - end");
   }
 
 }

これでJavaエディタのポップアップメニューから「Googleで検索」を選択すると[[IEditorActionDelegate:http://www.docjar.com/docs/api/org/eclipse/ui/IEditorActionDelegate.html]]#run が実行されてビューに検索結果が表示されます。

#ref(result.png)


まだ[[TableViewer:http://www.docjar.com/docs/api/org/eclipse/jface/viewers/TableViewer.html]]に[[LabelProvider:http://www.docjar.com/docs/api/org/eclipse/jface/viewers/LabelProvider.html]]を設定していないため、結果表示も検索結果オブジェクト(nu.mine.kino.googleapis.ResultElement)のtoString()がそのまま表示されてしまいます。

次はこの[[LabelProviderを設定して、TableViewに情報を表示>Eclipse/プラグイン開発のTIPS集/GooglePlugin/LabelProviderで表示を制御する]]できるようにします。




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

#comment
#topicpath


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

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