コード例 #1
0
        /// <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();
            }
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 public DiagramFacade(DatabaseModelDesigner designer)
 {
     ViewModel = designer.ViewModel;
 }