GMF 教程 Mindmap 2

 ̄綄美尐妖づ 提交于 2019-12-10 17:53:03

对Step1做补充操作,主要增加的功能:

为Topic结点添加划分(compartment),实现结点嵌套,使得可以在结点上半部显示结点名称,在下半部可以添加新的内容(这里是加入Thread子结点)

Graphical Definition

1、打开mindmap.gmfgraph,展开,右击Figure Gallery Default,选择New Child——Figure Descriptor,名称为RoundedTopicFigure。再右Figure Descriptor RoundedTopicFigure,选择New Child——Rounded Rectangle,名称也是RoundedTopicFigure,并将Corner Width和Height属性都设置成12。

2、设置默认的边框颜色:

右击Rounded Rectangle RoundedTopicFigure,选择New Child——Foreground Color RGB Color,设置属性为R=220,G=220,B=250,如下图:

3、后面会重用TopicFigure矩形,作为sticky结点的图形。找到Figure Descriptor TopicFigure结点,将它命名为StickyNoteFigure,添加背景颜色为R=250,G=250,B=190,并设置Label名称为StickyNoteNameFigure:

4、右击Rounded Rectangle RoundedTopicFigure,选择New Child——Label,设置名称为TopicNameFigure。再右击Rounded Rectangle RoundedTopicFigure,选择New Slibing——Child Accessor,设置Accessor属性为getFigureTopicNameFigure,Figure选择Label TopicNameFigure:

5、右击结点Canvas mindmap,选择New Child——Nodes Node,属性Name为Thread,Figure选择Figure Descriptor StickyNoteFigure:

然后将Topic Node的Figure选择为Figure Descriptor RoundedTopicFigure:

6、再右击结点Canvas mindmap,选择New Child——Labels Diagram Label,Name属性为ThreadName,Accessor属性为Child Access getFigureStickyNoteNameFigure,Figure属性为Figure Descriptor StickyNoteFigure,Element Icon属性为true:

同时设置TopicName的属性:

7、由于我们想要在Topic结点的一个划分中嵌套discussion threads结点,右击Canvas,选择New Child——Compartment,属性设置:Name为ThreadCompartment,Figure为RoundedTopicFigure,Collapsible为true,Needs Title为false:

8、Thread结点本身也是有划分的,以包含一列thread条目。同7一样创建一个新的compartment,各属性设置如下图:

这样,Topic结点将会是包含划分的圆角矩形,划分中会包含子矩形,这些子矩形也有划分,不过其中放置的是简单的一列条目,显示为Label。

9、找到Rectangle StickyNoteFigure的Flow Layout,设置属性如下图:

10、为SticyNodeFigure添加一个子Rectangle,名称为ThreadItems,并为它添加一个Stack layout。然后为StickyNoteFigure Figure Descriptor添加一个Child Access,用来接受子Rectangle,设置其Figure属性为Rectangle ThreadItems:

11、为Figure Gallery添加一个新的Figure Descriptor,命名ThreadItemLabelFigure,然后为ThreadItemLabelFigure添加一个Label,名称也是ThreadItemLabelFigure:

12、为Canvas创建一个Diagram Label,名为ThreadItemLabel,设置Figure属性为ThreadItemLabelFigure:

最终的版本参考下图:

Tooling Definition

13、添加工具,用于创建Thread结点和ThreadItems。

打开mindmap.gmftool,复制粘贴Topic工具,重命名为Thread;再复制一个,重命名为ThreadItem:

Mapping Definition

14、打开mindmap.gmfmap。首先为Topic Node Mapping添加一个新的Compartment映射,并设置Compartment属性为ThreadCompartment:

15、为Node Mapping添加Child Reference,设置Containment Feature属性如下图:

16、为上一步添加的Child Reference添加Node Mapping,属性设置如下图:

17、为Thread Node mapping添加一个Feature Label Mapping,属性如下:

18、为Thread Node Mapping添加一个ThreadItemCompartment Mapping,设置Compartment属性为ThreadItemCompartment:

19、为Thread Node Mapping添加一个Child Reference,设置Compartment属性如下:

20、为上面新添加的Child Reference添加一个Node Mapping:

21、为上面的ThreadItem Node Mapping添加一个Feature Label Mapping:

最终的mindmap.gmfmap文件结构如下:

22、此时,重新生成mindmap.gmfgen文件和diagram代码(可以借助GMF Dashboard),运行,效果如下图:

代码:http://www.oschina.net/code/snippet_164134_19157

双子座@开源中国:http://my.oschina.net/plumsoft

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!