拡張ポイントの追加〜ポップアップメニュー〜

拡張ポイントの設定

これから、ポップアップメニューを拡張してエディタ上の単語を右クリックで調べられるようにしてみましょう。今回はJavaエディタにポップアップメニューを追加してみましょう。

マニフェスト・エディタでの拡張ポイント設定は前回行ったので、今回はXMLファイルを直接編集して拡張ポイントを設定していきましょう。
以下のように追加します。

plugin.xml

<plugin>
   <extension
         point="org.eclipse.ui.views">
      <category
            id="dictionary.category"
            name="辞書プラグイン"/>
      <view
            category="dictionary.category"
            class="dictionary.DicView"
            icon="icons/dic.gif"
            id="dictionary.view"
            name="英和和英国語辞書"/>
   </extension>
   <extension
   	    point = "org.eclipse.ui.popupMenus"> //拡張ポイント(ポップアップメニュー)
      <viewerContribution
   	    id="dictionary.popupMenu"
   	    targetID="#CompilationUnitEditorContext"> //ポップアップを追加する場所をJavaエディタに設定
      <action
   	    class="dictionary.PopUpMenu" //ポップアップのアクションの実装クラス
   	    id="dictionary.lookUpAction"
   	    label="look up" //ポップアップに出す項目名
   	    menubarPath="additions"/> //ポップアップの項目の場所(そのまま追加)
      </viewerContribution>
   </extension>	  		

</plugin>

上のようにすると、ポップアップメニューを拡張ポイントに設定できます。
前回と同じようにマニフェスト・エディタでも設定可能です。

以下のようにマニフェスト・エディタにXMLで追加した内容が反映されているはずです。

dictionaryパッケージにポップアップメニューの実装クラスを作成しておきましょう。今回は、PopUpMenu.javaとなっています。

雛形は以下のようになります。

PopUpMenu.java

package dictionary;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;

public class PopUpMenu implements IEditorActionDelegate{

	public void setActiveEditor(IAction action, IEditorPart targetEditor) {
		// TODO Auto-generated method stub
		
	}

	public void run(IAction action) {
		// TODO Auto-generated method stub
		
	}

	public void selectionChanged(IAction action, ISelection selection) {
		// TODO Auto-generated method stub
		
	}
	
}

IEditorActionDelegateクラスをインプリメントして、エディタのアクションを実装していくことになります。

まず、このPopUpMenuクラスから、DicViewクラスの検索用メソッドを呼ぶことになるので、そのメソッドを追加します。

DicView.java

public class DicView extends ViewPart {
    ・
    ・
	public void popUpTranslate(String word){
		search.add(word);
		browser.setText(dictionary.getHtml(word));
	}
    ・
    ・
}

これを使って、ポップアップメニューを実装していきます。

PopUpMenu.java

package dictionary;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.ITextEditor;

public class PopUpMenu implements IEditorActionDelegate{
	private IEditorPart editor;
	private static DicView dic;
	
	public static void setInstance(DicView view){
		dic = view;
	}
	
	public void setActiveEditor(IAction action, IEditorPart targetEditor) {
		this.editor = targetEditor;
	}

	public void run(IAction action) {
		if (editor instanceof ITextEditor) {
			TextSelection selectedText = (TextSelection) editor.getEditorSite()
					.getSelectionProvider().getSelection();
			String selected = selectedText.getText(); //エディタで選択されている単語を取得
			dic.popUpTranslate(selected); //DicViewのメソッドに送る
		}
	}

	public void selectionChanged(IAction action, ISelection selection) {
	}
}

上のように実装して、ポップアップメニューを実装しますが、そのまま上のプログラムを書くと赤字の部分がインポートできません。初期のままのPlug-in Dependenciesには赤字のプラグインが含まれていませんのでそれを加えなくてはいけません。

マニフェスト・エディタの[Dependencise]タブを選択し、[Add...]をクリックします。

そして、上のように、org.eclipse.ui.workbench.texteditor, org.eclipse.jface.textを追加します。
すると、上のPopUpMenu.javaの実装がうまくいくはずです。

次に、PopUpMenu.javaで、DicViewインスタンスを使うためそれを渡す動作DicViewコンストラクタに追加します。

DicView.java

public class DicView extends ViewPart {
    ・
    ・
	public DicView() {
		dictionary = new EnglishDic();
		PopUpMenu.setInstance(this);
	}
    ・
    ・
}

これで、ポップアップメニューの実装は終わりです。実際に実行してみましょう。

上のように単語を選択して右クリックして、[look up]という項目を選択すると実際に辞書を使えることが確認できます。

<前へ