对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
来源:oschina
链接:https://my.oschina.net/u/164134/blog/113327