ActionSet/PopupMenu

 今天搞Eclipse的ActionSet, 搞得我晕头转向....
至今不能明白的问题是, 我在ActionSet里面声明的Action居然在程序中无法拿到, 郁闷无比.
由于我的需求是Windows的菜单中的某些菜单会在NavigatorView中被Popup重用, 因此在写View的代码的时候需要用代码找到这些Action, 但是十分遗憾, 最后我也没有成功.

于是找到替代的方法, 不过很麻烦.

有个插入点是org.eclipse.ui.popupMenus, 这个插入点可以插入到View, Editor中去, 或者还有一种用法就是指定某种Object的Popup, 但是这个我还没有用到. 据说是比如选择IProject(我用JDT做例子来讲), 可以弹出配置的菜单. 选择*.xml, 又可以弹出另外的配置菜单. 诸如此类.

还是说说插入到View/Editor的弹出菜单吧. 先前我一直认为适合Perspective的ActionSet是重用的, 但是根据今天的研究发现可能不是这样的. 举个例子, 大家都可以看到File菜单里面的Refresh菜单和ResourceNavigator里面的Refresh菜单, 仔细看有点不一样的, 就是File菜单里面的Refresh没有图标! 而如果是一个Action的话, 应该是一致的. 同样的情况可以在Rename和Move中发现, Accelator和Mnomenic都不一样, 如果是同一个Action, 这种情况肯定是不可能的.

说了这么多, 还是写写插入点的使用吧.
在org.eclipse.ui.popupMenus中添加一个View*****, 后面的单词忘了....E文不好. id不说了, 唯一标识. targetID是你要将弹出菜单插入到的View或者editor的id. 然后在这个东西下面加menu/action, 另外有个visibility的东西, 属性挺多, 可以看看eclipse的帮助. 主要就是说这个菜单什么时候出现或者不出现之类的事情. 加menu/aciton的方式和actionSet基本一致. 不同之处在于没有toolbarpath, 这个很自然, 弹出哪里还有工具栏? 另外menubarpath也有一些小区别. actionset中menu没有menupath就是顶级菜单. 而这里没有就是第一个popup了. 如果你要在popup上显示separator, 那么设置path不同就行了, 而不同于actionSet中需要添加separator. 因为windows menubar一般不用separator. 子菜单的写法和actionSet完全一致, 不说了.

另外要注意的就是在View的代码里面要做一些相应的处理, 如下:
public   void  createPartControl(Composite parent) {
    MenuManager manager 
=   new  MenuManager( " #Popup " );  // popup随便什么字符串, 不知道有没有什么关系.
    Menu menu  =  manager.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    getSite().registerContextMenu(manager, viewer);
}
这些代码非常重要, 不写你的popup出不来....

附一段XML
    < extension
         
point ="org.eclipse.ui.popupMenus" >
      
< viewerContribution
            
id ="rcp.viewerContribution1"
            targetID
="rcp.viewerContribution1" >
         
< menu
               
id ="rcp.menu1"
               label
="rcp.menu1"
               path
="abc" >
            
< separator  name ="rcp.separator1" />
         
</ menu >
         
< action
               
class ="rcp.Action1"
               id
="rcp.action1"
               label
="rcp.action1"
               menubarPath
="rcp.menu1/rcp.separator1" />
         
< action
               
class ="rcp.Action2"
               id
="rcp.action2"
               label
="rcp.action2"
               menubarPath
="def" />
      
</ viewerContribution >
   
</ extension >

结构就是rcp.menu1下有个子菜单rcp.action1
rcp.action2和rcp.menu1在同一级别, 中间有个Separator.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值