接着上一篇的內容,上一篇中演示了如何添加一個右鍵菜單,而上次添加的菜單時在每個元素上點擊右鍵都會彈出菜單的,而我們做生成代碼工具時一般是只需要在.java 的文件上進行操作,也就是在.java 文件上右擊時才應該只顯示生成代碼的菜單,其他的地方不應該顯示的。
在eclipse插件開發過程中,在處理什么時候顯示、什么時候啟用、什么時候激活操作時使用一組 Core Expressions (核心表達式) 來進行控制,核心表達式也可以在其他地方使用,詳情參考 eclipse 插件開發指南。
在開發插件過程中,使用表達式時通過在plugin.xml文件中進行聲明使用,在某些服務中也可以通過編程的方式使用。在使用中核心表達式時,以子元素的形式進行聲明,即每聲明一個元素,都以子節點的形式展現。
打開上次創建的插件工程的plugin.xml文件,切換到plugin.xml標簽頁,現在有以下代碼:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.actionSets">
<actionSet
label="Sample Action Set"
visible="true"
id="TestPlugin.actionSet">
<menu
label="Sample &Menu"
id="sampleMenu">
<separator
name="sampleGroup">
</separator>
</menu>
<action
label="&Sample Action"
icon="icons/sample.gif"
class="testplugin.actions.SampleAction"
tooltip="Hello, Eclipse world"
menubarPath="sampleMenu/sampleGroup"
toolbarPath="sampleGroup"
id="testplugin.actions.SampleAction">
</action>
</actionSet>
</extension>
<extension
point="org.eclipse.ui.commands">
<command
id="com.yunzaipiao.menu.command"
name="GenerateFormCode">
</command>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="true"
locationURI="popup:org.eclipse.ui.popup.any?after=additions">
<command
commandId="com.yunzaipiao.menu.command"
icon="icons/photo.jpg"
label="生成代碼"
style="push">
</command>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.yunzaipiao.menu.handler.SampleHandler"
commandId="com.yunzaipiao.menu.command">
</handler>
</extension>
</plugin>
在生成代碼的command中添加以下代碼,
visibleWhen : 該節點的出現,處理當前菜單什么時候可以顯示,在該節點下處理選中元素時默認是一個集合,可以使用<iterator> 進行迭代,通過<count>進行計數。
with:聲明一個變量,默認為選中操作,這兒是在右鍵菜單中添加菜單,所以這兒也可以不添加with節點,因為默認就是該變量
iterate:迭代當前元素,如果不設置ifEmpty屬性,則在集合為空時也返回true
adapt:判斷選定的對象是否為指定的類型
test:添加測試條件,這里根據org.eclipse.core.resources中的一個屬性測試IResource的一個屬性
添加完成后的代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.actionSets">
<actionSet
label="Sample Action Set"
visible="true"
id="TestPlugin.actionSet">
<menu
label="Sample &Menu"
id="sampleMenu">
<separator
name="sampleGroup">
</separator>
</menu>
<action
label="&Sample Action"
icon="icons/sample.gif"
class="testplugin.actions.SampleAction"
tooltip="Hello, Eclipse world"
menubarPath="sampleMenu/sampleGroup"
toolbarPath="sampleGroup"
id="testplugin.actions.SampleAction">
</action>
</actionSet>
</extension>
<extension
point="org.eclipse.ui.commands">
<command
id="com.yunzaipiao.menu.command"
name="GenerateFormCode">
</command>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="true"
locationURI="popup:org.eclipse.ui.popup.any?after=additions">
<command
commandId="com.yunzaipiao.menu.command"
icon="icons/photo.jpg"
label="生成代碼"
style="push">
<visibleWhen
checkEnabled="false">
<with
variable="selection">
<iterate ifEmpty="false"> <!-- 如果不設置ifEmpty屬性,當沒有選擇任何元素時,改表達式返回true -->
<adapt
type="org.eclipse.core.resources.IResource">
<test
property="org.eclipse.core.resources.name" value="*.java">
</test>
</adapt>
</iterate>
</with>
</visibleWhen>
</command>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.yunzaipiao.menu.handler.SampleHandler"
commandId="com.yunzaipiao.menu.command">
</handler>
</extension>
</plugin>
點擊查看效果:
點擊非java文件:
點擊java文件:
由於水平有限,有些地方解釋有誤,請回復改正且諒解!