説明: この拡張ポイントは、他のプラグインのポップアップ・メニューに 新しいアクションを追加するために使用します。 アクションの contribution は、特定のオブジェクト・タイプ (objectContribution) または 特定のポップアップ・メニューに対して行うことができます。 オブジェクト・タイプに登録されると、 指定されたタイプのオブジェクトが選択されたすべてのビューアーに contribution が表示されます。 一方、ポップアップ・メニューに対する登録の場合は、 選択には関係なく、指定されたメニューにのみ表示されます。
選択が異種混合である場合、contribution は、共通タイプの選択に登録された場合に適用されます。 直接のマッチングが不可能な場合、スーパークラスおよびスーパーインターフェースとのマッチングが 試みられます。
選択は、名前フィルターにより、さらに制約することができます。 フィルターを使用した場合、contribution を適用するには、選択内のすべてのオブジェクトがフィルターに マッチする必要があります。
オブジェクト contribution の個々のアクションは、enablesFor 属性を使用して、単一、 複数、またはその他選択タイプにのみ適用するよう指定することができます。
これらのフィルター・メカニズムが不適切な場合、アクション contribution は filter メカニズムを使用することができます。 この場合、ターゲット・オブジェクトの属性は、一連のキー値のペアに記述されます。 選択に対し適用される属性は、選択タイプに固有であり、ワークベンチのドメインの範囲外であるため、 ワークベンチは、実際の選択に対して、このレベルにおけるフィルター操作を代行しています。
構成マークアップ:
<!ELEMENT objectContribution (filter | menu | action)*
(visibility)?>
<!ATTLIST objectContribution
id
CDATA #REQUIRED
objectClass CDATA #REQUIRED
nameFilter CDATA #IMPLIED
adaptable (true | false) #IMPLIED
>
Eclipse のバージョン 2.0 では、visibility エレメントは、アクションの可視性を 定義するために objectContribution で使用されます。 これは、アクションの 1 次ターゲットを定義する、objectClass の代わりではありません。 visibility エレメントは、1 次ターゲットを詳細化するために使用されます。 visibility エレメントの使用の詳細については、 actionExpressions.html を参照してください。<!ELEMENT viewerContribution (menu | action)*>
<!ELEMENT action (selection)* (enablement)?>name - 後でアクション・パスの最後のトークンとして参照が可能な区切り文字の名前。 区切り文字は、アクションの追加先とすることのできる名前付きグループとして使用することができます。
Eclipse のバージョン 2.0 では、enablement エレメントはアクションの使用可能性を 定義するために使用されます。 enablement エレメントの詳細については、 actionExpressions.html を参照してください。アクション拡張の使用可能性の基準は、最初は enablesFor, selection および enablement によって定義されています。 ただし、アクション代行がインスタンス化されると、その selectionChanged メソッド内の アクション使用可能状態のを直接制御できます。
アクションとメニュー・ラベルは、変換されたテキスト中の選択文字の前に、 アンパーサンド ('&') 文字で指定された簡略記号をエンコードする特殊文字を含む場合があります。 XML ストリングではアンパーサンドは使用できないため、& 文字エンティティーを 使用してください。
複数のアクションがメニューまたはツールバーに 1 つの拡張によって与えられる場合、 アクションは plugin.xml ファイルとは逆の順序でリストされます。 この振る舞いは、通常は一目ではわかりません。 ただし、これは Eclipse Platform API がフリーズした後で発見されます。 振る舞いを変更すると、既存の振る舞いに依存する各プラグインが中断する可能性があります。
例:
ポップアップ・メニュー拡張ポイントの例を次に示します。
<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 のスロットを予約しており、これがパブリッシュされている場合、 スロット名をパスとして使用することができます。 それ以外の場合、アクションおよびサブメニューはポップアップ・メニューの最後に追加されます。