GEF总结(一)

总结文档计划为五篇,后三篇为项目总结
——————————————————————————————

GEF,图形编辑框架,以draw2d为基础的图形表现,类同POJO的数据模型,GEF中的editpart组成GEF mvc设计模式。其设计模式决定了我们在开发中需要遵守MVC的规则

[img]/upload/attachment/70389/9441551e-ff42-3287-8eeb-91af379c89d6.gif[/img]

一,GEF提供两类EditPart
1 GraphcalEditPart,以figure为其view显示
2 SWT的treeEditPart,以treeItem显示

二,EditPart是MVC中的控制,控制改变模型,改变图形显示,图形V与模型M间无直接联系,

[img]/upload/attachment/70393/64936f3e-034c-3b9d-9cdf-3b81469a6a9b.gif[/img]

那么editPart需具备:
1 创建和维护视图
2 创建和维护children editparts
3 创建和维护connection editpart
4 支持编辑模型

三,假设我们已经有了模型和一些图形的时候,应该怎么显示它们呢?

首先我们知道GEF用于显示的是基于draw2d的图形,那么draw2d的图形是怎么显示的?不错,是用canvas,这里figurecanvas,在GEF中我们通常用ScrollingGraphicalViewer做为图形显示的画板。当然你也可以不使用它,除非你不想要滚动条。

四,有了显示的画板,我们需要把模型,控制,图形整合在一起,这就需要一个rootEditPart.GEF提供了ScalableRootEditPart与scalableFreeformRootEditPart


[img]/upload/attachment/70391/ac42ae2e-5502-345b-9d62-97df2154561b.gif[/img]

从上图我们可以看到viewer中包含了editPart与figure,其中有一个factory,它负责对应生产相应模型对应的editpart与图形,这个工厂我们把他安装在rootEditPart中。

四,我们知道一个数据对象可以包含其它数据对象,例如一个柜子里可以放不同的办公用品,不同的模型对应不同的editpart,我们的代码需要表明这一特点,我们可以把柜子理解成contentsEditPart其它办公用品理解成children Editpart.当然它们都是graphicaleditpart的子类,我们需要重写什么方法呢?

1 图形经常发生变化,这里的变化是从头创建新的,那么必须重写createFigure()方法,如果使用了scalableFreeformRootEditPart作为rootEditpart,那么实现的图形必须实现freeform api
通常contents editpart,使用FreeformLayer,它的布局是xylayout,另外需重写
List getModelChildren()方法
children editparts通常也叫节点nodes,我们常重写refreshVisuals(),当模型改变时,触发该方法,刷新图形。

五,connection editpart
一个特殊的editpart,它的管理在souce与target editparts中确定,其它功能类同。我们常重写的方法:getModelSourceConnections(),getModelTargetConnctions(),连接的figure必须是draw2d的connection,而源与目标editpart必须是NodeEditPart

小节:
我们在editpart中重写的方法:
createFigure()创建view但不反映模型的改变
refreashVisuals()与上相反
getModeChildren()
getModelSourceConnections(),getModelTargetConnctions()

六,有了显示的画板,并且装上了editpart,model,figure可以实现图形的编辑工作吗?gef里面还不行,这应该是GEF从设计上的考虑把,为了能让editpart做更多的事,并且还不重复,GEF设计出了策略,你可以把它理解成一组行为组件,这些组件可以挂接到任何editpart中重复使用,节省了劳动力。外国人口少没办法。。。如下图:editpart是一个齿轮,各种策略是小齿轮,editpart代理干着各小齿轮的工作。
[img]/upload/attachment/70435/bd470bad-49f6-33ca-8c81-d8dbd182a9b0.gif[/img]

那么图形与模型是如何被更改的呢?这个流程又是怎么样的?
在editpart上安装好策略后,当draw2d发送事件request到editpart,editpart根据request带动相应的策略齿轮做事,策略中的N组command修改模型与图形回显(feedback),模型修改后通知editpart重绘图形,整个编辑结束。

[img]/upload/attachment/70387/0d045d0a-9162-3d1a-99fd-43586f15be1b.gif[/img]

—————————————————————————————————————————
整篇为感念整理,借鉴GEF英文指南,图片直接拿来。先发出来以后再改错,请指正
下一篇主要内容介绍:editpart生命周期,Tools and the Palette,ROLE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值