ビューのメニュー、ツールバー、およびアクション

org.eclipse.ui.viewActions

この拡張ポイントは、他のプラグインにより登録されたビューのプルダウン・メニュー、およびツールバーにアクションを追加するために使用します。 各ビューには、ローカルのプルダウン・メニューがあります。 これは通常、右上の三角ボタンをクリックしてアクティブにします。 このメニューには、その他のプラグインにより、サブメニューおよびアクションを追加することができます。 また、プラグインにより、ビュー・ツールバーにアクションを追加することもできます。 ビューの所有者は、最初にこれらの領域を配置することができます。 他のプラグインによるオプションの追加内容がこれに加えられます。

アクションの使用可能性と可視性は、エレメント enablementvisibility をそれぞれ使用することによって定義できます。 これらの 2 つのエレメントにはブール式が含まれ、この式が評価されて使用可能性と可視性を決定します。

enablement エレメントと visibility エレメントは同じ構文です。 どちらにも、1 つのブール式サブエレメントだけが含まれています。 最も単純なケースでは、これは 1 つの objectClassobjectStatepluginState、または systemProperty エレメントになります。 もっと複雑なケースになると、andor、および not のエレメントで結合して、1 つのブール式を構成している場合があります。 and および or エレメントの両方に、2 つのサブエレメントが含まれていなければなりません。 not エレメントには、 1 つのサブエレメントだけが含まれなければなりません。

