GMF 双击图形打开新窗口编辑

在GMF里面实现图形化的编辑时经常会遇到这样的需求就是,双击一个图形后打开一个新窗口编辑图形。在GMF里叫Diagram Partitioning图形分区嵌套实现。这里有一篇英文文章可以参考,其中讲述了两种场景,但一般最简单的就可以了,所以我这里只讲解简单的实现。wiki上得文章 Diagram Partitioning

首先要有ecore模型支持才可以,在你的ecore里给整幅图的根节点添加一个自身连接,命名为children。然后就可以在这上面做点文章了。

我的ecore模型图如下


然后在gmfgraph文件里定义图形的形状,gmfgraph文件只与图形的在界面的展示形状有关,我定义的图形比较简单就是一个矩形里面是文字。如图所示:


然后要在你的gmftool文件里定义需要的工具,这个比较简单就不多说了。在gmfmap文件里定义映射关系,gmfmap将你的ecore模型、图形和工具联系起来。具体的如图所示:mapping节点下建立新的Top Node Reference节点指定containmentFigure值,该值一般是指ecore模型中和Node节点有包含关系的节点。然后在该节点下建立子节点NodeMapping指定具体的ecore模型图形和工具,最关键的一步是设置杂项==>Related Diagrams点击右边的选择框把唯一的一个值添加进去即可。如图:


最后要修改的地方是gmfgen文件,打开这个文件你会看到geneditor根节点然后再到gen Diagram子节点打开它然后找到你刚才定义mapping时定义的那个以ecore模型类名+EditPart命名的节点(一般这个名字会以2结尾我这里做了处理)打开它定位到openDiagramBehaviour节点然后设置Editor ID属性为:GenEditorView里面的ID属性我的为pipesimulator.diagram.part.PipesimulatorDiagramEditorID,并设置Diagram Kind属性为:geneditor根节点下的model ID:Pipesimulator(这是我的根节点下的model ID)这两步很重要。如果设错了就不起作用了。如图所示:


当然你也可以通过代码来更改这两个属性值,但要花一番功夫才能找到,找到editpolice项目下面的OpenDiagramEditorPolice文件修改里面的方法如下即可:

/**
         * @generated NOT
         */
        protected String getDiagramKind() {
            return PipeComponentEditPart.MODEL_ID;
        }

        /**
         * @generated NOT
         */
        protected String getEditorID() {
            return PipesimulatorDiagramEditor.ID;
        }。

然后生成代码运行实例就可以看到你的效果了,如图所示这是我的结果图:




评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值