Eclipse GMF Tutorial中文例程(1-创建GMF图形编辑器)


    本例程所用的 Graphical Modeling Framework (GMF) SDK版本为GMF(2.1),JDK编译环境为JDK1.5,为了能看到.ecore模型的图形化显示效果,你还需要点击 这里去下载一个EMF图形插件EcoreTools. 这个例程,我们将以一个典型的GMF的使用场景mindmap为实例展开,Let's go!

1) 创建一个新的GMF工程

    建立一个“New GMF Project”(使用Ctrl+N快捷键探出的窗口里找到“Graphical Modeling Framework”),将其命名为“org.eclipse.gmf.examples.mindmap”,点完"finished"后,工程根目录下会自动建立一个名为“model”的新文件夹。下面我们将要产生的一系列图形文件都会放在这个model文件夹里。



2) 领域模型的定义(Domain Model Definition)

   领域模型的定义图形,如下图示:


    你可以点击 这里获得ecore模型文件mindmap.ecore及其 图形描述文件mindmap.ecorediag(其中.ecorediag文件只是为了方便我们通过EcoreTools来直接看到模型元素间的关系)。将这两个文件copy至model目录。这个图形较为复杂,但在Tutorial-1接下来的步骤中,我们只是使用其一部分model元素,其他的元素将会在后来的Tutorial中使用。本文余下的篇幅只是先要达到这样一种目的:能够创立多个Topic,Topic能够与SubTopic之间建立连接。
    进行下一步之前,先让我们打开GMF Dashboard视图,选择"Window->Show View->Other->General->GMF Dashboard>",可看到如下视图:



    仔细观察该视图,它实则是为我们提供了一个从一个ecore文件最终生成EMF/GMF各个模型文件的向导。选中视图中"Domain Model"项的Select链接,弹出“Domain Model”选择框,选中"mindmap.ecore",点击ok。这时候,我们会发现连向"Domain Model"的三个“Derive”项全部被点亮,这就为我们进行下一步做好了准备。

3)图形的定义(Graphical Definition)

    图形的定义模型将会用来定义画布上将要使用的图形元素。接着上一步,在GMF Dashboard视图上选择指向“Graphical Def Model”元素的“Derive”链接,便会启动“New GMFGraph Model”向导,向导已自动为我们填入了文件名mindmap.gmfgraph,点击下一步,选择对应Diagram Element的元素为Map,继续到“下一步”,点击Deselect All按钮后,再选择下图所示的元素:



    点击“Finish”,便可发现向导在model文件夹中创建的mindmap.gmfgraph文件。

Tip:在GMF中包含了很多以复用为目的的图形库。通过打开.gmfgraph文件后,对其根目录右键使用“load resource1…”并输入“platform:/plugin/org.eclipse.gmf.graphdef/models/basic.gmfgraph”作为资源URL,你就可以将这些图形库载入到你的*.gmfgraph模型(或*.gmfmap模型)中。其他可用的资源还包括classDiagram.gmfgraph和stateDiagram.gmfgraph。

4)工具定义(Tooling Definition)

    工具定义模型被用来定义工具板,创建工具(creation tools),动作(actions)等等。工具定义的过程与第三步类似,在GMF Dashboard视图上选择指向“Tooling Def Model”元素的“Derive”链接,启动“New GMF Tool Model”向导,到下一步,仍然选择Map为对应的Diagram Element,再到下一步,点击Deselect All按钮后,再选择下图所示的元素:



    点击Finish之后,打开mindmap.gmfTool文件,我们可以看到在一个Palette中存在着一个顶层“工具注册表(Tool Registry)”元素。Palette包含一个带有创建工具元素(Creation Tool element)的工具组,这些创建工具元素是专门为Topic节点和那些用向导定义的subtopic元素的链接而设立的。我们将会在未来对他们进行一些小改动,但是现在,我们将接受默认值并且将注意力转移到映射定义。你可以浏览一下这个模型并实地查看一下它们的各个属性来熟悉一下工具定义。

5) 映射定义(Mapping Definition)

    映射定义模型让我们可以将我们目前所遇到的3个模型:领域模型,图形定义模型以及工具定义模型绑定在一起。在GMF的开发过程中,这是一个关键的模型。它将会被用来作为一个转换(transfomation)步骤的输入,这个转换步骤将会产生最终的模型—生成模型(generation model)。
    切换到GMF Dashboard视图上,选择"Combine"链接,弹出“new GMFMap model”向导,名称保持mindmap.gmfmap不变。下一步,对应mindmap的package选择Map类,再一路默认到下图中的这一页(要达到和图形中同样的效果,需要使用Remove按钮清除掉一些Nodes和Links):



    点击Finish之后,打开mindmap.gmfmap文件,可以看到:选择Canvas Mapping元素,在该节点的Properties视图上可以看到Map映射类被Canvas所描述。再选择LinkMapping节点,发现TopicSubtopicsLink所描述的连接(在mindmap.gmfgraph文件中的节点Connection TopicSubTopic)被映射到Topic类的“EReferece subtoptics”特性上去了,并且使用TopicSubtopics创建工具来创建的 (如果生成的.gmfmap文件中该项的创建工具没有指向TopicSubtopics,需要手动选中TopicSubtopics)
    现在来看节点映射,我们看到我们的图形节点被映射到我们的图形定义的ToicNode上,与此同时,该图形节点的相应的领域标签元素被映射到我们的Topic类上,Topic创建工具也在这个映射中被指定。
    在节点映射之上你会发现一个顶级结点引用。其包含特性被设置成我们的映射类的“EReference rootTopics”特性。因此,一旦新的Topic节点被加入到图表中,我们的领域Topic的实例也会被加入到我们的映射类的rootTopics所包含的引用中去。
    为了使Topic节点标签显示Topic的“name”属性的内容,需要在“Node Mapping<Topic/Topic>”节点右键“New Child->Feature Mapping Label”,创建一新节点,我们需要作出如下更改:Featrues:name String; Diagram Label:Diagram Label TopicName.
最终的结果,应如下图所示:



Tip:在这个阶段,当定义映射时,也就是在GMF作出更完善的映射和确认之前,选择合适的元素是很重要的。如果要确认你选的那个元素是否合适的话,可以在一个文本编辑器中打开映射定义(*.gmfmap)文件,仔细察看一下。

6)代码生成(Code Generation)

    到现在为止,最小图形元素与影射已经被定义完成,接下来我们就可以生成所需的代码来测试我们到目前为止的工作情况了。为了测试需要,我们会首先建立一个与EMF的genmodel相类似的生成器模型(*.gmfgen)以便于为代码生成设置对应的属性。为了做到这一点,如下所示,请右键单击mindmap.gmfmap文件,选择“Create generator model…”。操作成功之后,保留缺省命名“mindmap.gmfgen”。
    我们就可以检查生成器模型来深入了解它到底包含了哪些内容。目前我们将会保留所有的缺省值,右键单击mindmap.gmfgen文件并选择“Generate diagram code”来让代码生成过程执行起来。如果一切顺利的话,我们将会看到一个“Code generation completed successully”信息对话框。这时你会发现一个新的org.eclipse.gmf.examples.mindmap.diagram插件已经出现在你的工作空间中,这个就是GMF生成的图形操作器的代码。
Tip:如果要使org.eclipse.gmf.examples.mindmap.diagram插件能够编译通过,需要先生成EMF的代码,这部分内容暂不在这里讨论。

7)运行测试

    现在,我们已经生成了我们的图形操作所需的插件,启动一个新的runtime工作空间测试下代码,很激动吧!
在运行空间中,建立一个空的工程,并调用New…对话框。在“Examples”下你会发现一个的新的Mindmap Diagram项。建立.mindmap_diagram文件后,图形操作界面如下所示:

Tip :如果你想从图形标签上移除图标,请将“Diagram Label TopicNameLabel”元素(在你的mindmap.gmfgraph文件中)的“Element Icon”属性设置为false。该属性默认情况下为true。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值