eclipse 插件編寫(三)


參考:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_cmd_menus.htm+

接着上一篇的內容,上一篇中演示了如何添加一個右鍵菜單,而上次添加的菜單時在每個元素上點擊右鍵都會彈出菜單的,而我們做生成代碼工具時一般是只需要在.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 &amp;Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&amp;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中添加以下代碼,

image

 

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 &amp;Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&amp;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文件:

image

點擊java文件:

image

由於水平有限,有些地方解釋有誤,請回復改正且諒解!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM