GMF中,删除节点和连线的另一种实现
2016-06-12 14:44
197 查看
问题 在GMF中,如果需要programmatically删除节点或连线,在google中我们很容易搜索到《GMF中,删除节点和连线的实现》一文(我并不确定这是原创作者的原始链接),很多人可能都使用这种实现。这是一种很好的实现,但有时候也有其缺点--除了需要删除View和Edge外,还需要删除model,在element对应于各种不同的model时,显然需要写大量if else来处理不同的model。
实现
我们可以有另一种实现,通过request和command来实现,以下代码删除某个节点上所有的连线
删除多个节点
这种方式的好处是,不必关心底层model的删除,因为每个element对应的command中,GMF已经帮我们实现了,更加简单,且符合开放-闭合原则。并且,undo和redo也已经实现。
参考
org.eclipse.gef.ui.actions.DeleteAction
Binhua Liu原创,写于2013/8/25。
实现
我们可以有另一种实现,通过request和command来实现,以下代码删除某个节点上所有的连线
public void deleteConnections(ShapeNodeEditPart editpart) { CompoundCommand compoundCommand =new CompoundCommand("delete all connections"); List connections = editpart.getTargetConnections(); connections.addAll(editpart.getSourceConnections()); GroupRequest deleteReq = new GroupRequest(RequestConstants.REQ_DELETE); deleteReq.setEditParts(connections); for (int i = 0; i < connections.size(); i++) { EditPart object = (EditPart) connections.get(i); Command deleteCmd = object.getCommand(deleteReq); if (deleteCmd != null) compoundCommand.add(deleteCmd); } editpart.getDiagramEditDomain().getDiagramCommandStack().execute(compoundCommand); }
删除多个节点
public void deleteNodes(List editparts) { CompoundCommand compoundCommand =new CompoundCommand("delete nodes"); GroupRequest deleteReq = new GroupRequest(RequestConstants.REQ_DELETE); deleteReq.setEditParts(editparts); for (int i = 0; i < editparts.size(); i++) { EditPart object = (EditPart) editparts.get(i); Command deleteCmd = object.getCommand(deleteReq); if (deleteCmd != null) compoundCommand.add(deleteCmd); } ((ShapeNodeEditPart)editparts.get(0)).getDiagramEditDomain().getDiagramCommandStack().execute(compoundCommand); }
这种方式的好处是,不必关心底层model的删除,因为每个element对应的command中,GMF已经帮我们实现了,更加简单,且符合开放-闭合原则。并且,undo和redo也已经实现。
参考
org.eclipse.gef.ui.actions.DeleteAction
Binhua Liu原创,写于2013/8/25。
相关文章推荐
- RCP:如何把Preferences中的项从一个类别移动到另一个类别
- 原创开源项目HierarchyViewer for iOS 2.1 Beta新功能介绍
- Spring -- org.springframework.aop.framework.ProxyFactoryBean
- 动态代理
- HierarchyViewer for iOS 2.0 BETA Introduction
- Visual Studio的Web Performance Test提取规则详解(3)
- 如何查看.so文件的依赖关系
- Visual Studio的Web Performance Test提取规则详解(2)
- Alljoyn 概述(1)
- ANDROID L——Material Design详解(UI控件)
- MySQL mysqldump数据导出详解
- .Net最佳实践3:使用性能计数器收集性能数据
- GMF:如何让网格显示在background,而不是foreground
- RCP:如何移除Search对话框中不需要的项
- Visual Studio进行Web性能测试- Part III
- 使用InputMethodManager 退出键盘最灵活的方式
- Visual Studio进行Web性能测试- Part II
- 深入分析JavaWeb 53 -- Spring中的AOP面向切面编程1
- 5、Hibernate入门5
- ReactNative Android和iOS的实现原理