GEF Programmers' Guide 中文版(Editpart生命周期)

生命周期

当我们提到生命周期, EditPart 最典型的就是激活 (activation) 和停用 (deactivation) 操作,激活过程中它将添加模型属性监听器,而停用时它会移除监听器。但是我们仍然有必要了解一下 EditPart 完整的生命周期。

1) 创建

最先的总是创建过程,绝大多数的 EditPart 会在 Viewer EditPartFactory 中被创建出来。在创建以后,将执行以下方法:

setModel() – 如果 EditPart 的构造方法没有将模型对象作为参数传递进来,那么 setModel() 将会被执行,以确保 EditPart 知道它维护的模型。

2) 添加到图形

setParent() – 设置 EditPart 的父 EditPart ,它提供了一个用于索引它的路径,这个路径可能会用来进行 EditPart 的注册和访问,通过 EditPart Registry

createFigure() – 创建视图 (Figure) ,注意此时父 EditPart 和模型都已经设置完毕,可以使用这些信息。

addNotify()  -- 通知子 EditPart 添加完毕,这时子 EditPart 将进行以下操作:

1.     Viewer Registry 中注册自己

2.     创建编辑策略

3.     刷新显示自己,然后初始化它自己的子节点或者连接 ( 如果存在的话 )

activate() – 激活 EditPart ,表明它已经做好了编辑的准备。父 EditPart 在自己被激活后再激活它的子 EditPart Root EditPart Viewer 被创建后激活。在激活的过程中:

1.     开始监听模型。子类应当重写这个方法,以添加必要的监听器

2.     激活所有的编辑策略

3.     激活所有的子 EditPart 和源连接的 ConnectionEditPart

3) 正常使用

这时候 EditPart 处于正常使用状态,它开始进行一系列的处理,直到它被从 Viewer 中移除或者 Viewer 关闭。

4) 停用

deactivate() – 停用 EditPart ,与 activate() 相反。 记得移除激活时添加的模型监听器。

EditPart 被移除以后还会有一些操作继续进行,但是如果是 Viewer 被关闭 ( 正常或者非正常 ) ,那么只保证执行 deactivate() 。因此, activate() deactivate() 通常需要重写而其他的方法可以忽略。

removeNofity() – 通知此 EditPart 将要被移除,在此期间, EditPart 仍然可以访问上下文环境,它会进行以下操作:

1.     确定 EditPart 没有被选中或使用

2.     调用子 EditPart removeNofify() 方法

3.     Viewer Registry 中注销自己 .

4.     移除任何以自己为源或者目的的连接 ,一般地,连接只有在源和目的都被删除以后才会自动删除,所以此处要显示的移除相关连接,以免出现只有一个端点的无效连接

setParent(null) – 移除操作的最后一步,将父 EditPart 设置为 null

EditPart 不会死而复生, 在撤销删除时,将会产生新的 EditPart 因此命令最好不要引用 EditPart 同时 EditPart 不要用来存储一些在撤销时需要使用的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值