要让GMF编辑器中的图元更加生动,可以通过在gmfgraph中增加一些元素(比如前景色)来定制图元的显示形式,但是有些特征(比如字体)无法仅仅通过gmfgraph来完成,这就需要我们修改GMF生成的Diagram Code来达到所需要的效果。如下图所示:
1.前景色:
图中紫色的椭圆代表Method类型的元素,起前景色可以通过gmfgraph来定制:
2.线条宽度(2),线条种类(LINE_SOLID):
也可以通过修改MethodEditPart中的内部类MethodFigure的构造函数来完成1和2两个特征的定制:
public
MethodFigure()
{
this.setFill(true);
this.setFillXOR(false);
this.setOutline(true);
this.setOutlineXOR(false);
this.setLineWidth(2);
this.setLineStyle(Graphics.LINE_SOLID);
this.setForegroundColor(METHODFIGURE_FORE);
createContents();
}
this.setFill(true);
this.setFillXOR(false);
this.setOutline(true);
this.setOutlineXOR(false);
this.setLineWidth(2);
this.setLineStyle(Graphics.LINE_SOLID);
this.setForegroundColor(METHODFIGURE_FORE);
createContents();
}
3.字体: 要通过修改MethodNameEditPart的setLabelTextHelper方法来完成。
protected
void
setLabelTextHelper(IFigure figure, String text)
{
if (figure instanceof WrapLabel) {
((WrapLabel) figure).setText(text);
FontData fd = new FontData();
fd.setStyle(SWT.BOLD);
((WrapLabel) figure).setFont(new Font(null, fd));
} else {
((Label) figure).setText(text);
}
}
if (figure instanceof WrapLabel) {
((WrapLabel) figure).setText(text);
FontData fd = new FontData();
fd.setStyle(SWT.BOLD);
((WrapLabel) figure).setFont(new Font(null, fd));
} else {
((Label) figure).setText(text);
}
}
4.结点默认大小:由于图中两个黄色的“BEGINING"和"ENDING"结点中的文字不需要修改,因此这两个结点的默认大小可以根据字符串的宽度和高度来设置(GMF默认的高度和宽度是40,40)。修改BeginingEditPart中的createNodePlate方法(注:由于编辑器中的结点Shape是放在Plate上,Plate再放在画布上的,因此Plate的大小决定了编辑器中图元的大小,修改Shape没用)。
protected
NodeFigure createNodePlate()
{
DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(getMapMode()
.DPtoLP(EventConstant.BEGINING_DEFAULT_WIDTH), getMapMode().DPtoLP(EventConstant.BEGINING_DEFAULT_HEIGHT));
return result;
}
DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(getMapMode()
.DPtoLP(EventConstant.BEGINING_DEFAULT_WIDTH), getMapMode().DPtoLP(EventConstant.BEGINING_DEFAULT_HEIGHT));
return result;
}