以继承自FormEditor类的多页编辑器为例。
继承自FormEditor编辑器的保存,其中FormEdiotr继承自MultiPageEditorPart
实际上它的保存还是需要调用每一个页面的保存,如
public void doSave(IProgressMonitor monitor){
tagPage.doSave(monitor);
//省略其它page的doSave(monitor)调用
editorDirtyStateChanged();
}
其中tagPage为多页编辑器的其中一页,继承自FormPage,实际上FormPage也是一个编辑器,它继承自EditorPage,并实现了IFormPage接口。
而在FormPage中编辑器的保存通常是这样的,可以在编辑器中定义一个标志编辑器是否脏的变量:
①private boolean isDirty = false;//初始值为false,假定未改写,isDirty方法返回isDirty。
②在需要监听修改事件的地方进行isDirty值的设置,并通知事件,如:
isDirty = true;
getEditor().editorDirtyStateChanged();//特别注意这里的getEditor()方法
③在doSave方法中完成保存工作,且将isDirty设置为false,如:
public void doSave(IProgressMonitor monitor) {
writeFieldsToTag();
id3TagInfo.saveMP3File();
isDirty = false;//重置为false
}
说明:实际上FormEditor中的isDirty()方法是把所有它包含的FormPage遍历了一遍,来判断其中哪些有修改