1、强行添加command使编辑器脏。
getEditor().getCommandStack().execute(new Command() {});
2、
//第一步,对editor的构造函数添加EditDomain
public MyGraphicalEditor() {
setEditDomain(new DefaultEditDomain(this));
}
//第二步,对Command堆栈进行监听
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
super.init(site, input);
getCommandStack().addCommandStackListener(this);
}
//第三步,重载CommandStackListener的CommandStackChanged()方法
public void commandStackChanged(EventObject event) {
super.commandStackChanged(event);
firePropertyChange(IEditorPart.PROP_DIRTY);// 别忘了
}
//第四步,定义一个boolean类型的变量dirty,并写其set方法。供涉及Command堆栈之外的操作对“脏”状态改的需求
public void setDirty(boolean dirty){
if (dirty != this.dirty) {
this.dirty = dirty;
firePropertyChange(IEditorPart.PROP_DIRTY);
}
}
//第五步,重载editor的isDirty()方法
public boolean isDirty() {
return (getCommandStack().isDirty()) | dirty;
}
// 最后一步,doSave()方法的处理
public void doSave(IProgressMonitor arg0) {
getCommandStack().markSaveLocation();
dirty = false;
firePropertyChange(IEditorPart.PROP_DIRTY);
// Todo others.....
}