zoukankan      html  css  js  c++  java
  • 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>

    效果如图所示:

  • 相关阅读:
    Python 解决: from pip import main ImportError: cannot import name 'main'
    tensorflow学习笔记
    python多线程、多进程相关知识
    灰度发布相关
    自定义flume的hbase sink 的序列化程序
    pyspark数据准备
    利用pipeline批量插入数据到redis
    CentOS Linux系统下更改Apache默认网站目录
    更改nginx网站根目录
    chkconfig用法
  • 原文地址:https://www.cnblogs.com/anrainie/p/3586454.html
Copyright © 2011-2022 走看看