説明: この拡張ポイントは、他のプラグインのポップアップ・メニューに 新しいアクションを追加するために使用します。 アクションの contribution は、特定のオブジェクト・タイプ (objectContribution) または 特定のポップアップ・メニューに対して行うことができます。 オブジェクト・タイプに登録されると、 指定されたタイプのオブジェクトが選択されたすべてのビューアーに contribution が表示されます。 一方、ポップアップ・メニューに対する登録の場合は、 選択には関係なく、指定されたメニューにのみ表示されます。
選択が異種混合である場合、contribution は、共通タイプの選択に登録された場合に適用されます。 直接のマッチングが不可能な場合、 スーパークラスおよびスーパー・インターフェースとのマッチングが試みられます。
選択は、名前フィルターにより、さらに制約することができます。 フィルターを使用した場合、contribution を適用するには、 選択内のすべてのオブジェクトがフィルターにマッチする必要があります。
オブジェクト contribution の個々のアクションは、enablesFor 属性を使用して、 単一、複数、またはその他選択タイプにのみ適用するよう指定することができます。
これらのフィルター・メカニズムが不適切な場合、アクション contribution は filter メカニズムを使用することができます。 この場合、ターゲット・オブジェクトの属性は、一連のキー値のペアに記述されます。 選択に対し適用される属性は、選択タイプに固有であり、ワークベンチのドメインの範囲外であるため、 ワークベンチは、実際の選択に対して、このレベルにおけるフィルター操作を代行しています。
構成マークアップ:
<!ELEMENT objectContribution (filter | menu | action)*>
<!ATTLIST objectContribution
id
CDATA #REQUIRED
objectClass CDATA #REQUIRED
nameFilter CDATA #IMPLIED
>
<!ELEMENT action EMPTY>name - 後でアクション・パスの最後のトークンとして参照が可能な区切り文字の名前。 区切り文字は、アクションの追加先とすることのできる名前付きグループとして使用することができます。
アクションおよびメニュー・ラベルには、 次の規則に従い、略号とアクセラレーターをエンコードする特殊文字を含むことができます。
ポップアップ・メニュー拡張ポイントの例を次に示します。
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.xyz.C1"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.java">
<menu id="com.xyz.xyzMenu"
path="additions"
label="&XYZ Java Tools">
<separator name="group1"/>
</menu>
<action id="com.xyz.runXYZ"
label="&Run XYZ Tool"
menubarPath="com.xyz.xyzMenu/group1"
icon="icons/runXYZ.gif"
helpContextId="com.xyz.run_action_context"
class="com.xyz.actions.XYZToolActionDelegate"
enablesFor="1">
</action>
</objectContribution>
<viewerContribution
id="com.xyz.C2"
targetID="org.eclipse.ui.views.TaskList">
<action
id="com.xyz.showXYZ"
label="&Show XYZ"
menubarPath="additions"
icon="icons/showXYZ.gif"
helpContextId="com.xyz.show_action_context"
class="com.xyz.actions.XYZShowActionDelegate">
</action>
</viewerContribution>
</extension>
上記の例では、指定されたアクションは、単一選択 (enablesFor 属性) に対してのみ使用可能となります。 また、選択内の各オブジェクトは、指定されたインターフェース (IFile) をインプリメントする必要があり、 Java ファイルである必要があります。 このアクションは、あらかじめ作成したサブメニューに追加されます。 この contribution は、選択が要求されたいずれのビューにおいても有効となります。
一方、上記のビューアー contribution は、タスク・ビューにのみ表示され、 ビュー内の選択によって影響を受けることはありません。
次に、フィルター・メカニズムの例を示します。 この場合、アクションは、終了済みで優先度の高い IMarker に対してのみ現れます。
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.xyz.C1"
objectClass="org.eclipse.core.resources.IMarker">
<filter name="done"
value="true"/>
<filter name="priority"
value="2"/>
<action id="com.xyz.runXYZ"
label="High Priority Completed Action Tool"
icon="icons/runXYZ.gif"
class="com.xyz.actions.MarkerActionDelegate">
</action>
</objectContribution>
</extension>
API 情報: アクション属性 class の値は、 org.eclipse.ui.IObjectActionDelegate (オブジェクト contribution の場合)、 org.eclipse.ui.IViewActionDelegate (ビューに属すビューアーの contribution の場合)、 org.eclipse.ui.IEditorActionDelegate (エディターに属すビューアーの contribution の場合) を インプリメントする Java クラスの完全修飾名である必要があります。 いずれの場合も、インプリメントするクラスは、プラグイン全体を必要する前に全体がロードされることのないよう、 できる限り後からロードされます。
注: 下位互換性のため、オブジェクト contribution については org.eclipse.ui.IActionDelegate のインプリメントが可能です。
パーツ内のポップアップ・メニューの拡張は、 ターゲット・パーツが実行用のメニューをパブリッシュする場合にのみ可能となります。 これにより製品の拡張性が向上するため、強くお勧めします これを行うには、各パーツは IWorkbenchPartSite#registerContextMenu を呼び出して定義される ポップアップ・メニューをパブリッシュする必要があります。 これにより、ワークベンチは既存のアクション拡張機能を自動的に挿入します。
登録された各メニューには、メニュー ID が必要です。 パーツ間における整合性を保つため、すべてのパーツのインプリメンテーションにおいては、次のストラテジーが要求されます。
コンテキスト・メニューの選択であるワークベンチ内のオブジェクトは、 org.eclipse.ui.IActionFilter を定義することができます。 これは、タイプに固有のフィルター操作が可能なストラテジーです。 ワークベンチは、IActionFilter をインプリメントするかどうかをテストして、選択に対するフィルターを取得します。 これに失敗すると、ワークベンチは IAdaptable メカニズムによりフィルターの照会を行います。
提供されるインプリメンテーション: ワークベンチ・ビューには、 いくつかのアクションにロード済みのポップアップ・メニューが組み込まれています。 プラグインにより、これらのメニューへの contribution が可能になります。 ビューアーがこれら contribution のスロットを予約しており、これがパブリッシュされている場合、 スロット名をパスとして使用することができます。 それ以外の場合、アクションおよびサブメニューはポップアップ・メニューの最後に追加されます。