メニュー拡張ポイントのいずれかを使用してプラグインがワークベンチ UI にアクションを組み込むとき、 プラグインは、メニュー内でメニュー項目を可視および/または使用可能にする条件を指定できます。 選択カウントおよび選択クラスなど、簡単な使用可能化条件の提供に加え、 プラグインはブール式を使用して、アクションをいつ可視または使用可能にするかを柔軟に決定できます。
ブール式には、ブール演算子 (NOT、AND、OR) を、特定の条件を評価するための事前定義構文と組み合わせて組み込むことができます。これらの条件の多くは、特定のオブジェクトをテストします。「フォーカスされているオブジェクト」(テスト中のオブジェクト) の識別は、以下のように Enablement 式の特定のコンテキストによって決まります。
これらの式に対してテストする値を指定するときは、以下の変換が成功する場合を除いて、値はストリングであると想定されます。
使用可能性 XML 構文の完全な定義については、 org.eclipse.ui.popupMenus などの enablement エレメントを定義する拡張についての、拡張ポイント・リファレンス・ドキュメンテーションを参照してください。
R3.0 以前は、これらの汎用ブール式は使用できませんでした。汎用式をビルドせずに、以下の事前定義式を使用して、特定の条件を評価していました。これらの式はすべて、より汎用的な構文で表現できるようになったことに注意してください。事前定義式は、引き続き以下のように使用できます。
objectClass - 選択内の各オブジェクトがクラスをサブクラス化、または実装している場合は真。
objectState - 名前付き属性が指定された値と等しい場合は真。 IActionFilter は式の評価を支援します。 アクション・フィルターは、ターゲット選択および名前付き属性の値に基づき、アクションの使用可能性基準を動的に計算します。
systemProperty - 名前付きシステム・プロパティーが指定された値と等しい場合は真。
pluginState - (ID によって) 指定されたプラグインを、 インストールまたは活動化する必要があるかどうか指定します。
例えば、以下の部分は、アクション・セットの仮定のアクションで使用できる使用可能性式を表します。
<action id="org.eclipse.examples.actionEnablement.class" label="Red Element" menubarPath="additions" class="org.eclipse.examples.actionEnablement.ObjectTestAction"> <enablement> <and> <objectClass name="org.eclipse.examples.actionEnablement.TestElement"/> <objectState name="name" value="red"/> </and> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.property" label="Property" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PropertyTestAction"> <enablement> <systemProperty name="MyTestProperty" value="puppy"/> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.pluginState" label="Installed" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PluginTestAction"> <enablement> <pluginState id="x.y.z.anotherPlugin" value="installed"/> </enablement> </action>
これらの式の詳しいサンプルおよび XML の完全な説明については、拡張ポイントのリファレンス・ドキュメンテーションを参照してください。
下の表では、アクションを組み込む拡張ポイントがリストされ、 XML マークアップ属性およびブール式を使用して使用可能性に影響を与える方法も要約されています。
拡張ポイント名 |
使用可能性に影響を与える属性 |
ブール式 |
---|---|---|
enablesFor - 使用可能になるアクションに適合する必要のある選択カウントを指定します。 selection class - アクションを使用可能にするため、選択オブジェクトがサブクラス化または実装する必要のあるクラス。 selection name - 選択内のオブジェクトに適用できるワイルドカード・フィルター。 |
visibility - ブール式。 メニュー項目をメニューに表示するかどうかを制御します。 enablement - ブール式。 メニュー項目をメニューで使用可能にするかどうかを制御します。 enablesFor 属性、selection class、および name は、Enablement 式を 適用する前に基準を満たしている必要があります。 |
|
(オブジェクト contribution の場合のみ) objectClass - 選択内のオブジェクトがサブクラス化または実装する必要のあるクラスを指定します。 (オブジェクト contribution とビューアー contribution の両方の場合) enablesFor - 使用可能になるアクションに適合する必要のある選択カウントを指定します。 selection class - アクションを使用可能にするため、選択オブジェクトがサブクラス化または実装する必要のあるクラス。 selection name - 選択内のオブジェクトに適用できるワイルドカード・フィルター。
|
(オブジェクト contribution とビューアー contribution の両方の場合) visibility - ブール式。 メニュー項目をメニューに表示するかどうかを制御します。 enablement - ブール式。 メニュー項目をメニューで使用可能にするかどうかを制御します。 enablesFor 属性、selection class、および name は、Enablement 式を 適用する前に基準を満たしている必要があります。 |
コンテンツ型 (『コンテンツ型』を参照) を定義する機能は、ブール式と組み合わせることによって、 リソースのコンテンツ型に基づく非常に特化した使用可能性条件または可視性条件を定義できます。 例えば、次の断片では、選択したファイルのコンテンツがプラグインの特殊なコンテンツ型と一致する場合に、 ポップアップ・メニュー項目が表示されます。
<extension point="org.eclipse.ui.popupMenus"> <objectContribution id="com.example.objectContributions" objectClass="org.eclipse.core.resources.IFile" nameFilter="*.xml"> <visibility> <or> <objectState name="contentTypeId" value="com.example.employeeRecordContentType"/> <objectState name="contentTypeId" value="com.example.customerRecordContentType"/> </or> </visibility> <action id="com.example.action1" ...contentTypeId 属性は、objectState 式で使用して、選択されている xml ファイルのコンテンツ型を検査できます。 これによって、プラグインは、特定のファイルの型に関連するメニュー・アクションを使用可能にする、または表示する前に、 非常に特殊なコンテンツ検査を適用できます。 コンテンツ型の拡張について詳しくは、『コンテンツ型』を参照してください。