使用GMF开发可视化界面编辑器(二)——自定义Figure

除了以XML的方式配置Figure组件之外,GMF还允许用户直接编写Figure的实现类。

同GEF一样,GMF在视图展现上依然使用Java的draw2d技术框架,而我们所创建的Figure组件一般继承org.eclipse.draw2d.Figure

类或其子类。这里,我们可以参考JBPM自带的流程编辑器源代码,把它已定义好的Figure组件copy过来稍作修改,拿来直接使用。比如StartFigure,用于定义开始节点的视图组件。

public class StartFigure extends AbstractElementFigure { private static final Image icon=imgUtil.getImgFromPlugIn("org.chen.test.diagram.custom", "icons/start_event_empty.png"); @Override protected void customizeFigure() { setIcon(icon); } }

public abstract class AbstractElementFigure extends Panel { private Label label = new Label(); protected static ImageUtil imgUtil=new ImageUtil(); public AbstractElementFigure() { add(label); customizeFigure(); setSize(48, 48); } protected abstract void customizeFigure(); public void setIcon(Image icon) { label.setIcon(icon); } public void setText(String text) { label.setText(text); } public Label getLabel() { return label; } public void setColor(Color color) { setBackgroundColor(color); } public void setBounds(Rectangle bounds) { bounds.setSize(48, 48); super.setBounds(bounds); label.setBounds(bounds); } public void paint(Graphics g) { int saved = g.getAntialias(); g.setAntialias(SWT.ON); super.paint(g); g.setAntialias(saved); } }

public class ImageUtil { public Image getImgFromPlugIn(String plugIn,String path){ Image result=AbstractUIPlugin.imageDescriptorFromPlugin(plugIn, path).createImage(); return result; } }

另外,我们所自定义的Figure,或其他组件最好放到一个独立的bundle中进行管理,与GMF所驱动出的代码加以区分,比如在现有

的bundle基础上加custom表示该bundle不是GMF所驱动出来的,而是我们人为定义的。

Figure定义好之后,便可将它引入到我们的视图模型中去,新建一个Figure Descriptor,name属性设置为StartFigure,然后添加一个Custom Figure节点,将Qualified Class Name属性设置成StartFigure的类名全称,设置完成以后,还需要把StartFigure所在的包添加到MANIFEST.MF文件包依赖关系中去,因为我们所定义的Figure在另一个Bundle中,最后在Canvas节点下实例化我们所声明的StartFigure,新添加一个Node节点,Name属性设置成Start,Figure属性设置成StartFigure,至此,视图模型定义结束。

 

定义好视图模型之后,修改工具模型。

新建一个Creation Tool,Title属性设置为"开始",Description属性设置为"创建开始节点",然后为该工具指定默认的图标信息。

 

最后修改映射模型,完成开始节点的映射关系。

新建一个Top Node Reference,Containment Feature属性设置为Process.nodes,为其添加Node Mapping节点,完成如图所示的属性设置。

使用GMF开发可视化界面编辑器(二)——自定义Figure_第1张图片

模型修改完成以后,我们需要重新生成generator模型,右键映射模型配置文件,在弹出的菜单中选择Create generator model按照向导,完成模型的生成操作。

最后重新生成项目代码,启动项目实例,可以看到Start节点也已经添加到视图中去。

使用GMF开发可视化界面编辑器(二)——自定义Figure_第2张图片

可以按照此方法,完成End节点的添加操作,这里略去。

你可能感兴趣的:(image,String,Class,generator,reference,Descriptor)