예제 #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
 //FIXME Возможно временный метод, в нем не было необходиости пока в MonoDevelop не появился баг, с удалением подписок с кнопок Save и Cancel
 private void CheckButtonSubscription()
 {
     saveButton = GtkHelper.EnumerateAllChildren(this).OfType <Button> ().FirstOrDefault(x => x.Name == "buttonSave");
     if (saveButton != null)
     {
         saveButton.Clicked -= OnButtonSaveClicked;
         saveButton.Clicked += OnButtonSaveClicked;
     }
     cancelButton = GtkHelper.EnumerateAllChildren(this).OfType <Button> ().FirstOrDefault(x => x.Name == "buttonCancel");
     if (cancelButton != null)
     {
         cancelButton.Clicked -= OnButtonCancelClicked;
         cancelButton.Clicked += OnButtonCancelClicked;
     }
 }