/// <summary> /// Cloase and save diagrams after session end /// </summary> /// <param name="window">Main app window</param> /// <returns>Task for async execution</returns> public static async Task CloseDiagramsOnDisconnect(MainWindow window) { var forSave = new Queue <DatabaseModelDesignerViewModel>(); IEnumerable <LayoutContent> contents = window.MainDocumentPane.ChildrenSorted.Where(t => t.Content is DatabaseModelDesigner).ToList(); var facade = new DiagramFacade(new DatabaseModelDesigner()); bool yesToAll = false; foreach (LayoutContent content in contents) { DatabaseModelDesigner designer = content.Content as DatabaseModelDesigner; if (designer == null) { continue; } if (yesToAll) { forSave.Enqueue(designer.ViewModel); content.Close(); continue; } var res = await window.ShowMessageAsync("Save diagram", $"Do you want to save diagram ? ({designer.ViewModel.DiagramTitle})", MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary, new MetroDialogSettings() { AnimateShow = true, AnimateHide = false, AffirmativeButtonText = "Yes", FirstAuxiliaryButtonText = "Yes to all", NegativeButtonText = "No" }); switch (res) { case MessageDialogResult.Affirmative: facade.ViewModel = designer.ViewModel; facade.SaveDiagram(); break; case MessageDialogResult.FirstAuxiliary: yesToAll = true; forSave.Enqueue(designer.ViewModel); break; } content.Close(); } while (forSave.Count > 0) { var vm = forSave.Dequeue(); facade.ViewModel = vm; facade.SaveDiagram(); } }
/// <summary> /// Save all opened diagrams to DB /// </summary> /// <param name="window">Main app window</param> public static void SaveAllDiagrams(MainWindow window) { IEnumerable <DatabaseModelDesignerViewModel> viewModels = window.MainDocumentPane.ChildrenSorted .Where(t => t.Content is DatabaseModelDesigner) .Select(t => t.Content as DatabaseModelDesigner) .Select(t => t?.ViewModel); var facade = new DiagramFacade(new DatabaseModelDesigner()); foreach (DatabaseModelDesignerViewModel viewModel in viewModels) { facade.ViewModel = viewModel; facade.SaveDiagram(); } }