From: jpbruyere Date: Tue, 16 Feb 2016 11:25:34 +0000 (+0100) Subject: close but on tabItem, SelectedTab checks X-Git-Tag: v0.4~127^2~8 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=84bb37ebb6350b00c14243a11125ab3a08cfdf05;p=jp%2Fcrow.git close but on tabItem, SelectedTab checks --- diff --git a/Templates/TabItem.crow b/Templates/TabItem.crow index 63b0b9cf..a889f4ee 100644 --- a/Templates/TabItem.crow +++ b/Templates/TabItem.crow @@ -1,11 +1,21 @@  - diff --git a/Tests/Interfaces/testTabView.crow b/Tests/Interfaces/testTabView.crow index 32a52555..953dd8c1 100644 --- a/Tests/Interfaces/testTabView.crow +++ b/Tests/Interfaces/testTabView.crow @@ -1,9 +1,8 @@  - - + + @@ -12,9 +11,7 @@ - + @@ -23,21 +20,17 @@ - - + + + + - + @@ -48,8 +41,6 @@ diff --git a/src/GraphicObjects/TabItem.cs b/src/GraphicObjects/TabItem.cs index a166319a..b0e733fb 100644 --- a/src/GraphicObjects/TabItem.cs +++ b/src/GraphicObjects/TabItem.cs @@ -122,11 +122,11 @@ namespace Crow gr.LineTo (TabTitle.Slot.Left - spacing, TabTitle.Slot.Bottom); gr.CurveTo ( TabTitle.Slot.Left - spacing / 2, TabTitle.Slot.Bottom, - TabTitle.Slot.Left - spacing / 2, 0, - TabTitle.Slot.Left, 0); - gr.LineTo (TabTitle.Slot.Right, 0); + TabTitle.Slot.Left - spacing / 2, 1, + TabTitle.Slot.Left, 1); + gr.LineTo (TabTitle.Slot.Right, 1); gr.CurveTo ( - TabTitle.Slot.Right + spacing / 2, 0, + TabTitle.Slot.Right + spacing / 2, 1, TabTitle.Slot.Right + spacing / 2, TabTitle.Slot.Bottom, TabTitle.Slot.Right + spacing, TabTitle.Slot.Bottom); gr.LineTo (Slot.Width, TabTitle.Slot.Bottom); @@ -178,7 +178,6 @@ namespace Crow TabView tv = Parent as TabView; TabItem previous = null, next = null; int tmp = TabOffset + e.XDelta; - Debug.WriteLine (tmp); if (tmp < tv.Spacing) TabOffset = tv.Spacing; else if (tmp > Parent.getSlot ().Width - TabTitle.Slot.Width - tv.Spacing) @@ -207,6 +206,9 @@ namespace Crow TabOffset = tmp; } } + public void butCloseTabClick (object sender, OpenTK.Input.MouseButtonEventArgs e){ + (Parent as TabView).RemoveChild(this); + } #endregion } diff --git a/src/GraphicObjects/TabView.cs b/src/GraphicObjects/TabView.cs index 3e90d35c..a480ae09 100644 --- a/src/GraphicObjects/TabView.cs +++ b/src/GraphicObjects/TabView.cs @@ -69,21 +69,20 @@ namespace Crow public virtual int SelectedTab { get { return selectedTab; } set { - if (selectedTab == value) - return; - - (Children [selectedTab] as TabItem).IsSelected = false; + if (selectedTab < Children.Count && SelectedTab >= 0) + (Children [selectedTab] as TabItem).IsSelected = false; selectedTab = value; - (Children [selectedTab] as TabItem).IsSelected = true; + if (selectedTab < Children.Count && SelectedTab >= 0) + (Children [selectedTab] as TabItem).IsSelected = true; NotifyValueChanged ("SelectedTab", selectedTab); registerForGraphicUpdate (); } } int tabThickness; - [XmlAttributeAttribute()][DefaultValue(20)] + [XmlAttributeAttribute()][DefaultValue(22)] public virtual int TabThickness { get { return tabThickness; } set { @@ -93,6 +92,14 @@ namespace Crow NotifyValueChanged ("TabThickness", tabThickness); } } + + //prevent caching, because drawing order is different depending on selected tab + [XmlAttributeAttribute()][DefaultValue(false)] + public override bool CacheEnabled { + get {return false;} + set { } + } + public override T AddChild (T child) { TabItem ti = child as TabItem; @@ -110,11 +117,12 @@ namespace Crow } public override void RemoveChild (GraphicObject child) { - TabItem ti = child as TabItem; + int idx = Children.IndexOf (child); base.RemoveChild (child); - if (ti.IsSelected) - SelectedTab = Math.Min(0, Children.Count - 1); - + if (selectedTab > Children.Count - 1) + SelectedTab--; + else + SelectedTab = selectedTab; } public override bool ArrangeChildren { get { return true; } } public override bool UpdateLayout (LayoutingType layoutType) @@ -166,7 +174,9 @@ namespace Crow continue; Children [i].Paint (ref gr); } - Children [SelectedTab].Paint (ref gr); + + if (SelectedTab < Children.Count && SelectedTab >= 0) + Children [SelectedTab].Paint (ref gr); gr.Restore (); } @@ -178,6 +188,10 @@ namespace Crow HostContainer.hoverWidget = this; onMouseEnter (this, e); } + + if (SelectedTab > Children.Count - 1) + return; + if (((Children[SelectedTab] as TabItem).Content.Parent as GraphicObject).MouseIsIn(e.Position)) { Children[SelectedTab].checkHoverWidget (e);