表示式

說明:Boolean 表示式是用來定義能否看到及啟用工作台內的許多動作延伸項目。 例如,enablement 元素可以定義在任何動作延伸項目內。 這個元素含有定義能否啟用動作準則的 Boolean 表示式。 visibility 元素可以定義給蹦現功能表動作延伸項目。 這個元素含有定義能否看到動作準則的 Boolean 表示式。

不管在何處找到 Boolean 表示式,表示式的語法將遵循相同形式。 enablement 及 visibility 的根元素必須含有一個子元素。在最簡單的情況中, 這將由 objectClassobjectStatesystemPropertypluginState 元素所組成。在較複雜的情況中,andor、 not 元素可以結合以形成 Boolean 表示式。andor 元素可以含有 1 個或多個子元素。not 元素僅能含有 1 個子元素。

objectClass 元素是用來評估選項中每一個物件的類別。 objectClass 的名稱屬性含有完整的類別名稱。如果選項中的每一個物件都實作這個類別, 則表示式將評估為 true。

objectState 元素是用來評估選項中每一個物件的狀態。 在大部份情況中,是否要啟用或看到動作是由選項類型所決定。 在其他情況中,這樣是不夠的,因此必須使用選項狀態來決定是否要啟用或看到動作。 例如,您可能提供一個動作給類型為 IFile 且唯讀的所有物件。 這個唯讀準則僅能藉由指定 objectState 元素來加以宣告。 它可能具有下列形式:

<objectState name="readOnly" value="true"/>
在工作台中,這個表示式的評估是非常難以完成,因為物件的屬性是類型專有的,而且超出工作台本身的領域。因此,工作台將聯合選項中的物件來評估表示式。這可透過使用 IActionFilterobjectState 元素的評估策略)來完成。 當評估 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
   >

   <!ELEMENT objectState EMPTY>
   <!ATTLIST objectState
      name       CDATA #REQUIRED
      value      CDATA #REQUIRED
   >    <!ELEMENT systemProperty EMPTY>
   <!ATTLIST systemProperty
      name       CDATA #REQUIRED
      value      CDATA #REQUIRED
   >    <!ELEMENT pluginState EMPTY>
   <!ATTLIST pluginState
      id         CDATA #REQUIRED
      value      (installed | activated)
   >
  • id - 可或不可登錄在外掛程式登錄中的外掛程式的 ID。
  • value - 外掛程式的必要狀態。目前有兩個支援的狀態:installed 及 activated。
  • 範例:

    下列是使用啟用元素的動作集範例。此動作集宣告的功能表具有標籤 List Element,然後使用在 ListElement 多種狀態選項中啟用的動作將它移入。ListElement 有兩種屬性: name(字串)和 flag(Boolean)。在這個範例中,當 ListElement 被選取,所有動作(A tag)被啟用。 當 List Element 的名稱 name = red 被選取(B tag), 「Red 動作」被啟用。當 List Element 的名稱 name != red 被選取(C tag), 「非 Red 動作」也被啟用。

    <extension point = "org.eclipse.ui.actionSets">
        <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>
    A tag     <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>
    B tag     <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>
    C tag     <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>
    下一個範例中,pluginState 元素用來控制動作集中的動作啟用。 若已安裝外掛程式與 x.y.z.myPlugin,啟用「安裝」的動作(A tag)。 當相同的外掛程式已被啟動,會啟用「啟動的」動作(B tag)。
    <extension point = "org.eclipse.ui.actionSets">
        <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>
    A tag     <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>
    B tag     <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>
    在下一個範例中,示範 systemProperty 元素。當 ActionExpressionVar 系統內容等於「bubba」時啟用「系統內容」動作(A tag)。
    <extension point = "org.eclipse.ui.actionSets">
        <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>
    A tag     <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>
    這裡是最後一個範例,它將示範宣告蹦現功能表動作延伸項目的可見性。 每當以 name = redflag = true 選取 ListElement 時, 就會看到 Red and True 動作。
    <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>


    提供的實作方式:為了方便起見,動作過濾條件已定義給標示元、 資源及專案。每一個動作過濾條件的名稱-值配對都會在 IMarkerActionFilterIResourceActionFilterIProjectActionFilter 上宣告。

    Copyright IBM Corporation and others 2000, 2002.