RCP:利用actionSet在菜单(menu)里添加内容

时间:2023-01-01 09:51:19

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]

RCP:利用actionSet在菜单(menu)里添加内容

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

即可。效果如下图所示:

RCP:利用actionSet在菜单(menu)里添加内容

3、为eclipse的指定菜单栏的指定的子菜单添加一个子菜单项
在RCP开发中有一个常见需求,即是为Eclipse的File菜单的New子菜单中添加一个新的子菜单项。
通过上面的学习,我们知道,只要知道菜单ID和子菜单ID,即可完成需求。
如何知道这两项呢?
我们可以使用Plugin Menu Spy工具,如果你的Eclipse是RCP/RAP版本,或者安装了PDE插件,就会有这个功能。
按快捷键alt+shift+F2
鼠标图标会变成一个放大镜和一张图纸样式,即是Plug-in Menu Spy成功启动。
用鼠标点选File->Close,弹出如下界面:
RCP:利用actionSet在菜单(menu)里添加内容
可知菜单ID为file。
 
用鼠标点选File->New->Project,弹出如下界面:
 
RCP:利用actionSet在菜单(menu)里添加内容
 
可知,子菜单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>

效果如图所示:

RCP:利用actionSet在菜单(menu)里添加内容

RCP:利用actionSet在菜单(menu)里添加内容的更多相关文章

  1. 解决android4&period;0系统中菜单&lpar;Menu&rpar;添加Icon无效问题

    本文转载自: http://blog.csdn.net/stevenhu_223/article/details/9705173 在Android4.0系统中,创建菜单Menu,通过setIcon方法 ...

  2. odoo视图 &OpenCurlyDoubleQuote;动作” 里添加菜单按钮:案例

    ####################################################################################odoo中常用方法,在动作里面添 ...

  3. yii2 rbac权限控制之菜单menu详细教程

    作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  4. yii2权限控制rbac之菜单menu最详细教程

    前面我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充. ...

  5. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  6. iOS 向模拟器里添加照片

    iOS 向模拟器里添加照片 模拟器里Photos最开始时是没有照片的,有时我们做Demo时需要Photos里面的照片做测试,这时就需要把Mac上的照片导入到模拟器里.步骤如下: 1,打开模拟器 2,选 ...

  7. 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  8. 如何在settings里的休眠模式里添加永不休眠

    最近项目需求里需要在设置菜单的休眠模式里添加一项永不休眠选择项.针对MTK平台的修改方式有如下几步骤.(其他平台和android原生系统的修改方式类似,只是android原生系统修改永不休眠需要通过设 ...

  9. 【转】Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    cshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages/ ...

随机推荐

  1. Python学习---除法

    python有两种除法,普通除法 a/b ,不论a,b精度 得到的都是浮点数. 4/2 = 2.0    3/5 = 0.6 floor除法,a//b , 得到一个舍弃小数位的整数结果,所以结果永远是 ...

  2. Web程序的桌面提醒

    做web开发常会面对的一个问题是,浏览器最小化的时候如何才能向用户发送通知.解决办法大概有三种:让用户有事没事儿搂两眼页面:开发一个桌面客户端:Html5的Notification API. 目前没看 ...

  3. iOS 顺传

    ios 顺传一层的话,直接用属性 改变里面的值 顺传穿两到三层的话 使用KVO // 设置item - (void)setItem:(UITabBarItem *)item { _item = ite ...

  4. jquery中对小数进行取整、四舍五入的方法

    再和大家分享一个对多位小数进行四舍五入的方法: <script language="javascript"> //对多位小数进行四舍五入 //num是要处理的数字 v为 ...

  5. STM32的can现场总线实验心得

    最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的.开始时,知道自己是新手,只知道can总线跟串行通信,485通信,I2C通信一样都是用 ...

  6. iframe 处理

    import java.io.File; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org ...

  7. MYSQL用户权限管理学习笔记

    MYSQL 用户管理 1.权限表 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: (1)       超级管理员用户(root),拥有全部权限 (2)       普通用户,由roo ...

  8. c语言typedef与define的相同

    #include <stdio.h> #include <stdlib.h> #define INT int typedef short SHORT;//看此处有没有分号 // ...

  9. C&num; - Environment类,获取桌面的路径

    private void button1_Click(object sender, EventArgs e) { string Path = Environment.GetFolderPath(Env ...

  10. bootstrap栅栏系统css中的col-xs-&ast;、col-sm-&ast;、col-md-&ast; 的意义以及 bootstrap一个标签中,同时有 col-xs &comma; col-sm &comma; col-md &comma; col-lg的理解

    摘要: bootstrap栅栏系统css中的col-xs-*.col-sm-*.col-md-* 的意义: .col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 ( ...