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(); } }
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(); } }
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); }
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); } }
protected void OnCloseTab(bool askSave, CloseSource source) { if (askSave) { TabParent.AskToCloseTab(this, source); } else { TabParent.ForceCloseTab(this, source); } }
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); }
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)); }
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(); }
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); }
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); }
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); } }
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); }
protected void OnCloseTab(CloseSource source) { logger.Debug("Закрытие диалога {0}", number); TabParent.ForceCloseTab(this, source); }
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); }
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); }
void IPageInternal.OnClosed(CloseSource source) { PageClosed?.Invoke(this, new PageClosedEventArgs(source)); }
public TabClosedEventArgs(ITdiTab tab, CloseSource source) { this.tab = tab; CloseSource = source; }
internal void OnTabClosed(ITdiTab tab, CloseSource source) { TabClosed?.Invoke(this, new TabClosedEventArgs(tab, source)); }
public PageClosedEventArgs(CloseSource source) { CloseSource = source; }
public bool AskToCloseTab(ITdiTab tab, CloseSource source) { throw new NotImplementedException(); }
public bool AskClosePage(IPage page, CloseSource source = CloseSource.External) { throw new NotImplementedException(); }
public override void Close(bool askSave, CloseSource source) { base.Close(askSave, source); Dispose(); }
internal void OnSliderTabClosed(object sender, ITdiTab tab, CloseSource source) { TabClosed?.Invoke(sender, new TabClosedEventArgs(tab, source)); }