这一部分主要实现的是:
替换图标
使用graphical definition添加一个混合图形
New Icons
1、替换图标。替换图标最简单的方法是将org.eclipse.gmf.examples.mindmap.edit\icons文件夹下的GIF的图像换了。
除了这个方法,比如想要替换Creation Tool Subtopic的默认图标,可以将准备好的图片Subtopic.gif放在/icons/full/obj16/Subtopic.gif目录下,然后在mindmap.gmftool中,删除Creation Tool Subtopic下的Default Image,为之添加Small Icon Bundle Image,设置属性如下:
2、重新生成mindmap.gmfgen文件。 在mindmap.gmfgen中,设置默认的向导和文件图标(或者直接替换掉org.eclipse.gmf.examples.mindmap.diagram工程下的\icons\obj16\ MindmapDiagramFile.gif),并将Diagram File Extension属性改成mmd:
3、重新生成diagram工程代码,运行,可以看到使用了新图标:
Composite Figures
现在要实现的是在上图中可以添加一个角色性的图形,用来代表资源。
Graphical Definition
4、打开mindmap.gmfgraph文件,向Figure Gallery中添加一个Figure Descriptor,并在Figure Descriptor中添加一个Rectangle,都命名为ResourceFigure。将它的Outline和Fill属性都设置为false。
5、接下来要给这Rectangle添加很多Child,这个Rectangle是作为这些所有Child的容器。例如,要给这Rectangle添加XY Layout和Ellipse作为头部,添加Polygon作为身体,还要设置大小。可以使用text editor方式打开mindmap.gmfgraph文件,将下面的代码加到文件中:
<descriptors name="ResourceFigure"> <actualFigure xsi:type="gmfgraph:Rectangle" name="ResourceFigure" outline="false" fill="false"> <layout xsi:type="gmfgraph:StackLayout" /> <children xsi:type="gmfgraph:Rectangle" name="Resource" outline="false" fill="false"> <layout xsi:type="gmfgraph:FlowLayout" vertical="true" forceSingleLine="true" minorAlignment="CENTER" majorSpacing="0" minorSpacing="0" /> <children xsi:type="gmfgraph:Ellipse" name="Head"> <foregroundColor xsi:type="gmfgraph:RGBColor" red="220" green="220" blue="250" /> <backgroundColor xsi:type="gmfgraph:RGBColor" red="230" green="230" blue="255" /> <size x="40" y="20" /> </children> <children xsi:type="gmfgraph:Polygon" name="Body"> <foregroundColor xsi:type="gmfgraph:RGBColor" red="220" green="220" blue="250" /> <backgroundColor xsi:type="gmfgraph:RGBColor" red="230" green="230" blue="255" /> <size x="40" y="36" /> <template x="23" /> <template x="23" y="5" /> <template x="39" y="5" /> <template x="39" y="10" /> <template x="23" y="10" /> <template x="23" y="17" /> <template x="39" y="29" /> <template x="39" y="34" /> <template x="20" y="23" /> <template x="1" y="34" /> <template x="1" y="29" /> <template x="17" y="17" /> <template x="17" y="10" /> <template x="1" y="10" /> <template x="1" y="5" /> <template x="17" y="5" /> <template x="17" /> <template x="23" /> </children> </children> </actualFigure> </descriptors>
6、在Canvas中添加一个Node,命名为Resource,并设置其Figure属性为ResourceFigure。
给Figure Gallery添加一个Figure Descriptor,并在Figure Descriptor中添加一个Label,都命名为BasicLabelFigure。
7、给 Canvas添加Diagram Label,命名为ResourceLabel,选择相应属性。注意这个Label不是作为图形的子元素,而是在它的外部,因此可以随意给它设置位置。
8、再给Rectangle ResourceFigure添加一个Label,设置Name属性为ResourceLabel,Text属性为Resource。
Tooling Definition
9、打开mindmap.gmftool,添加一个工具:
Mapping Definition
10、打开mindmap.gmfmap文件,为Mapping结点添加一个Top Node Reference,并选择Containment Feature属性为Map.resources:Resource。再向这个Top Node Reference添加一个Node Mapping,属性设置如下:
11、给这个Node Mapping添加一个Feature Label Mapping,属性如下图:
这样设置的目的是允许一个资源的标签显示为name [[email protected]]。
Generation
12、重新生成mindmap.gmfgen文件和Diagram代码,运行:
PS:目前只能达到这个效果,标签比较长的话只能显示在右下方,不知道怎么让Someone[[email protected]]标签显示在图形的正下方。
源码:http://www.oschina.net/code/snippet_164134_19278
双子座@开源中国:http://my.oschina.net/plumsoft