ポップアップ・メニュー

ID: org.eclipse.ui.popupMenus

説明: この拡張ポイントは、他のプラグインのポップアップ・メニューに 新しいアクションを追加するために使用します。 アクションの 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 viewerContribution (menu | action)*>
   <!ATTLIST viewerContribution
      id        CDATA #REQUIRED
      targetID  CDATA #REQUIRED
   >    <!ELEMENT filter EMPTY>
   <!ATTLIST filter
      name       CDATA #REQUIRED
      value      CDATA #REQUIRED
   >    <!ELEMENT menu (separator)+>
   <!ATTLIST menu
      id         CDATA #REQUIRED
      label      CDATA #REQUIRED
      path       CDATA #IMPLIED
   >    <!ELEMENT separator EMPTY>
   <!ATTLIST separator
      name       CDATA #REQUIRED
   >
  • name - 後でアクション・パスの最後のトークンとして参照が可能な区切り文字の名前。 区切り文字は、アクションの追加先とすることのできる名前付きグループとして使用することができます。
  •    <!ELEMENT action EMPTY>
       <!ATTLIST action
          id                NMTOKEN #REQUIRED
          label             CDATA #REQUIRED
          menubarPath       CDATA #IMPLIED
          icon              CDATA #IMPLIED
          helpContextId     CDATA #IMPLIED
          state             (true | false) #IMPLIED
          class             CDATA #REQUIRED
          enablesFor        CDATA #IMPLIED
       > アクションの拡張機能を使用可能にするための基準は、 最初に enablesFor および selection によって定義されます。 ただし、アクションの代行者がインスタンス化されると、 これはその selectionChanged メソッド内で直接アクションの使用可能状態をコントロールすることができます。

    アクションおよびメニュー・ラベルには、 次の規則に従い、略号とアクセラレーターをエンコードする特殊文字を含むことができます。

    1. 略号は、変換されたテキスト中の選択文字の前のアンパーサンド ('&') 文字で指定されます。 XML ストリングではアンパーサンドは使用できないため、&amp; 文字エンティティーを使用してください。
    2. オプションのアクセラレーターは、名前ストリングの最後で指定します。 これには、'@' に続けて一連の修飾子と最終的なアクセラレーター文字を続けます (例、&amp;Save@Ctrl+S)。 複数の修飾子を持つアクセラレーターは、'+' 符号を区切り文字として取得することができます (@Ctrl+Shift+S など)。
    例:

    ポップアップ・メニュー拡張ポイントの例を次に示します。

       <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="&amp;XYZ Java Tools">
                <separator name="group1"/>
             </menu>
             <action id="com.xyz.runXYZ"
                  label="&amp;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="&amp;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 が必要です。 パーツ間における整合性を保つため、すべてのパーツのインプリメンテーションにおいては、次のストラテジーが要求されます。

    ワークベンチに登録されたポップアップ・メニューには、ID IWorkbenchActionConstants.MB_ADDITIONS による 標準の挿入ポイントを含む必要があります。 他のプラグインは、この値を挿入の参照ポイントとして使用します。 挿入ポイントは、メニューに GroupMarker を適切な挿入位置で追加することにより、定義することができます。

    コンテキスト・メニューの選択であるワークベンチ内のオブジェクトは、 org.eclipse.ui.IActionFilter を定義することができます。 これは、タイプに固有のフィルター操作が可能なストラテジーです。 ワークベンチは、IActionFilter をインプリメントするかどうかをテストして、選択に対するフィルターを取得します。 これに失敗すると、ワークベンチは IAdaptable メカニズムによりフィルターの照会を行います。

    提供されるインプリメンテーション: ワークベンチ・ビューには、 いくつかのアクションにロード済みのポップアップ・メニューが組み込まれています。 プラグインにより、これらのメニューへの contribution が可能になります。 ビューアーがこれら contribution のスロットを予約しており、これがパブリッシュされている場合、 スロット名をパスとして使用することができます。 それ以外の場合、アクションおよびサブメニューはポップアップ・メニューの最後に追加されます。

    Copyright IBM Corp. 2000, 2001.  All Rights Reserved.