/// <summary> /// Adds a page/tab. /// </summary> /// <param name="button">Page to add. (well, it's a TabButton which is a parent to the page).</param> public void AddPage(TabButton button) { ControlBase page = button.Page; page.Parent = this; page.IsHidden = true; page.Margin = new Margin(6, 6, 6, 6); page.Dock = Pos.Fill; button.Parent = m_TabStrip; button.Dock = Pos.Left; button.SizeToContents(); if (button.TabControl != null) { button.TabControl.UnsubscribeTabEvent(button); } button.TabControl = this; button.Clicked += OnTabPressed; if (null == m_CurrentButton) { button.Press(); } if (TabAdded != null) { TabAdded.Invoke(this, EventArgs.Empty); } Invalidate(); }
/// <summary> /// Lays out the control's interior according to alignment, padding, dock etc. /// </summary> /// <param name="skin">Skin to use.</param> protected override void Layout(Skin.SkinBase skin) { Point largestTab = new Point(5, 5); int num = 0; foreach (var child in Children) { TabButton button = child as TabButton; if (null == button) { continue; } button.SizeToContents(); Margin m = new Margin(); int notFirst = num > 0 ? -1 : 0; if (Dock == Pos.Top) { m.Left = notFirst; button.Dock = Pos.Left; } if (Dock == Pos.Left) { m.Top = notFirst; button.Dock = Pos.Top; } if (Dock == Pos.Right) { m.Top = notFirst; button.Dock = Pos.Top; } if (Dock == Pos.Bottom) { m.Left = notFirst; button.Dock = Pos.Left; } largestTab.X = Math.Max(largestTab.X, button.Width); largestTab.Y = Math.Max(largestTab.Y, button.Height); button.Margin = m; num++; } if (Dock == Pos.Top || Dock == Pos.Bottom) { SetSize(Width, largestTab.Y); } if (Dock == Pos.Left || Dock == Pos.Right) { SetSize(largestTab.X, Height); } base.Layout(skin); }