可能是一个非常简单的新手问题,但我已经无法在一两天内完成它,所以我会在这里问一下。我的范围:我有一些RCP应用程序和一些图形编辑器(EditorPart的扩展)。在我的编辑器中,我想捕获任何更改并直接保存它们。为此,我抓住了我的CommandStack被更改的时刻并启动了一个doSave方法。问题是我的save方法调用了一个CommadStack更改事件,如果我跳过这个调用,而不是我的更改被保存但我的编辑器仍然有一个脏标志。我希望的行为是脏标志离开(就像正常的保存行为) 我的CommandStack更改和我的doSave方法都在下面。请你帮助我好吗?
@Override
public void commandStackChanged(EventObject event) {
firePropertyChange(IEditorPart.PROP_DIRTY);
doSave(null);
setDirty(false);
}
public void doSave(final IProgressMonitor progressMonitor) {
editorSaving = true;
SafeRunner.run(new SafeRunnable() {
public void run() throws Exception {
IFile targetFile = getFile();
List<GraphicalEditPart> editParts = DiagramUtil.getAllEditParts(NetEditor.this);
Rectangle offsetBounds = DiagramUtil.getBounds(editParts);
saveDiagramProperties();
List<INetTransition> transitionsToExpand = saveSubdiagramGroups();
FileUtil.saveDiagram(getNetDiagram(), targetFile,
NetEditor.this);
getCommandStack().markSaveLocation();
for (INetTransition trans : transitionsToExpand) {
trans.setExpanded(true);
}
}
});
setDirty(false);
editorSaving = false;
}
使用getCommandStack()。markSaveLocation()我再次调用commandStackChanged并进入循环。我怎么解决这个问题?没有它,我的编辑器在保存后仍然很脏。
谢谢和问候, 杰夫
答案 0 :(得分:0)
如何将IPropertyListener添加到您的编辑器并监听IEditorPart.PROP_DIRTY。对于侦听器实现,如果编辑器是脏的,则执行save,否则不执行任何操作。