private void RemoveEditor(IDiagramEditor editor) { var diagram = editor.Diagram; editor.Closing -= diagramEditor_Closing; editor.Closed -= diagramEditor_Closed; editor.Saved -= diagramEditor_Saved; OpenDiagrams.Remove(editor); editor.Dispose(); OnDiagramClosed(diagram); }
/// <see cref="IDiagramManager.Close"/> public void Close() { OnClosing(); var unsavedOpenDiagrams = OpenDiagrams.Where(od => od.CodeEditor.IsModified).ToList(); foreach (var openDiagram in unsavedOpenDiagrams) { openDiagram.Close(); } Task.WaitAll(_editorSaveTasks.ToArray()); }
/// <see cref="IDiagramManager.OpenDiagramForEdit"/> public void OpenDiagramForEdit(PreviewDiagramViewModel diagram) { if (diagram == null) { throw new ArgumentNullException(nameof(diagram)); } OpenDiagram = OpenDiagrams.FirstOrNone(d => d.Diagram.Equals(diagram.Diagram)).GetOrElse(() => { var newEditor = _editorFactory(diagram.Diagram); newEditor.DiagramImage = diagram.ImagePreview; newEditor.Closing += diagramEditor_Closing; newEditor.Closed += diagramEditor_Closed; newEditor.Saved += diagramEditor_Saved; OpenDiagrams.Add(newEditor); OnDiagramOpened(diagram.Diagram); return(newEditor); }); }
/// <see cref="IDiagramManager.SaveAllAsync"/> public async Task SaveAllAsync() { await OpenDiagrams.Where(d => d.CanSave).Select(d => d.SaveAsync()); }