RCP:利用actionSet在菜单(menu)里添加内容-阿里云开发者社区

开发者社区> 开发与运维> 正文

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)等等。

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>

效果如图所示:

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章