Example #1
0
        public void AddOverlayWidget(Widget widget, bool animate = false)
        {
            RemoveOverlayWidget(false);

            this.overlayWidget = widget;
            widget.Parent      = this;

            // Emit the add signal so that the A11y system will pick up that a widget has been added to the box
            // but the box won't handle it because widget.Parent has already been set.
            GtkWorkarounds.EmitAddSignal(this, widget);

            OverlayWidgetVisible = true;
            MinimizeAllAutohidden();
            if (animate)
            {
                currentOverlayPosition = Math.Max(0, Allocation.Y + Allocation.Height);
                this.Animate(
                    "ShowOverlayWidget",
                    ShowOverlayWidgetAnimation,
                    finished: (a, b) => {
                    mainBox.Hide();
                },
                    easing: Easing.CubicOut);
            }
            else
            {
                currentOverlayPosition = Math.Max(0, Allocation.Y);
                mainBox.Hide();
                QueueResize();
            }

            UpdateDockbarsVisibility();
        }
Example #2
0
        void LayoutWidgets()
        {
            if (!needsRelayout)
            {
                return;
            }
            needsRelayout = false;

            // Create the needed notebooks and place the widgets in there

            List <DockGroup> tabbedGroups = new List <DockGroup> ();

            GetTabbedGroups(layout, tabbedGroups);

            for (int n = 0; n < tabbedGroups.Count; n++)
            {
                DockGroup grp = tabbedGroups [n];
                TabStrip  ts;
                if (n < notebooks.Count)
                {
                    ts = notebooks [n];
                }
                else
                {
                    ts = new TabStrip(frame);
                    ts.Show();
                    notebooks.Add(ts);
                    ts.Parent = this;

                    GtkWorkarounds.EmitAddSignal(this, ts);
                }
                frame.UpdateRegionStyle(grp);
                ts.VisualStyle = grp.VisualStyle;
                grp.UpdateNotebook(ts);
            }

            // Remove spare tab strips
            for (int n = notebooks.Count - 1; n >= tabbedGroups.Count; n--)
            {
                TabStrip ts = notebooks [n];
                notebooks.RemoveAt(n);
                ts.Clear();
                ts.Unparent();
                ts.Destroy();
            }

            // Create and add the required splitters

            int reqSpliters = CountRequiredSplitters(layout);

            for (int n = 0; n < splitters.Count; n++)
            {
                var s = splitters [n];
                if (s.Parent != null)
                {
                    Remove(s);
                }
            }

            // Hide the splitters that are not required

            for (int n = reqSpliters; n < splitters.Count; n++)
            {
                splitters[n].Hide();
            }

            // Add widgets to the container

            layout.LayoutWidgets();

            // Create and add the required splitters

            for (int n = 0; n < reqSpliters; n++)
            {
                if (n < splitters.Count)
                {
                    var s = splitters [n];
                    if (!s.Visible)
                    {
                        s.Show();
                    }
                    Add(s);
                }
                else
                {
                    var s = new SplitterWidget();
                    splitters.Add(s);
                    s.Show();
                    Add(s);
                }
            }
        }