摘要: 在GMF中,有时我们需要programmatically删除节点或连线,该如何实现呢? 由于GMF框架用的是MVC模式,所以在删除节点或连线的时候,需要删除该节点或连线对应的view和model。有了这个概念后,删除节点和连线便简单了。 先介绍删除连线的方法。 首先,我们得获得org.eclipse.gmf.runtime.notation.Edge类型的连线对象,然后,从此对象中获得它的model,接着删除Edge类型的连线对象,最后从diagram的model中删除此对象的model。这样讲起来有点抽象,大家可以参考以下代码:TransactionalEditingDom... 阅读全文
posted @ 2012-07-15 16:48 supermmao 阅读(1525) 评论(0) 推荐(0) 编辑
摘要: 之前搜到一篇《GEF 给PropertySheetPage设置属性排序功能》的博客,如何将这种方法移植到GMF中呢?可以如下做: 首先,新建一个类MyPropertySheetPage,继承至PropertySheetPage。 public class MyPropertySheetPage extends PropertySheetPage { @Override public void createControl(Composite parent) { // 设置一个使用描述来排序的Sorter PropertySheetSo... 阅读全文
posted @ 2012-06-29 09:50 supermmao 阅读(1096) 评论(0) 推荐(0) 编辑
摘要: 图1 ecore模型图2 实例 在GMF中,将某个连接线(如上图连线1)指向某个节点(如图2 b节点)后,此节点b的输入便是连线1,但GMF默认不会自动给此节点b的incomings赋值(为连线1)。同理,也不会对此节点的输出(outcomings)赋值(为连线2)。如何解决这个问题呢? 很简单,这么做就可以了: 找到你的连线的XXXCreateCommand类,在doExecuteWithResult方法里,添加如下两句: // 设置源节点的输出为新的边,目标节点的输入为新的边 getSource().getOutcomings().add(newElement);... 阅读全文
posted @ 2012-06-14 17:44 supermmao 阅读(803) 评论(0) 推荐(0) 编辑
摘要: 在GMF中,有个很烦人的东西,就是delete from diagram。delete from diagram的意思是只在视图中删除,而并不删除它对应的model。因此,当你delete from diagram后,图元在图中暂时消失了,但再次打开此图时,这个图元仍然存在。 怎么解决禁止delete from diagram的问题呢? 首先:修改DiagramEditorContextMenuProvider的 public void buildContextMenu(...) { ... public void run() { ... // 加上此... 阅读全文
posted @ 2012-06-13 16:47 supermmao 阅读(733) 评论(0) 推荐(0) 编辑
摘要: 忘记将自动画连接线的代码贴出来了,特此补一补: private void drawLink(ModuleEditPart sourceModuleEditPart, ModuleEditPart targetModuleEditPart) { IElementType type= ModuleElementTypes.Link_3001; // 连接线类型 CreateConnectionViewAndElementRequest createConnectionRequest = new CreateConnectionViewAndElemen... 阅读全文
posted @ 2012-06-08 11:32 supermmao 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 之前的博客介绍了将当前editor保存为图片的方法。但由于项目里的需求有变,需要在不打开editor的情况下,通过图文件保存图片。由于保存图片的操作必须获得diagram的editpart才能保存,而目前已知的获取editpart的方法只有先打开editor才能获得。那还有其他办法吗? 答案是有的。GMF保存图片对应CopyToImageUtil这个类,这个类里有个方法:copyToImage(Diagramdiagram,IPathdestination,ImageFileFormatformat,IProgressMonitormonitor,PreferencesHint... 阅读全文
posted @ 2012-05-14 22:00 supermmao 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 在我的项目中,有这样一个需求:要求在project explorer(CNF视图)中显示一个非workspace空间中的文件(即这些文件放在一个缓存里)。我们可以通过创建链接将文件给链接到当前工程中。但如果在这个链接文件的父目录里新增加了一些文件,如何将这些文件给自动挂接到project explorer中呢? 我们可以这样创建一个链接文件夹,然后文件夹下面的文件便可以在project explorer中显示了:public Object[] getChildren(Object parentElement) { IPath path = new Path(parentFolderString 阅读全文
posted @ 2012-04-13 18:36 supermmao 阅读(854) 评论(0) 推荐(0) 编辑
摘要: GMF有提供保存图片的功能,但有时我们想自己在其他地方添加菜单,然后调用GMF的保存图片的代码,实现保存图片的功能。可这样做: CopyToImageDialog dialog = new CopyToImageDialog(Display.getCurrent().getActiveShell(),path, fileName); if (dialog.open() == CopyToImageDialog.CANCEL) { return; } if (!overwriteExisting()) { return; } ... 阅读全文
posted @ 2012-03-22 21:41 supermmao 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 在前面的博客中,我介绍了一些如何获得activie editor里面图元属性的方法。 但如果我们要进行一些比较高级的定制,比如需要分析每个图与每个图之间、或者每个图中的图元与另一个图中的图元有什么关系,则这时我们便会遇到一个麻烦:如何不打开editor而通过此editor对应的文件得到此editor的模型对象(可以通过此模型对象获得diagram的属性,比如图的name,author,drawDate),或者得到此editor里面图元的模型对象? 在我的项目里便遇到这样的问题。解决办法如下: URI fileUri = URI.createFileURI(modelF... 阅读全文
posted @ 2012-02-29 18:17 supermmao 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 童鞋们,要获得以下效果,该如何做呢? 按如下步骤即可: 看图中的Grid Layout 1以及Grid Layout Data true,用到了网格布局的方法。 第一个Grid Layout Data true的属性如下设置: 第二个Grid Layout Data true的属性设置如下: 然后重新生成diagram editor,运行程序后,便出现如上图形的效果,很简单吧? 阅读全文
posted @ 2012-02-26 22:42 supermmao 阅读(158) 评论(0) 推荐(0) 编辑