GEF Programmers' Guide 中文版(Editpart生命周期)
2010-07-07 18:16
597 查看
生命周期
当我们提到生命周期, 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 不要用来存储一些在撤销时需要使用的信息。
当我们提到生命周期, 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 不要用来存储一些在撤销时需要使用的信息。
相关文章推荐
- GEF Programmers' Guide 中文版(工具和绘图板)
- GEF Programmers' Guide 中文版(GEF 交互操作)
- GEF Programmers' Guide 中文版(编辑和策略)
- GEF源码分析(六) GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事 二
- Note on <Zend Framework - A Beginner's Guide> - 05
- ABAP Trial Version for Newbies: Part 8 ' Exporting development objects from SP8 '
- 以鼠标进入EditPartViewer为例讲解GEF执行流程
- 2012-10-22 11gR2"2DAY DBA"page126-280 & "ADMINISTRATOR'S GUIDE" page1-61
- R语言-代码规范(Google's R Style Guide)
- Oracle Invalid character ' ' in value part of property error
- GEF,EMF,RCP,Eclipse's plugin的几个问题(2) Propertes View中的Property(Category)排序问题
- 安装ADT的时候报错了(关于requires 'org.eclipse.gef 0.0.0' but it could not be found的解决方法)
- Photoshop Skill IV: The third part of Sharpen's Tips 锐化的技巧之三
- 2012-11-3 - 11-4 11gR2 "ADMINISTRATOR'S GUIDE" page 585 - 646
- 2012-11-5 11gR2 "ADMINISTRATOR'S GUIDE" page 647 - 698
- 2012-11-9 11gR2 "ADMINISTRATOR'S GUIDE" page 848 - 904
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part I & II)
- GEF源码分析(三) GEF 的树状构架 ___ Model/EditPart/Figure
- ABAP Trial Version for Newbies: Part 9 ' Importing a transport into SP11/12 '
- JAVASCRIPT ENGINE FOR GUIXML USERS' GUIDE