t; value="textitem"/>
</children>
</org.eclipse.ve.internal.cde.palette:Drawer>
该 palette.xmi 文件,需要 Visual Editor 知道其路径,因此需要在对“org.eclipse.ve.java.core.contributors”扩展点做如下扩展,使其能够读取到扩展的定义文件。
清单10:“org.eclipse.ve.java.core.contributors”扩展点
<extension
point="org.eclipse.ve.java.core.contributors">
<palette
container="developerworks.ve.example.textitem"
categories="palette.xmi"/>
</extension>
扩展Visual Editor的控件和属性(7)
时间:2011-03-06 IBM 王 浩
更改控件的创建参数
经过上述定制,控件已经显示于 Palette 中,拖拽控件至图形编辑区已经可以预览该控件和生成相应的代码,生成控件的 Java 代码为 new TextItem(parent, SWT.NONE)。也就是说,控件生成传入构造函数的参数,第二项 style 默认为 SWT.NONE。如果希望该控件构造函数传入的参数 style 为 SWT.BORDER 或其他样式,如何定制呢?
Visual Editor 提供了这种定制的支持,同样依赖于 XMI 文件,实现对构造函数默认参数的覆盖。本例中,BorderTextItem 是 TextItem 的另一种使用,不同点仅在于生成代码中,构造函数传入参数不同。BorderTextItem 传入的 style 参数为 SWT.BORDER,并将该样式赋给了该控件的文本框。覆盖该构造函数参数的 XMI 文件如下:
清单 11:BorderTextItem.xmi
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
xmlns:cdm="http:///org/eclipse/ve/internal/cdm.ecore"
xmlns:utility="http:///org/eclipse/ve/internal/cde/utility.ecore"
xmlns:org.eclipse.jem.internal.instantiation=
b"http:///org/eclipse/jem/internal/instantiation.ecore"
xmlns:java="java.xmi"
xmlns:textitem="java:/developerworks.ve.example.textitem">
<textitem:TextItem xmi:id="BorderTextItem_1">
<allocation xsi:type="org.eclipse.jem.internal.instantiation:ParseTreeAllocation">
<expression xsi:type="org.eclipse.jem.internal.instantiation:PTClassInstanceCreation"
type="developerworks.ve.example.textitem.TextItem">
<arguments xsi:type="org.eclipse.jem.internal.instantiation:PTName"
name="{parentComposite}"/>
<arguments xsi:type="org.eclipse.jem.internal.instantiation:PTFieldAccess"
field="BORDER">
<receiver xsi:type="org.eclipse.jem.internal.instantiation:PTName"
name="org.eclipse.swt.SWT"/>
</arguments>
</expression>
</allocation>
</textitem:TextItem>
<cdm:AnnotationEMF annotates="BorderTextItem_1">
<keyedValues xmi:type="ecore:EStringToStringMapEntry&q
|