不管在何處找到 Boolean 表示式,表示式的語法將遵循相同形式。 enablement 及 visibility 的根元素必須含有一個子元素。在最簡單的情況中, 這將由 objectClass、objectState、systemProperty 或 pluginState 元素所組成。在較複雜的情況中,and、or、 not 元素可以結合以形成 Boolean 表示式。and 或 or 元素可以含有 1 個或多個子元素。not 元素僅能含有 1 個子元素。
objectClass 元素是用來評估選項中每一個物件的類別。 objectClass 的名稱屬性含有完整的類別名稱。如果選項中的每一個物件都實作這個類別, 則表示式將評估為 true。
objectState 元素是用來評估選項中每一個物件的狀態。 在大部份情況中,是否要啟用或看到動作是由選項類型所決定。 在其他情況中,這樣是不夠的,因此必須使用選項狀態來決定是否要啟用或看到動作。 例如,您可能提供一個動作給類型為 IFile 且唯讀的所有物件。 這個唯讀準則僅能藉由指定 objectState 元素來加以宣告。 它可能具有下列形式:
<objectState name="readOnly" value="true"/>在工作台中,這個表示式的評估是非常難以完成,因為物件的屬性是類型專有的,而且超出工作台本身的領域。因此,工作台將聯合選項中的物件來評估表示式。這可透過使用 IActionFilter(objectState 元素的評估策略)來完成。 當評估 objectState 元素時,工作台會詢問選項中的每一個物件,以取得 IActionFilter。 做法為進行測試以查看它是否實作 IActionFilter。 若失敗,工作台將要求透過 IAdaptable 機制要求一個過濾條件。 如果找到過濾條件,工作台將傳遞 objectState 屬性給過濾條件,以判斷它們是否符合選取之物件的狀態。 若是,表示式將評估為 true。如果沒有動作過濾條件, 或沒有相符項目,表示式將評估為 false。
檢視畫面和編輯器用來在他們的選項中去為每一個物件定義 IActionFilter。 這樣使得其他外掛程式開發人員易於使用新的,完全合格的動作去擴充這些檢視畫面和編輯器。
systemProperty 元素是用來評估部份系統內容的狀態。 在這些掩護下,系統內容值是藉由呼叫 System.getProperty 來決定。
pluginState 元素是用來評估外掛程式的狀態。 您可以安裝或啟動外掛程式的狀態。
從: 版次 2.0
配置標記:
<!ELEMENT visibility (and | or | not | objectClass
| objectState | systemProperty
| pluginState)>
<!ELEMENT enablement (and | or | not | objectClass
| objectState | systemProperty
| pluginState)>
<!ELEMENT and (and | or | not | objectClass | objectState | systemProperty | pluginState)*>
<!ELEMENT or (and | or | not | objectClass | objectState | systemProperty | pluginState)*>
<!ELEMENT not (and | or | not | objectClass | objectState | systemProperty | pluginState)>
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name CDATA #REQUIRED
>
範例:id - 可或不可登錄在外掛程式登錄中的外掛程式的 ID。 value - 外掛程式的必要狀態。目前有兩個支援的狀態:installed 及 activated。
下列是使用啟用元素的動作集範例。此動作集宣告的功能表具有標籤 List Element,然後使用在 ListElement 多種狀態選項中啟用的動作將它移入。ListElement 有兩種屬性: name(字串)和 flag(Boolean)。在這個範例中,當 ListElement 被選取,所有動作()被啟用。
當 List Element 的名稱 name = red 被選取(
),
「Red 動作」被啟用。當 List Element 的名稱 name != red 被選取(
),
「非 Red 動作」也被啟用。
<extension point = "org.eclipse.ui.actionSets">下一個範例中,pluginState 元素用來控制動作集中的動作啟用。 若已安裝外掛程式與 x.y.z.myPlugin,啟用「安裝」的動作(
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="List Element">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="List Element"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac1"
label="All"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate"
enablesFor="1">
<enablement>
<objectClass name="org.eclipse.ui.tests.api.ListElement"/>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac2"
label="Red"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate"
enablesFor="1">
<enablement>
<and>
<objectClass name="org.eclipse.ui.tests.api.ListElement"/>
<objectState name="name" value="red"/>
</and>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac3"
label="Not Red"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate"
enablesFor="1">
<enablement>
<and>
<objectClass name="org.eclipse.ui.tests.api.ListElement"/>
<not>
<objectState name="name" value="red"/>
</not>
</and>
</enablement>
</action>
</actionSet>
</extension>
<extension point = "org.eclipse.ui.actionSets">在下一個範例中,示範 systemProperty 元素。當 ActionExpressionVar 系統內容等於「bubba」時啟用「系統內容」動作(
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="List Element">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="List Element"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac8"
label="Installed"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate">
<enablement>
<pluginState id="x.y.z.myPlugin" value="installed"/>
</enablement>
</action><action id="org.eclipse.ui.tests.internal.ac10"
label="Activated"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate">
<enablement>
<pluginState id="x.y.z.myPlugin" value="activated"/>
</enablement>
</action>
</actionSet>
</extension>
<extension point = "org.eclipse.ui.actionSets">這裡是最後一個範例,它將示範宣告蹦現功能表動作延伸項目的可見性。 每當以 name = red 及 flag = true 選取 ListElement 時, 就會看到 Red and True 動作。
<actionSet id="org.eclipse.ui.tests.internal.ListElementActions"
label="List Element">
<menu id="org.eclipse.ui.tests.internal.ListElementMenu"
label="List Element"
path="additions">
<separator name="group1"/>
</menu><action id="org.eclipse.ui.tests.internal.ac11"
label="System Property"
menubarPath="org.eclipse.ui.tests.internal.ListElementMenu/group1"
class="org.eclipse.ui.tests.api.MockActionDelegate">
<enablement>
<systemProperty name="ActionExpressionVar" value="bubba"/>
</enablement>
</action>
</actionSet>
</extension>
<extension point="org.eclipse.ui.popupMenus">
<objectContribution id="oc6"
objectClass="org.eclipse.ui.tests.api.ListElement">
<visibility>
<and>
<objectState name="name" value="red"/>
<objectState name="flag" value="true"/>
</and>
</visibility>
<action id="oc4" label="Red And True"
class="org.eclipse.ui.tests.api.MockActionDelegate"/>
</objectContribution>
</extension>
提供的實作方式:為了方便起見,動作過濾條件已定義給標示元、
資源及專案。每一個動作過濾條件的名稱-值配對都會在 IMarkerActionFilter、IResourceActionFilter
及 IProjectActionFilter 上宣告。