Eclipse実践プラグイン開発 5

  "separator"のプロパティ設定

  "separator"のプロパティ設定

"サンプル・メニュー3(M)"を右クリックします。表示されたポップアップ・メニューから「新規」-「separator」を選択し、"separator"のプロパティを以下のように設定し、保管します。

プロパティ
内容
name 値:sampleGroup3
セパレータ名

"action"のプロパティ設定

"examples.hello2.objectContribution"を右クリックします。表示されたポップアップ・メニューから「新規」-「action」を選択し、"action"のプロパティを以下のように設定し、保管します。



プロパティ
内容
id 値:examples.hello2.actions.SamplePopupMenuAction
アクションを識別するためのID
label 値:サンプル・アクション3(&S)
アクションの名前
class 値:examples.hello2.actions.SamplePopupMenuAction
アクション・クラスの完全修飾クラス名
org.eclipse.ui.IObjectActionDelegate、org.eclipse.ui.IViewActionDelegate、 org.eclipse.ui.IEditorActionDelegateをインプリメントしていなければいけません
definitionId 値:なし
アクションが扱うコマンドのIDを指定します("org.eclipse.ui.commands"の拡張)
menubarPath 値:sampleMenu3/sampleGroup3
メニューのどこにアクションを定義するかを指定します。 menu要素のidやseparator要素のname、およびgroupMarker要素のnameを"/"で区切って指定します。指定した位置にメ ニュー・アイテムとして表示されます。省略すると、メニューにアクションを追加しません
icon 値:なし
アクションに表示されるアイコンのパス。メニュー・アイテムやツールバー・ボタンのアイコンとして表示されます
helpContextId 値:なし
ヘルプ・コンテキストのID(F1キーをクリックすると表示される)
style 値:なし
アクションのスタイルを指定します(以下の値を指定することができます)
  • push - 通常のメニュー・アイテムとツールバー・ボタン(デフォルト)
  • radio - ラジオ
  • toggle - トグル
  • pulldown - カスケード・メニュー・アイテム、およびツールバー・ボタン横のメニュー・アイテム
state 値:なし
アクションの初期状態(styleがradioかtoggleのとき指定する)
enablesFor 値:なし
アクションを使用可能にするために、一致しなければならない選択カウント
overrideActionId 値:なし
このアクションがオーバーライドするアクションのID
tooltip 値:なし
ツールチップ

examples.hello2.actions.SamplePopupMenuActionクラスの作成

「概要」ページの「すべての拡張」から「org.eclipse.ui.popupMenus」-「examples.hello2.objectContribution」-「サンプル・メニュー3(M)」を選択し、「拡張エレメント詳細」の「class」リンクをクリックして、 examples.hello2.actions.SamplePopupMenuActionクラスを作成します。

「Hello, Eclipse world」メッセージ・ダイアログ

SamplePopupMenuActionクラスにJFaceのメッセージ・ダイアログを使用して「Hello, Eclipse world」メッセージ・ダイアログを表示するコードを以下のように記述します。
 

private Shell shell;

public void setActivePart(IAction action, IWorkbenchPart targetPart) {
        IWorkbenchPartSite site = targetPart.getSite();
        if (site != null) {
                shell = site.getShell();
        }
}

public void run(IAction action) {
        Shell shell = new Shell();
        MessageDialog.openInformation(
                shell,
                "Hello2 プラグイン",
                "Hello, Eclipse world");
}

以上でポップアップ・メニューが追加できました。ワークベンチ・ランタイムを起動し、「Javaプロジェクト」など適当なプロジェクトを作成し、その中にhello.txtファイルを作成します。

そして、hello.txtを右クリックするとポップアップ・メニューに「サンプル・メニュー3」-「サンプル・アクション3」が追加されています(図5)。「サンプル・アクション3」を選択すると「Hello, Eclipse world」メッセージ・ダイアログが表示されます。

これまでに、ポップアップ・メニューを追加する手順について説明しました。次に、拡張ポイントとアクション・クラスについて説明したいと思います。

 

拡張ポイント

拡張する拡張ポイントは、"org.eclipse.ui.popupMenus"です。拡張ポイントの説明やextension要素の記述方法の確認方法は、「メニューの追加」の「拡張ポイント」と同様です。

拡張ポイント"org.eclipse.ui.popupMenus"のextension要素の構造を図6にまとめました。


″org.eclipse.ui.popupMenus″のextension要素の構造
図6:"org.eclipse.ui.popupMenus"のextension要素の構造

アクション・クラス

アクション・クラスでインプリメントできるインターフェースとそれらの関係は、以下のようになります。


インターフェース
図7:インターフェース
(画像をクリックすると別ウィンドウに拡大図を表示します)

 

右クリックしたときの選択しているオブジェクトの種類によって表示されるポップアップ・メニューを拡張する(objectContribution要素を定義した)場合は、IObjectActionDelegateインターフェースをインプリメントします。

指定したビューで表示されるポップアップ・メニューを拡張する(viewerContribution要素を定義し、拡張対象がビューである)場合は、IViewActionDelegateインターフェースをインプリメントします。

指定したエディタで表示されるポップアップ・メニューを拡張する(viewerContribution要素を定義し、拡張対象がエディタである)場合は、IEditorActionDelegateインターフェースをインプリメントします。

IObjectActionDelegateインターフェースをインプリメントしたアクション・クラスでは、表2のメソッドを実装する必要があります。


メソッド 内容
setActivePart アクションがポップアップ・メニューに表示されるときに呼ばれ、ダイアログで必要とされるシェルのようなアクションに作用するコンテキストの取得などの機能を実装
run ユーザがメニュー・アイテムかツールバー・ボタンをクリックしたときに呼ばれ、実際に実行する機能を実装します。
MessageDialogのようなGUIコンポーネントを使用することができます
selectionChanged 選択を変更したときに呼ばれ、機能の変更処理やパラメータの変更処理などを実装
表2:実装するメソッド

まとめ

今回は、メニューとポップアップ・メニューの拡張について説明しました。ポイントは、以下のとおりです。


  • 既存の拡張ポイントに関する説明の確認方法
  • メニューを拡張する拡張ポイントは、"org.eclipse.ui.actionSets"
  • ポップアップ・メニューを拡張する拡張ポイントは、"org.eclipse.ui.popupMenus"
  • メニューのアクション・クラスがインプリメントするインターフェース(IWorkbenchWindowActionDelegate、IWorkbenchWindowPulldownDelegate)
  • ポップアップ・メニューのアクション・クラスがインプリメントするインターフェース(IObjectActionDelegate、IViewActionDelegate、IEditorActionDelegate)

次回は、ビューの拡張について説明します。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る