RCP:利用actionSet在菜單(menu)里添加內容


eclipse的菜單menu、工具欄toolbar乃至視圖的上下文菜單contextmenu都是使用Action或Command實現的。

Action即是

org.eclipse.jface.action.IAction
 
Command即是
org.eclipse.core.commands.Command
 
從它們的包名可以看出,Action是UI相關的,除了可執行代碼(run方法)以外,還會包含一些UI信息,比如動作名稱(Label),描述圖片(Image)等等。
而Command則完全是業務代碼,它更關注於操作本身,(在編輯器中,一系列被執行了的命令會進入命令棧,以此為依據來實現redo和undo功能)。
 
本篇文章重點要討論的是如何在eclipse的Menu欄上注冊一個Action。分三種情況討論:
1、添加一個菜單欄並添加一個菜單項
2、在自定義的菜單欄里添加一個子菜單
3、為eclipse的指定菜單欄的指定的子菜單添加一個子菜單項
 
所有功能使用org.eclipse.ui.actionSet實現。
 
1、添加一個菜單欄並添加一個菜單項
 
擴展點定義如下:
<extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="test.my.actionSet"
            label="test.my.actionSet"
            visible="true">
         <menu
               id="test.my.menu"
               label="我的Menu">
            <separator
                  name="test.sp">
            </separator>
         </menu>
         <action
               class="test.my.TestAction"
               id="test.my.action"
               label="我的Action"
               menubarPath="test.my.menu/test.sp"
               style="push">
         </action>
      </actionSet>
   </extension>

 

在上述擴展配置中,我們注冊了一個ActionSet,為該ActionSet添加了一個Menu,一個Action,為Menu添加了一個Seperator。

然后將Action的menubarPath設置為[Menu ID]/[Sperarot ID]

 

2、在自定義的菜單欄里添加一個子菜單

<extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="test.my.actionSet"
            label="test.my.actionSet"
            visible="true">
         <menu
               id="test.my.menu"
               label="我的菜單">
            <separator
                  name="test.sp">
            </separator>
         </menu>
         <menu
               id="test.my.submenu"
               label="我的子菜單"
               path="test.my.menu/test.sp">
         </menu>
         <action
               class="test.my.TestAction"
               id="test.my.action"
               label="我的Action"
               menubarPath="test.my.menu/test.my.submenu/additions"
               style="push">
         </action>
      </actionSet>
   </extension>

 

插入子菜單的配置和插入菜單項的配置是一樣的,為子菜單添加子菜單項則需要知道菜單的ID,子菜單的ID。

在Action配置的menubarPath上填寫:[Menu ID]/[SubMenu ID]/additions

即可。效果如下圖所示:

3、為eclipse的指定菜單欄的指定的子菜單添加一個子菜單項
在RCP開發中有一個常見需求,即是為Eclipse的File菜單的New子菜單中添加一個新的子菜單項。
通過上面的學習,我們知道,只要知道菜單ID和子菜單ID,即可完成需求。
如何知道這兩項呢?
我們可以使用Plugin Menu Spy工具,如果你的Eclipse是RCP/RAP版本,或者安裝了PDE插件,就會有這個功能。
按快捷鍵alt+shift+F2
鼠標圖標會變成一個放大鏡和一張圖紙樣式,即是Plug-in Menu Spy成功啟動。
用鼠標點選File->Close,彈出如下界面:
可知菜單ID為file。
 
用鼠標點選File->New->Project,彈出如下界面:
 
 
可知,子菜單ID為new
於是,添加如下配置:
   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="test.my.actionSet"
            label="test.my.actionSet"
            visible="true">
         <action
               class="test.my.TestAction"
               id="test.my.action"
               label="我的Action"
               menubarPath="file/new/additions"
               style="push">
         </action>
      </actionSet>
   </extension>

效果如圖所示:

 

 


免責聲明!

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



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