diff options
author | Eric Maupin <ermaup@microsoft.com> | 2018-09-18 22:48:12 +0300 |
---|---|---|
committer | Eric Maupin <ermaup@microsoft.com> | 2018-10-03 20:24:50 +0300 |
commit | 6f85298ec4271883a6c5c558f70e17afd5681ec3 (patch) | |
tree | 81522ad6302646710915da2180f2eeefac7c6725 /Xamarin.PropertyEditing.Mac/Controls/Custom | |
parent | 975418467231e9777df106a9c1a84c455d6dd7d8 (diff) |
[mac] Don't rebuild tab list for every single tab change
Diffstat (limited to 'Xamarin.PropertyEditing.Mac/Controls/Custom')
-rw-r--r-- | Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs | 73 |
1 files changed, 37 insertions, 36 deletions
diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs index e4d4b5f..51fd587 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs @@ -1,37 +1,45 @@ -using System.Linq; +using System;
+using System.Linq; using AppKit; namespace Xamarin.PropertyEditing.Mac { - internal class UnderlinedTabViewController<TViewModel> : NotifyingTabViewController<TViewModel> where TViewModel : NotifyingObject + internal class UnderlinedTabViewController<TViewModel> + : NotifyingTabViewController<TViewModel> + where TViewModel : NotifyingObject { - public override void NumberOfItemsChanged (NSTabView tabView) + public override void AddTabViewItem (NSTabViewItem item) { - base.NumberOfItemsChanged (tabView); - var items = this.tabStack.Views.ToList (); - foreach (var view in items) { - this.tabStack.RemoveView (view); - view.Dispose (); - } - var i = 0; - foreach (var item in TabViewItems) { - if (item.Image != null) { - this.tabStack.AddView (new UnderlinedImageView (item.Image.Name) { - Selected = i == SelectedTabViewItemIndex, - ToolTip = item.ToolTip, - }, NSStackViewGravity.Leading); - } else { - this.tabStack.AddView (new UnderlinedTextField () { - BackgroundColor = NSColor.Clear, - Editable = false, - Bezeled = false, - StringValue = item.Label, - Selected = i == SelectedTabViewItemIndex, - ToolTip = item.ToolTip, - }, NSStackViewGravity.Leading); - } - i++; - } + base.AddTabViewItem (item); +
+ NSView tabView; + if (item.Image != null) { + tabView = new UnderlinedImageView (item.Image.Name) { + Selected = this.tabStack.Views.Length == SelectedTabViewItemIndex, + ToolTip = item.ToolTip
+ }; + } else { + tabView = new UnderlinedTextField { + BackgroundColor = NSColor.Clear, + Editable = false, + Bezeled = false, + StringValue = item.Label, + Selected = this.tabStack.Views.Length == SelectedTabViewItemIndex, + ToolTip = item.ToolTip
+ }; + }
+
+ this.tabStack.AddView (tabView, NSStackViewGravity.Leading); + } + + public override void RemoveTabViewItem (NSTabViewItem tabViewItem) + {
+ int index = (int)TabView.IndexOf (tabViewItem);
+ NSView tabView = this.tabStack.Views[index];
+ this.tabStack.RemoveView (tabView);
+ tabView.Dispose ();
+
+ base.RemoveTabViewItem (tabViewItem); } private NSStackView outerStack; @@ -58,14 +66,7 @@ namespace Xamarin.PropertyEditing.Mac if (!(hit is IUnderliningTabView)) return; - int i = 0; - foreach (var label in tabStack.Views) { - if (hit == label) { - SelectedTabViewItemIndex = i; - break; - } - i++; - } + SelectedTabViewItemIndex = Array.IndexOf (this.tabStack.Views, hit); } public override void DidSelect (NSTabView tabView, NSTabViewItem item) |