2014-07-07 5 views
0

아마도 매우 쉬운 새내기 질문이지만 이미 한 쌍의 시간을 가져올 수는 없으므로 여기에 설명하겠습니다. 내 범위 : 일부 그래픽 편집기 (EditorPart 확장)가있는 RCP 응용 프로그램이 있습니다. 편집인은 변경 사항을 파악하고 직접 저장하려고합니다. 이를 위해 CommandStack이 변경되고 doSave 메소드가 시작되는 순간을 포착합니다. 문제는 내 저장 메서드가 CommadStack 변경 이벤트를 호출하고 변경 내용이 저장되어 있지만 편집자가 여전히 더티 플래그가있는 것보다이 호출을 건너 뛸 수 있다는 것입니다. 내 원하는 행동은 더티 플래그가 떨어져 있다는 것입니다 (정상적인 저장 동작처럼).
내 CommandStack 변경과 내 doSave 방법이 모두 아래에 있습니다. 저 좀 도와 주 시겠어요? getCommandStack(). markSaveLocation와CommandStack의 변경 사항을 저장하십시오.

@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; 
    } 

() 나는 한 번 더 commandStackChanged 전화 루프에서 얻을. 이 문제를 어떻게 해결할 수 있습니까? 그것 없이는 내 편집자는 저장 후에 더러워집니다.

감사 접견, 제프

답변

0

어떻게 편집기에 IPropertyListener을 추가하고 IEditorPart.PROP_DIRTY 수신에 대한. 리스너 구현의 경우 편집기가 더티 인 경우 저장을 수행하고 그렇지 않으면 아무것도 수행하지 않습니다.

관련 문제