快速业务通道

[Eclipse]GEF入门系列(六、添加菜单和工具条) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
,对于已有的Retarget Actions,我们应该在 declareGlobalActionKeys()方法里调用addGlobalActionKey()方法来声明,在一个编辑器被 激活的时候,与globalActionKeys里的那些ID具有相同ID值的(具有实际功能的)Action将 被联系到该ID对应的Retarget Action,因此就不需要显式的去调用 setGlobalActionHandler()方法了,只要保证二者的ID相同即可实现映射。

GEF已经内置了撤消/重做和删除这三个操作的Retarget Action(因为太常用了),它们 的ID分别是IWorkbenchActionConstants.UNDO、REDO和DELETE,所以没有什么问题。而设置 优先级这个Action没有语义相近的现成Retarget Action可用,所以我们自己要先定义一个 PriorityRetargetAction,内容如下(没有经过国际化处理):

public class PriorityRetargetAction extends LabelRetargetAction{    public PriorityRetargetAction(int priority) {      super(null,null);      switch (priority) {      case IConstants.PRIORITY_HIGH:        setId(IConstants.ACTION_MARK_PRIORITY_HIGH);        setText("High Priority");        break;      case IConstants.PRIORITY_MEDIUM:        setId(IConstants.ACTION_MARK_PRIORITY_MEDIUM);        setText("Medium Priority");        break;      case IConstants.PRIORITY_LOW:        setId(IConstants.ACTION_MARK_PRIORITY_LOW);        setText("Low Priority");        break;      default:        break;      }    } }

接下来要在编辑器(CbmEditor)的createActions()里建立具有实际功能的Actions,它 们应该是SelectionAction(GEF提供)的子类,因为我们需要得到当前选中的节点。稍后将 给出PriorityAction的代码,编辑器的createActions()方法的代码如下所示:

protected void createActions() { super.createActions();    //高优先级    IAction action=new PriorityAction(this, IConstants.PRIORITY_HIGH);    action.setId(IConstants.ACTION_MARK_PRIORITY_HIGH);    getActionRegistry().registerAction(action);    getSelectionActions().add(action.getId());    //中等优先级    action=new PriorityAction(this, IConstants.PRIORITY_MEDIUM);    action.setId(IConstants.ACTION_MARK_PRIORITY_MEDIUM);    getActionRegistry().registerAction(action);    getSelectionActions().add(action.getId());    //低优先级    action=new PriorityAction(this, IConstants.PRIORITY_LOW);    action.setId(IConstants.ACTION_MARK_PRIORITY_LOW);    getActionRegistry().registerAction(action);    getSelectionActions().add(action.getId()); }

[Eclipse]GEF入门系列(六、添加菜单和工具条)(4)

时间:2011-04-19 cnblogs bjzhanghao

请再次注意在这个方法里每个Action的id都与前面创建的Retarget Action的ID对应,否 则将无法对应到主菜单条和主工具条中的Retarget Actions。你可能已经发现了,这里我们 只创建了设置优先级的三个Action,而没有建立负责撤消/重做和删除的Action。其实GEF在 这个类的父类(GraphicalEditor)里已经创建了这些常用Action,包括撤消/重做、全选、 保存、打印等,所以只要别忘记调用super.createActions()就可以了。

GEF提供的UNDO/REDO/DELETE等Action会根据当前选择的editpart(s)自动判断自己是否可 用,我们定义的Action则要自己在Action的calculateEnabled()方法里计算。另外,为了

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号