很久很久以前

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 4 文章 :: 17 评论 :: 0 Trackbacks
        GEF中的起到关键作用的是EditPart,而EditPart中起到关键作用的是EditPolicy,现在来描述一下GEF是如何创建一个图形并显示显示出来的。
        首先通过单击调色板,会调用一个实现org.eclipse.gef.requests.CreationFactory接口的工厂类,这个是我们在注册相应的ToolEntry时声明的,通过传入的参数这个工厂类就知道应该创建一个什么类型的model元素。(注意,这时候因为我们只是纯创建了一个模型元素,对于它的父元素,位置信息等等都还不清楚,所以一般我们在设置模型元素的构造函数时需要有个无参数的构造方法(或者有默认参数的构造函数)。)
        当单击画布上的某个位置后,相应的信息比如 模型的父元素,位置信息等等都已经可以确定,将这些信息以及新创建的模型元素本身包装成request传给相应的EditPart(就是鼠标单击处所在的图形元素对应的EditPart)。
        这个EditPart会将这个request传给相应的EditPolicy(至于怎么传递,还不清楚,估计是这样的,EditPart会传给注册在其上的所有EditPolicy,而每个EditPolicy都有个getCommand方法,通过request的type交给相应的getXXXCommand方法。查看了一下源代码,发现在AbastractEditPart中有个getCommand方法正是将每个EditPolicy中的getCommand方法都调用了一遍)。
       然后EditPolicy处理相应的request,具体的就是调用getXXXCommad方法得到处理相应request的Command,Command是可以改变模型。上面提到的这种EditPolicy属于NonGraphical类型,GEF中还包括了一种称为Graphical类型的EditPolicy,这种EditPolicy不对模型进行处理,只是用来修改图形显示(似乎这种说法不正确,它可以更改视图元素的位置,在业务模型和视图模型统一的情况下,这种图形EditPolicy也会更改模型);而NonGraphical的EditPolicy则是不清楚图形元素的,但它可以对模型进行更改,因此这种EditPolicy在不同view之间是可以通用的。
       当模型发生改变后,注册再其上的EditPart将会得到相应的通知,此时,通过通知中的property信息,EditPart会refreshVisual或者refreshChildren,从而使视图发生改变。
posted on 2006-04-09 12:33 Long Long Ago 阅读(612) 评论(0)  编辑  收藏 所属分类: GEFEclipse

只有注册用户登录后才能发表评论。


网站导航: