Пример #1
0
        private void tsbtnSetpointMode_Click(object sender, EventArgs e)
        {
            progState.CurrentMode = 2;

            // если режим уже выбран
            if (!tsbtnSetpointMode.Checked)
            {
                tsbtnSplitterMode.Checked = false;
                tsbtnSetpointMode.Checked = true;
                tsbtnGeneralMode.Checked  = false;
                return;
            }
            else
            {
                CurrentModeChanged?.Invoke(this);

                // оставляем отмеченным только его
                tsbtnSplitterMode.Checked = false;
                tsbtnGeneralMode.Checked  = false;

                // уничтожаем контрол
                Control tmp = tblpControl.GetControlFromPosition(0, 0);
                if (tmp != null)
                {
                    if (tmp != setptModeControl)
                    {
                        tblpControl.Controls.Remove(tmp);
                    }
                    else
                    {
                        return;
                    }
                }

                // создаём контрол
                setptModeControl = new SetptModeControl(this);
                tblpControl.Controls.Add(setptModeControl);
                setptModeControl.Anchor   = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
                setptModeControl.Location = new Point(3, 3);
            }
        }
        public void SetCurrentMode(DocumentViewContainerMode mode, GtkShellDocumentViewItem newActive)
        {
            if (this.currentMode == mode)
            {
                return;
            }

            // Save current split sizes
            if (currentContainer is GtkShellDocumentViewContainerSplit split)
            {
                splitSizes = split.GetRelativeSplitSizes();
            }

            this.currentMode = mode;

            GtkShellDocumentViewItem        activeView = null;
            List <GtkShellDocumentViewItem> allViews   = null;

            if (currentContainer != null)
            {
                activeView = currentContainer.ActiveView;
                currentContainer.ActiveViewChanged -= Container_ActiveViewChanged;
                allViews = currentContainer.GetAllViews().ToList();
                currentContainer.Widget.Hide();
                currentContainer.RemoveAllViews();
            }

            if (mode == DocumentViewContainerMode.Tabs)
            {
                if (tabsContainer == null)
                {
                    tabsContainer = new GtkShellDocumentViewContainerTabs();
                    rootTabsBox.PackStart(tabsContainer.Widget, true, true, 0);
                }
                currentContainer = tabsContainer;
            }
            else
            {
                if (splitContainer == null)
                {
                    splitContainer = new GtkShellDocumentViewContainerSplit(mode);
                    rootTabsBox.PackStart(splitContainer.Widget, true, true, 0);
                }
                currentContainer = splitContainer;
                if (hasSplit)
                {
                    tabstrip.ActiveTab = tabstrip.TabCount - 1;
                }
            }

            if (allViews != null)
            {
                currentContainer.AddViews(allViews);
            }

            // Restore current split sizes
            if (splitSizes != null && currentContainer is GtkShellDocumentViewContainerSplit newSplit)
            {
                newSplit.SetRelativeSplitSizes(splitSizes);
            }

            currentContainer.ActiveView         = newActive ?? activeView;
            currentContainer.ActiveViewChanged += Container_ActiveViewChanged;
            currentContainer.Widget.Show();

            if (newActive != activeView)
            {
                ActiveViewChanged?.Invoke(this, EventArgs.Empty);
            }

            CurrentModeChanged?.Invoke(this, EventArgs.Empty);
        }