コンテキストメニューへのアクションの追加
Package ExplorerやOutlineビューなどのコンテキストメニュー(右クリックで表示されるポップアップメニュー)に独自のアクションを追加する方法です。これは,拡張ポイントの違いと,実装に必要なインタフェースの違いを除けば,ツールバーへのアクションの追加とほぼ同じ手順。では早速プラグイン・マニフェストから見ていく。
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="yoichiro.hello"
objectClass="org.eclipse.jdt.core.IType">
<action
id="yoichiro.hello.action"
label="Hello World"
enablesFor="1"
class="yoichiro.hello.HelloAction">
</action>
</objectContribution>
</extension>
拡張ポイントはorg.eclipse.ui.popupMenusを使用する。この拡張ポイントで提供されるアクションは,対象となるオブジェクトごとに定義することができる。つまり「オブジェクトへの貢献」って意味で,objectContribution要素を使う。その要素のobjectClass属性で,対象とするオブジェクトの型を決定する。上記で指定している「~.IType」は,Javaのクラスおよびインタフェースを表す要素(アイコン)が対象となる。
そしてアクションを定義するaction要素を記述するが,これはほとんどツールバーへのアクションの追加と同じ。ただし,toolbarPath属性はもちろん必要なく,代わりにenablesFor属性が記述されている。これは,対象のオブジェクトがいくつ選択されているときにこのアクションが有効になるかどうかを定義する属性。ここでは対象のオブジェクトが一つ選択されているときのみアクションを有効としている。
さて,class属性で指定されているアクションの実装のクラスだが,これはIObjectActionDelegateインタフェースの実装クラスである。
public class HelloAction
implements IObjectActionDelegate {
public HelloAction() {
super();
}
public void setActivePart(
IAction action, IWorkbenchPart targetPart) {}
public void run(IAction action) {}
public void selectionChanged(ISelection selection) {}
}
runメソッドにアクションの実際の処理を記述する。ここで注目なのはsetActivePartメソッド。これには,アクションが発生したパート(一般的にビュー)が渡されてくる。例えば,Package Explorer上でアクションが実行されれば,
targetPart.getTitle() → "Package Explorer"
となる。
ツールバーへのアクションの追加よりは,このコンテキストメニューへのアクションの追加の方が利用頻度は多いと思われます。objectClass属性で指定する型はビュー内の要素の型だけど,これはビューの作成の仕方がわからないとちょっとピンとこない。ビューとその中で表示する要素の自作方法を早く知りたいところだ。。。
| 固定リンク
この記事へのコメントは終了しました。
コメント