Ejemplo n.º 1
0
        public void AddTab(ITdiTab tab, int after = -1)
        {
            if (tab.FailInitialize)
            {
                logger.Warn("Вкладка <{0}> не добавлена, так как сообщает что построена с ошибкой(Свойство FailInitialize) .",
                            tab.TabName
                            );
                return;
            }
            HBox  box       = new HBox();
            Label nameLable = new Label(tab.TabName);

            box.Add(nameLable);
            Image  closeImage  = new Image(Stock.Close, IconSize.Menu);
            Button closeButton = new Button(closeImage);

            closeButton.Relief   = ReliefStyle.None;
            closeButton.Clicked += OnCloseButtonClicked;
            closeButton.ModifierStyle.Xthickness = 0;
            closeButton.ModifierStyle.Ythickness = 0;
            box.Add(closeButton);
            box.ShowAll();
            var journalTab = tab as ITdiJournal;

            if (journalTab != null && ((journalTab.UseSlider == null && DefaultUseSlider) || journalTab.UseSlider.Value))
            {
                TdiSliderTab slider = new TdiSliderTab((ITdiJournal)tab);
                tab = slider;
            }
            tab.CloseTab       += HandleCloseTab;
            tab.TabNameChanged += OnTabNameChanged;
            _tabs.Add(new TdiTabInfo(tab, nameLable));
            var vbox = new TabVBox(tab);
            int inserted;

            if (after >= 0)
            {
                inserted = this.InsertPage(vbox, box, after + 1);
            }
            else
            {
                inserted = this.AppendPage(vbox, box);
            }
            tab.TabParent = this;
            vbox.Show();
            this.ShowTabs = true;
            if (TabAdded != null)
            {
                TabAdded(this, new TabAddedEventArgs(tab));
            }
            this.CurrentPage = inserted;
            logger.Debug("Добавлена вкладка '{0}'", tab.TabName);

            //I-867 Если вкладка "заказы",
            if (tab is ITdiTabAddedNotifier)
            {
                //то открыть окно "контрагенты"
                ((ITdiTabAddedNotifier)tab).OnTabAdded();
            }
        }
Ejemplo n.º 2
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();
        }
Ejemplo n.º 3
0
 private TabVBox GetTabBoxForTab(ITdiTab tab)
 {
     return(this.Children.SingleOrDefault(w => {
         TabVBox tabBox = (w as TabVBox);
         if (tabBox.Tab == tab)
         {
             return true;
         }
         if (tabBox.Tab is TdiSliderTab)
         {
             return (tabBox.Tab as TdiSliderTab).Journal == tab;
         }
         return false;
     }) as TabVBox);
 }
Ejemplo n.º 4
0
        void OnCloseButtonClicked(object sender, EventArgs e)
        {
            Widget  boxWidget = (sender as Widget).Parent;
            TabVBox tab       = null;

            foreach (Widget wid in this.Children)
            {
                if (this.GetTabLabel(wid) == boxWidget)
                {
                    tab = (TabVBox)wid;
                }
            }

            if (tab == null)
            {
                logger.Warn("Не найден вкладка соответствующая кнопке закрыть.");
                return;
            }

            AskToCloseTab(tab.Tab, CloseSource.ClosePage);
        }
Ejemplo n.º 5
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();
        }
Ejemplo n.º 6
0
        void OnCloseButtonClicked(object sender, EventArgs e)
        {
            Widget  boxWidget = (sender as Widget).Parent;
            TabVBox tab       = null;

            foreach (Widget wid in this.Children)
            {
                if (this.GetTabLabel(wid) == boxWidget)
                {
                    tab = (TabVBox)wid;
                }
            }

            if (tab == null)
            {
                logger.Warn("Не найден вкладка соответствующая кнопке закрыть.");
                return;
            }

            if (CheckClosingSlaveTabs(tab.Tab))
            {
                return;
            }

            ITDICloseControlTab cct = tab.Tab as ITDICloseControlTab;

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

            if (SaveIfNeed(tab.Tab))
            {
                CloseTab(tab.Tab);
            }
        }