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(); }
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); } } }