保存更改CommandStack

时间:2014-07-07 14:43:37

标签: java eclipse-rcp eclipse-gef

可能是一个非常简单的新手问题,但我已经无法在一两天内完成它,所以我会在这里问一下。我的范围:我有一些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并进入循环。我怎么解决这个问题?没有它,我的编辑器在保存后仍然很脏。

谢谢和问候, 杰夫

1 个答案:

答案 0 :(得分:0)

如何将IPropertyListener添加到您的编辑器并监听IEditorPart.PROP_DIRTY。对于侦听器实现,如果编辑器是脏的,则执行save,否则不执行任何操作。