昨天一哥们碰到一个问题,他用gmf做的编辑器有个connection,这个connection很特殊,它的source和target都是connection,这个connection删除的时候只是不显示了,
下次打开diagram的时候还是存在的,经观察,点击右键的时候有两个删除选项分别是:
delete From Diagram(别的点完之后这个是disable的)和delete From Model。而点delete的时候默认执行的是delete From Diagram,
这样不会删除对应模型,也就导致了上面的问题。我先是想办法让与delete From Diagram对应的Action不被加到右键
菜单上(如果能让它的etCommand()方法返回null问题也解决了,但是没做到。。。),用如下扩展点
<extension point="org.eclipse.gmf.runtime.common.ui.services.action.contributionItemProviders">
<?gmfgen generated="true"?>
<contributionItemProvider
class="org.eclipse.gmf.runtime.diagram.ui.providers.DiagramContributionItemProvider"
checkPluginLoaded="false">
<Priority name="Low"/>
<popupContribution class="org.eclipse.gmf.runtime.diagram.ui.providers.DiagramContextMenuProvider">
<popupStructuredContributionCriteria objectClass="kmPkg.diagram.edit.parts.KAssociationBetweenVariablesEditPart"/>
<popupPredefinedItem id="deleteFromDiagramAction" remove="true"/>
</popupContribution>
</contributionItemProvider>
</extension>
发现那个菜单是没了,但问题依然没有解决。于是继续debug,看看别的按delete的时候和这个按delete的时候到底有什么区别,经过了一夜加一个早上的奋战终于发现,原因出在,别的Connection删除的时候ConnectionEditPolicy#shouldDeleteSemantic()返回的是true,也就是删除对应模型的意思,而这个删除的时候
上面的方法返回false。。。。
于是在Connection对应的EditPart上重新安装如下policy
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicy.CONNECTION_ROLE,
new MyConnectionEditPolicy());
//install other policy
}
MyConnectionEditPolicy 的代码如下,让shouldDeleteSemantic返回true
import org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies.ConnectionEditPolicy;
public class MyConnectionEditPolicy extends ConnectionEditPolicy{
@Override
protected boolean shouldDeleteSemantic() {
return true;
}
}
然后运行发现删除(按delete)的时候弹出个对话框,意思就是这样做会连模型也删除,如果只想从diagram中删除,请点右键。。。
选择yes,然后把复选框勾上,下次就不会看到这个对话框了。
一切恢复正常:)
如果想知道具体原因,请看DeleteFromDiagramAction#isCanonical方法和ConnectionEditPolicy#shouldDeleteSemantic()方法
注:如果不想从菜单中去掉delete From Diagram,不用扩展那个扩展点
分享到:
相关推荐
关于eclipse gmf插件的相关插件工具
15 分钟学会 Eclipse GMF 15 分钟学会 Eclipse GMF
GMF 学习资料 GMF中的小知识点、GMF 教程 Mindmap等
org.eclipse.gmf.rar org.eclipse.gmf.rar org.eclipse.gmf.rarorg.eclipse.gmf.rar
现在GMF的资源比较稀缺, 我提供了一个基于GMF的图形化数据建模的例子,供大家参考,既可以作为自己数据库设计的轻量级工具,也可以作为学习GMF的参考
GMF Tutorial中文版——一套入门教程
GMF 教程 Mindmap,本文是跟着英文教程做了一遍,并简单翻译、截图,做了一些补充,总算是实现了原文的效果。
GMF实例解析.pdf
详细描述GMF的操作过程,GMF 开发文档。
eclipse 3.2下的gef,ve,gmf,经过自己的收集,把三个都收集齐了,一并传上,希望对大家有用
综述了图形建模框架GMF,对于认识GMF,以及演说报告都有参考价值。
GMF实例解析的pdf版,有需要的可以下载回去看
GMF入门资料,适合初学者学习,很经典
GMF开发FSM的完整的例子,非常详细。教你如何开发自己的建模工具
主要是对自己做的项目的一些总结,包括如何自动添加图元、删除图元,建立连线,获得编辑器的EditPart,不打开编辑器,获取编辑器的EditPart,属性居中,自动保存图片等功能的实现。另外还有一些参考资料
使用Eclipse GMF进行可视化建模的实战资料,包含概念介绍和示例代码。
我对于GMF Tourial(一)的中文翻译,有需要的可一下载回去看
eclipse 图形化开发 插件 gmf
GEF Example source code 博文链接:https://jamesblog.iteye.com/blog/148279
GMF