对于多页的FormEditor编辑器 ,MULTIPAGEEDITRO中包含FRMPAGE,FROMPAGE中包含的有PAGEFORM.
首先,在判断编辑器是否为脏。FormEditor的isDirty方法会判断编辑器是否变脏:
- public boolean isDirty() {
- if (pages != null) {
- for (int i = 0; i < pages.size(); i++) { //对每一页的状态判断
- Object page = pages.get(i);
- if (page instanceof IFormPage) {
- IFormPage fpage = (IFormPage) page;
- if (fpage.isDirty())
- return true;
- }
- }
- }
- return super.isDirty();
- }
FormPage的isDirty()方法:
- public boolean isDirty() {
- return mform != null ? mform.isDirty() : false;
- }
MultiPageEditor的isDirty状态是遍历Editor中每个FormPage的FormPart对象的isDirty状态得到的。
编辑器变脏后,是如何通知Workbench.
对于GEF编辑器,是通过CommandStack来通知Workbench,编辑器变脏的事件,但对于FormEditor没有默认的CommandStack,因此,通过调用PageForm的editorDirtyStateChanged()方法来通知编辑器变脏的事件。
要实现多页编辑器变脏,在PageForm的FormPart中,当做了修改后,设置FormPart的脏状态,也就是使ISDIRTY返回的为TRUE,并调用PageForm的editorDirtyStateChanged() 做通知。(this.getManagedForm().dirtyStateChanged(); )
在编辑器变脏或者是保存以后,都需要调用this.getManagedForm().dirtyStateChanged() 来更新编辑器状态。(标题处的*是标志)。