快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
实 现撤消/重做的功能,一般Action执行的时候要建立一个Command,将后者加入CommandStack 里,然后执行这个Command对象,而不是直接把执行代码写在Action的run()方法里。下面是 我们的设置优先级PriorityAction的部分代码,该类继承自SelectionAction:

public void run() {    execute(createCommand()); } private Command createCommand() {    List objects = getSelectedObjects();    if (objects.isEmpty())      return null;    for (Iterator iter = objects.iterator(); iter.hasNext();) {      Object obj = iter.next();      if ((!(obj instanceof NodePart)) && (!(obj instanceof NodeTreeEditPart)))        return null;    }    CompoundCommand compoundCmd = new CompoundCommand (GEFMessages.DeleteAction_ActionDeleteCommandName);    for (int i = 0; i < objects.size(); i++) {      EditPart object = (EditPart) objects.get(i);      ChangePriorityCommand cmd = new ChangePriorityCommand();      cmd.setNode((Node) object.getModel());      cmd.setNewPriority(priority);      compoundCmd.add(cmd);    }    return compoundCmd; } protected boolean calculateEnabled() {    Command cmd = createCommand();    if (cmd == null)      return false;    return cmd.canExecute(); }

因为允许用户一次对多个选中的节点设置优先级,所以在这个Action里我们创建了多个 Command对象,并把它们加到一个CompoundCommand对象里,好处是在撤消/重做的时候也可以 一次性完成,而不是一个节点一个节点的来。

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

时间:2011-04-19 cnblogs bjzhanghao

上下文菜单

在GEF里实现右键弹出的上下文菜单是很方便的,只要写一个继承org.eclipse.gef. ContextMenuProvider的自定义类,在它的buildContextMenu()方法里编写添加菜单项的代码 ,然后在编辑器里调用GraphicalViewer. SetContextMenu()即可。GEF为我们预先定义了一 些菜单组(Group)用来区分不同用途的菜单项,每个组在外观上表现为一条分隔线,例如有 UNDO组、COPY组和PRINT组等等。如果你的菜单项不适合放在任何一个组中,可以放在OTHERS 组里,当然如果你的菜单项很多,也可以定义新的组用来分类。

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

图3 上下文菜单

假设我们要实现如上图所示的上下文菜单,并且已经创建并在ActionRegistry里了这些 Action(在Editor的createActions()方法里完成),ContextMenuProvider应该像下面这样 写:

public class CbmEditorContextMenuProvider extends ContextMenuProvider {    private ActionRegistry actionRegistry;    public CbmEditorContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {      super(viewer);      actionRegistry = registry;    }    public void buildContextMenu(IMenuManager menu) {      // Add standard action groups to the menu      GEFActionConstants.addStandardActionGroups(menu);      // Add actions to the menu      menu.appendToGroup(GEFActionConstants.GROUP_UNDO,getAction (ActionFactory.UNDO.getId()));      menu.appendToGroup(GEFActionConstants.GROUP_UNDO, getAction (ActionFactory.REDO.getId()));      menu.appendToGroup(GEFActionConstants.GROUP_EDIT, getAction (ActionFactory.DELETE.getId()));      menu.appendToGroup(GEFActionConstants.GROUP_REST

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号