Object Action
這種Action是跟彈出的上下文菜單相關(guān)的, 因此它主要用在org.eclipse.ui.popupMenus擴(kuò)展點(diǎn)下的objectContribution 節(jié)點(diǎn)中, 這里有幾個(gè)屬性需要做一下說明:
adaptable:true表示能將選中對(duì)象適配為objectClass中指定的類型
nameFilter:這個(gè)是用來指定哪種文件類型為當(dāng)前contribution可用, 比如設(shè)置為*.java表示當(dāng)前action只針對(duì)java文件
objectClass:指定contribution只用于那種對(duì)象類型
contribution的其他屬性跟前面介紹的大同小異
對(duì)contribition過濾和可用性的控制
只有當(dāng)前選中的文件類型是nameFilter指定的類型, 或者選中的對(duì)象是objectClass指定的類型,contribution才會(huì)在右鍵菜單中出現(xiàn),而是否可用則要通過判斷選中的對(duì)象是否和enablesFor屬性中表達(dá)式規(guī)定的數(shù)量, 表達(dá)式的定義包括:!表示選中0個(gè), ?表示0個(gè)或1個(gè), +表示1個(gè)或多個(gè), multiple, 2+兩個(gè)或多個(gè), n表示具體個(gè)數(shù), *表示任意個(gè)
objectContribution還提供visibility節(jié)點(diǎn)來控制contribution可見性, 它比通過nameFilter 和objectClass控制功能更強(qiáng), 比如要達(dá)到和objectClass="org.eclipse.core.resources.IResource"同樣的效果可以這樣寫:
- <objectContribution ...
- <visibility>
- <objectClass
- name="org.eclipse.core.resources.IResource"/>
- visibility>
- ...the other stuff here...
- objectContribution>
如果當(dāng)前contribution只用于可寫的對(duì)象,可以這樣寫:
- <objectContribution ...>
- <visibility>
- <and>
- <objectClass
- name="org.eclipse.core.resources.IResource"/>
- <objectState name="readOnly" value="false"/>
- and>
- visibility>
- ... the other stuff here ...
- objectContribution>
visibility包括了not, and和or邏輯表達(dá)式節(jié)點(diǎn)以及adapt等Boolean表達(dá)式節(jié)點(diǎn), adapt節(jié)點(diǎn)會(huì)先將選中對(duì)象適配為指定類型然后給其下級(jí)節(jié)點(diǎn)使用,比如這里:
- <adapt type="org.eclipse.core.resources.IResource">
- <objectState name="readOnly" value="false"/>
- adapt>
首先適配成IResource,然后判斷其狀態(tài),該節(jié)點(diǎn)通常和and操作符結(jié)合使用, 如果適配器或者引用的類型沒有加載,那么將返回EvaluationResult.NOT_LOADED, 如果指定的類型不存在,將拋出ExpressionException 異常
and節(jié)點(diǎn)只有下級(jí)子節(jié)點(diǎn)表達(dá)式都返回true才為true
instanceof節(jié)點(diǎn) 只有選中的對(duì)象是指定的名稱時(shí)才為true, 和objectClass不同之處在于,它還可以與其他的元素通過and和or元素一起使用
not節(jié)點(diǎn)只有在下級(jí)節(jié)點(diǎn)返回false才為true
objectClass看上面的例子就知道了
objectState 比較選中的對(duì)象的狀態(tài)是否指定的值
or節(jié)點(diǎn)只要下級(jí)節(jié)點(diǎn)中有一個(gè)為true就返回為true
pluginState節(jié)點(diǎn)對(duì)指定的插件的狀態(tài)進(jìn)行檢測, 這里的狀態(tài)有兩種:installed或者actived, 比如這樣寫:
- <pluginState id="org.eclipse.pde" value="installed"/>
表示只有org.eclipse.pde插件安裝才可見
systemProperty 舉個(gè)例子就知道怎么用了
- <systemProperty name="user.language" value="en"/>
systemTest 跟systemProperty大同小異,只不過它可以通過and和or與其他的節(jié)點(diǎn)聯(lián)合使用
test節(jié)點(diǎn)舉個(gè)例子來說吧:
- <test
- property="org.eclipse.debug.ui.projectNature"
- value="org.eclipse.jdt.core.javanature"/>
表示只有選中的是java項(xiàng)目下的對(duì)象當(dāng)前contribution才可見, 如果進(jìn)行比較的property沒有加載,將返回EvaluationResult.NOT_LOADED, 這里指定的進(jìn)行比較的屬性能通過使用org.eclipse.core.expressions.propertyTesters進(jìn)行擴(kuò)展,具體的實(shí)現(xiàn)可參考o(jì)rg.eclipse.debug.internal.ui.ResourceExtender類
安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢】