Esempio n. 1
0
 public void ForceClosePage(IPage page, CloseSource source = CloseSource.External)
 {
     ClosePage(page, source);
     (page as IGtkWindowPage).GtkDialog.Respond((int)ResponseType.DeleteEvent);
     (page as IGtkWindowPage).GtkView.Destroy();
     (page as IGtkWindowPage).GtkDialog.Destroy();
 }
 public void OnClose(CloseSource source)
 {
     if (source == CloseSource.ClosePage || source == CloseSource.AppQuit || source == CloseSource.Cancel)
     {
         cancellation?.Cancel();
     }
 }
Esempio n. 3
0
        public void ForceCloseTab(ITdiTab tab, CloseSource source = CloseSource.External)
        {
            var slider = tab.TabParent as TdiSliderTab;

            if (slider != null)
            {
                slider.ForceCloseTab(tab, source);
                return;
            }

            TdiTabInfo info = _tabs.Find(i => i.TdiTab == tab);

            if (info == null)
            {
                logger.Warn("Вкладка предположительно уже закрыта, попускаем...");
                return;
            }

            while (info.SlaveTabs.Count > 0)
            {
                ForceCloseTab(info.SlaveTabs[0], CloseSource.WithMasterPage);
            }

            CloseTab(info, source);
        }
        protected virtual void ClosePage(IPage page, CloseSource source)
        {
            if (page.ViewModel is IOnCloseActionViewModel onClose)
            {
                onClose.OnClose(source);
            }

            var closedPagePair = SlavePages.FirstOrDefault(x => x.SlavePage == page);

            if (closedPagePair != null)
            {
                (closedPagePair.MasterPage as IPageInternal).RemoveSlavePage(closedPagePair.SlavePage);
            }
            var pageToRemove = pages.FirstOrDefault(x => x == page);

            if (pageToRemove != null)
            {
                pages.Remove(pageToRemove);
                (pageToRemove as IPageInternal).OnClosed(source);
            }
            else
            {
                var childPair = ChildPages.FirstOrDefault(x => x.ChildPage == page);
                if (childPair != null)
                {
                    (childPair.ParentPage as IPageInternal).RemoveChildPage(childPair.ChildPage);
                    (childPair.ChildPage as IPageInternal).OnClosed(source);
                }
            }

            if (page.ViewModel is IDisposable pd)
            {
                pd.Dispose();
            }
        }
Esempio n. 5
0
 public void OnClose(CloseSource source)
 {
     if (source != CloseSource.Self)
     {
         Deletion.DeletionExecuted = false;
     }
 }
 public bool AskToCloseTab(ITdiTab tab, CloseSource source)
 {
     if (MessageDialogHelper.RunQuestionDialog("Вы действительно хотите закрыть окно?"))
     {
         tab.OnTabClosed();
     }
     return(true);
 }
Esempio n. 7
0
 public void OnClose(CloseSource source)
 {
     if (source == CloseSource.ClosePage || source == CloseSource.AppQuit || source == CloseSource.Cancel)
     {
         try {
             cancellation?.Cancel();
         }
         catch (ObjectDisposedException) { }
     }
 }
        protected override void ClosePage(IPage page, CloseSource source)
        {
            base.ClosePage(page, source);

            if (page is IGtkWindowPage gtkPage)
            {
                gtkPage.GtkDialog.Respond((int)ResponseType.DeleteEvent);
                gtkPage.GtkView.Destroy();
                gtkPage.GtkDialog.Destroy();
            }
        }
 public void ForceClosePage(IPage page, CloseSource source = CloseSource.External)
 {
     if (page is ITdiPage tdiPage)
     {
         tdiNotebook.ForceCloseTab(tdiPage.TdiTab, source);
     }
     else
     {
         ClosePage(page, source);
     }
 }
Esempio n. 10
0
 protected void OnCloseTab(bool askSave, CloseSource source)
 {
     if (askSave)
     {
         TabParent.AskToCloseTab(this, source);
     }
     else
     {
         TabParent.ForceCloseTab(this, source);
     }
 }
Esempio n. 11
0
 public bool AskClosePage(IPage page, CloseSource source = CloseSource.External)
 {
     if (page is ITdiPage tdiPage)
     {
         return(tdiNotebook.AskToCloseTab(tdiPage.TdiTab, source));
     }
     else
     {
         ClosePage(page, source);
     }
     return(true);
 }
Esempio n. 12
0
        public bool AskToCloseTab(ITdiTab tab, CloseSource source = CloseSource.External)
        {
            if (tab == ActiveDialog)
            {
                return(CloseDialog(source, true));
            }

            if (tab == Journal)
            {
                return(TabParent.AskToCloseTab(this, source));
            }

            return(TabParent.AskToCloseTab(tab, source));
        }
Esempio n. 13
0
        private void CloseTab(TdiTabInfo info, CloseSource source)
        {
            if (info.SlaveTabs.Count > 0)
            {
                throw new InvalidOperationException("Вкладка не может быть закрыта, если у нее есть подчинёные вкладки.");
            }

            var tab = info.TdiTab;

            //Закрываем вкладку
            TabVBox tabBox    = GetTabBoxForTab(tab);
            bool    IsCurrent = this.CurrentPageWidget == tabBox;

            _tabs.RemoveAll(t => t.TdiTab == tab);
            _tabs.ForEach(t => t.SlaveTabs.RemoveAll(s => s == tab));
            if (IsCurrent)
            {
                this.PrevPage();
            }
            this.Remove(tabBox);
            var maybeSliderActiveDialog = (tab as TdiSliderTab)?.ActiveDialog;

            if (maybeSliderActiveDialog != null)
            {
                OnTabClosed(maybeSliderActiveDialog, CloseSource.WithParentPage);
            }
            OnTabClosed(tab, source);
            tab.OnTabClosed();
            if (tabBox != null && tabBox.Tab is Container)
            {
                GtkHelper.EnumerateAllChildren((Container)tabBox.Tab)
                .OfType <IMustBeDestroyed>().ToList()
                .ForEach(w => w.Destroy());
            }
            logger.Debug("Вкладка <{0}> удалена", tab.TabName);
            if (tabBox != null)
            {
                tabBox.Destroy();
            }

            tab.TabNameChanged -= OnTabNameChanged;

            if (tab is IDisposable)
            {
                (tab as IDisposable).Dispose();
                tab = null;
            }
            GC.Collect();
        }
Esempio n. 14
0
        public void ForceCloseTab(ITdiTab tab, CloseSource source = CloseSource.External)
        {
            if (tab == ActiveDialog)
            {
                CloseDialog(source, false);
                return;
            }

            if (tab == Journal)
            {
                TabParent.ForceCloseTab(this, source);
                return;
            }
            TabParent.ForceCloseTab(tab, source);
        }
Esempio n. 15
0
        protected bool CloseDialog(CloseSource source, bool AskSave)
        {
            if (TabParent.CheckClosingSlaveTabs(this as ITdiTab))
            {
                return(false);
            }

            if (ActiveDialog is ITdiDialog dlg)
            {
                if (AskSave && dlg.HasChanges)
                {
                    string        Message = "Объект изменён. Сохранить изменения перед закрытием?";
                    MessageDialog md      = new MessageDialog((Window)this.Toplevel, DialogFlags.Modal,
                                                              MessageType.Question,
                                                              ButtonsType.YesNo,
                                                              Message);
                    md.AddButton("Отмена", ResponseType.Cancel);
                    int result = md.Run();
                    md.Destroy();
                    if (result == (int)ResponseType.Cancel || result == (int)ResponseType.DeleteEvent)
                    {
                        return(false);
                    }
                    if (result == (int)ResponseType.Yes)
                    {
                        if (!dlg.Save())
                        {
                            logger.Warn("Объект не сохранён. Отмена закрытия...");
                            return(false);
                        }
                    }
                }
            }
            var oldTab = ActiveDialog;

            ActiveDialog.OnTabClosed();
            ActiveDialog = null;
            activeGlgWidget.Destroy();
            (TabParent as TdiNotebook)?.OnSliderTabClosed(this, oldTab, source);
            OnSliderTabChanged();
            return(true);
        }
Esempio n. 16
0
        private void RunUpdateDB()
        {
            //Увеличиваем время выполнения одной команды до 4 минут. При больших базах процесс обновления может вылетать по таймауту.
            connectionStringBuilder.ConnectionTimeout = 240;

            var page = navigation.OpenViewModel <UpdateProcessViewModel>(null, addingRegistrations: c =>
                                                                         c.Register(cxt => connectionStringBuilder));
            var         isClosed = false;
            CloseSource source   = CloseSource.Self;

            page.PageClosed += (sender, e) => {
                isClosed = true;
                source   = e.CloseSource;
            };
            gui.WaitInMainLoop(() => isClosed);
            if (source != CloseSource.Save)
            {
                interactiveMessage.ShowMessage(ImportanceLevel.Error, "База данных не обновлена, дальнейшая работа приложения не возможна. Приложение будет закрыто.", "Выход");
                Environment.Exit(1);
            }
        }
Esempio n. 17
0
        public bool AskToCloseTab(ITdiTab tab, CloseSource source = CloseSource.External)
        {
            var slider = tab.TabParent as TdiSliderTab;

            if (slider != null)
            {
                return(slider.AskToCloseTab(tab, source));
            }

            if (CheckClosingSlaveTabs(tab))
            {
                return(false);
            }

            ITDICloseControlTab cct = tab as ITDICloseControlTab;
            ITDICloseControlTab canCloseActiveDialog = (tab as TdiSliderTab)?.ActiveDialog as ITDICloseControlTab;

            if ((cct != null && !cct.CanClose()) || (canCloseActiveDialog != null && !canCloseActiveDialog.CanClose()))
            {
                return(false);
            }

            bool canClose = true;

            try
            {
                canClose = SaveIfNeed(tab);
            }
            catch (Exception e)
            {
                logger.Error(e, "Возникла ошибка при проверке закрытия вкладки");
            }
            if (canClose)
            {
                ForceCloseTab(tab, source);
                return(true);
            }
            return(false);
        }
Esempio n. 18
0
 protected void OnCloseTab(CloseSource source)
 {
     logger.Debug("Закрытие диалога {0}", number);
     TabParent.ForceCloseTab(this, source);
 }
Esempio n. 19
0
 public void ForceCloseTab(ITdiTab tab, CloseSource source)
 {
     throw new NotImplementedException();
 }
 public void OnClose(CloseSource closeSource)
 {
     OnCloseCall?.Invoke(closeSource);
 }
 protected void OnCloseTab(CloseSource source)
 {
     TabParent.ForceCloseTab(this, source);
 }
Esempio n. 22
0
 private void ShowMessageAndClose(QS.Dialog.ImportanceLevel importanceLevel, CloseSource closeSource, string progressMessage, double progress, string message)
 {
     UpdateProgress(progressMessage, progress);
     ViewModel.InteractiveService.ShowMessage(importanceLevel, message);
     ViewModel.Close(false, closeSource);
 }
Esempio n. 23
0
 void IPageInternal.OnClosed(CloseSource source)
 {
     PageClosed?.Invoke(this, new PageClosedEventArgs(source));
 }
Esempio n. 24
0
 public TabClosedEventArgs(ITdiTab tab, CloseSource source)
 {
     this.tab    = tab;
     CloseSource = source;
 }
Esempio n. 25
0
 internal void OnTabClosed(ITdiTab tab, CloseSource source)
 {
     TabClosed?.Invoke(this, new TabClosedEventArgs(tab, source));
 }
Esempio n. 26
0
 public PageClosedEventArgs(CloseSource source)
 {
     CloseSource = source;
 }
Esempio n. 27
0
 public bool AskToCloseTab(ITdiTab tab, CloseSource source)
 {
     throw new NotImplementedException();
 }
Esempio n. 28
0
 public bool AskClosePage(IPage page, CloseSource source = CloseSource.External)
 {
     throw new  NotImplementedException();
 }
Esempio n. 29
0
 public override void Close(bool askSave, CloseSource source)
 {
     base.Close(askSave, source);
     Dispose();
 }
Esempio n. 30
0
 internal void OnSliderTabClosed(object sender, ITdiTab tab, CloseSource source)
 {
     TabClosed?.Invoke(sender, new TabClosedEventArgs(tab, source));
 }