Пример #1
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();
        }
Пример #2
0
        private void CloseTab(ITdiTab tab)
        {
            TdiTabInfo info = _tabs.Find(i => i.TdiTab == tab);

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

            if (info.SlaveTabs.Count > 0)
            {
                throw new InvalidOperationException("Вкладка не может быть закрыта, если у нее есть подчинёные вкладки.");
            }

            //Закрываем вкладку
            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);
            }
            OnTabClosed(tab);
            logger.Debug("Вкладка <{0}> удалена", tab.TabName);
            (tab as Widget).Destroy();
            tabBox.Destroy();
        }