/// <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> /// Synchronize diagram after activation of panel with DB structure /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public async void AnchorableDesignerActiveChangedHandler(object sender, System.EventArgs e) { var anchorable = sender as LayoutAnchorable; DatabaseModelDesigner designer = anchorable?.Content as DatabaseModelDesigner; if (designer == null) { return; } if (!anchorable.IsActive) { _lastFocued = anchorable; return; } if (_lastFocued != null && _lastFocued.Equals(anchorable)) { return; } Mouse.OverrideCursor = Cursors.Wait; var facade = new DiagramFacade(designer.ViewModel); await facade.RefreshDiagram(designer.ModelDesignerCanvas); Mouse.OverrideCursor = null; }
/// <summary> /// Create new diagram panel in Main Window /// </summary> /// <param name="window">App window</param> /// <param name="title">Title of diagram</param> public static void CreateNewDiagram(MainWindow window, string title) { LayoutAnchorable anchorable = new LayoutAnchorable() { CanClose = true, CanHide = false, CanFloat = true, CanAutoHide = false, Title = title, ContentId = $"{title}_ID" }; DatabaseModelDesignerViewModel designerViewModel = new DatabaseModelDesignerViewModel() { DiagramTitle = title }; window.MainWindowViewModel.DatabaseModelDesignerViewModels.Add(designerViewModel); DatabaseModelDesigner designer = new DatabaseModelDesigner() { ViewModel = designerViewModel, }; designer.TableCreated += window.CreateTableHandler; anchorable.Content = designer; anchorable.IsActiveChanged += window.AnchorableDesignerActiveChangedHandler; window.MainDocumentPane.Children.Add(anchorable); int indexOf = window.MainDocumentPane.Children.IndexOf(anchorable); window.MainDocumentPane.SelectedContentIndex = indexOf; Output.WriteLine(DiagramCreated); }
/// <summary> /// Try to get active diagram /// </summary> /// <param name="designer">Active digram, null if there is none</param> /// <returns></returns> private bool TryGetSelectedDesigner(out DatabaseModelDesigner designer) { var idx = MainDocumentPane.SelectedContentIndex; designer = null; if (idx < 0) { return(false); } var content = MainDocumentPane.Children[idx].Content; designer = content as DatabaseModelDesigner; return(designer != null); }
public DiagramFacade(DatabaseModelDesigner designer) { ViewModel = designer.ViewModel; }