<!ELEMENT extension (viewContribution+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT viewContribution (menu* , action*)>

<!ATTLIST viewContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

このエレメントは、ビュー・アクションおよび/またはメニューのグループを定義するために使用します。



< !ELEMENT action (selection* | enablement?)>

<!ATTLIST action

id            CDATA #REQUIRED

label         CDATA #REQUIRED

menubarPath   CDATA #IMPLIED

toolbarPath   CDATA #IMPLIED

icon          CDATA #IMPLIED

disabledIcon  CDATA #IMPLIED

hoverIcon     CDATA #IMPLIED

tooltip       CDATA #IMPLIED

helpContextId CDATA #IMPLIED

style         (push|radio|toggle) "push"

state         (true | false)

class         CDATA #REQUIRED

enablesFor    CDATA #IMPLIED>

このエレメントは、ユーザーが UI で起動できるアクションを定義します。



<!ELEMENT menu (separator+ , groupMarker*)>

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

このエレメントは、新規メニューの定義に使用されます。



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

このエレメントは、新規メニューのメニュー・セパレーターを作成するために使用されます。



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

このエレメントは、新規メニューに名前付きグループを作成するために使用されます。 これは、separator エレメントと違って、新規メニューにビジュアル表示されません。



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

このエレメントは、現在の選択を基にした、アクションの使用可能性を判別する際に役立ちます。 enablement エレメントが指定されていると無視されます。



<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>

このエレメントは、拡張の使用可能性を定義するために使用されます。



<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>

このエレメントは、拡張の可視性を定義するために使用されます。



<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>

このエレメントは、2 つのサブエレメント式を評価した結果に対するブール AND 演算を表します。



<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>

このエレメントは、2 つのサブエレメント式を評価した結果に対するブール OR 演算を表します。



<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>

このエレメントは、サブエレメント式を評価した結果に対するブール NOT 演算を表します。



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

このエレメントは、現在の選択内の各オブジェクトのクラスまたはインターフェースを評価するために使用されます。 選択内の各オブジェクトが指定されたクラスまたはインターフェースを実装している場合、式は真と評価されます。



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

このエレメントは、現在の選択内の各オブジェクトの属性の状態を評価するために使用されます。 選択内の各オブジェクトが指定された属性状態である場合、式は真と評価されます。 このタイプの式を評価するには、 選択内の各オブジェクトが org.eclipse.ui.IActionFilter インターフェースを実装するか、またはそれに適合している必要があります。



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

このエレメントは、プラグインの状態を評価するために使用されます。 プラグインの状態は、installed (OSGi の「resolved」の概念と等価) または activated (OSGi の「active」の概念と等価) のいずれかです。



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

このエレメントは、いくつかのシステム・プロパティーの状態を評価するために使用されます。 プロパティーの値は、java.lang.System から検索されます。



ビュー・アクション拡張の例を以下に示します。

   

<extension point=

"org.eclipse.ui.viewActions"

>

<viewContribution id=

"com.xyz.xyzViewC1"

targetID=

"org.eclipse.ui.views.navigator.ResourceNavigator"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

menubarPath=

"com.xyz.xyzMenu/group1"

toolbarPath=

"Normal/additions"

style=

"toggle"

state=

"true"

icon=

"icons/runXYZ.gif"

tooltip=

"Run XYZ Tool"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

</viewContribution>

</extension>

上の例では、指定されたアクションは単一選択 (enablesFor 属性) にのみ使用可能になります。 また、選択内のオブジェクトは Java ファイル・リソースでなければなりません。

次に、ビュー・アクション拡張のもう 1 つの例を示します。

   

<extension point=

"org.eclipse.ui.viewActions"

>

<viewContribution id=

"com.xyz.xyzViewC1"

targetID=

"org.eclipse.ui.views.navigator.ResourceNavigator"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp;Run XYZ2 Tool"

menubarPath=

"com.xyz.xyzMenu/group1"

style=

"push"

icon=

"icons/runXYZ2.gif"

tooltip=

"Run XYZ2 Tool"

helpContextId=

"com.xyz.run_action_context2"

class=

"com.xyz.actions.RunXYZ2"

>

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<not>

<objectState name=

"extension"

value=

"java"

/>

</not>

</and>

</enablement>

</action>

</viewContribution>

</extension>

上の例では、指定されたアクションはメニュー項目として表示されます。 アクションは、 選択に Java ファイル・リソースが含まれていない場合に使用可能になります。

class 属性の値は、 org.eclipse.ui.IViewActionDelegate を実装する Java クラスの完全修飾名でなければなりません。 このクラスは、プラグイン全体が実際に必要となる前に全体がロードされてしまうことがないよう、 できる限り後からロードされます。

インターフェース org.eclipse.ui.IViewActionDelegate は、 org.eclipse.ui.IActionDelegate を拡張してメソッドをさらに追加し、これによって、 代行者が contribution 先のビュー・インスタンスの初期化を行うことができるようにします。

この拡張ポイントを使用すると、以前にターゲット・ビューによって作成されたメニューにアクションを追加することができます。 メニュー・パス属性を省略すると、プルダウン・メニューの最後に新規メニューまたはアクションが追加されます。

アクション拡張の使用可能性の基準は、最初は enablesFor によって定義され、selection または enablement のいずれかによっても定義されます。 ただし、アクション代行がインスタンス化されると、その selectionChanged メソッド内のアクション使用可能状態を直接制御できます。

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

  1. 略号は、変換されたテキスト中の選択文字の前のアンパーサンド ('&') 文字で指定されます。 アンパーサンドは XML ストリングでは許可されていないため、&amp; 文字エンティティーを使用してください。
複数のアクションがメニューまたはツールバーに 1 つの拡張によって与えられる場合、 アクションは plugin.xml ファイルとは逆の順序でリストされます。 この動作は、通常はすぐにわかりません。 ただし、Eclipse Platform API がフリーズすると発見されます。 今、この動作を変更すると、既存の動作に依存している各プラグインが混乱してしまうことになります。

selection エレメントと enablement エレメントは相互に排他的です。 サブエレメント objectClass および objectState を使用して、 enablement エレメントで selection エレメントを置き換えることができます。 以下に例を示します。

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

これは、以下の項目を使用して表現することができます。
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

各ビューには通常、 プルダウン・メニューとローカル・ツールバーにいくつかの標準項目が用意されています。 他のプラグインからの追加は、標準補足に追加されます。