From b36e9d4abfdd6ceefd5d216559a0f49e604cc27d Mon Sep 17 00:00:00 2001 From: Dominique Louis Date: Tue, 11 Sep 2018 01:12:30 +0100 Subject: [Mac] Add filtering capabilities to brush popUp controller. --- .../Controls/Custom/BrushTabViewController.cs | 43 ++++++++++++++++------ .../Controls/Custom/ResourceBrushViewController.cs | 9 ++++- .../Controls/Custom/UnderlinedTabViewController.cs | 4 +- 3 files changed, 41 insertions(+), 15 deletions(-) (limited to 'Xamarin.PropertyEditing.Mac/Controls') diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs index 588b4f6..b8f58fd 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs @@ -16,7 +16,22 @@ namespace Xamarin.PropertyEditing.Mac { PreferredContentSize = new CGSize (430, 230); TransitionOptions = NSViewControllerTransitionOptions.None; - EdgeInsets = new NSEdgeInsets (0, 12, 12, 12); + EdgeInsets = new NSEdgeInsets (0, 12, 12, 12); + + this.filterResource = new NSSearchField { + ControlSize = NSControlSize.Mini, + Font = NSFont.FromFontName (PropertyEditorControl.DefaultFontName, PropertyEditorControl.DefaultFontSize), + PlaceholderString = Properties.Resources.SearchResourcesTitle, + }; + + this.filterResource.Changed += (sender, e) => { + ViewModel.ResourceSelector.FilterText = this.filterResource.Cell.Title; + this.resource.ReloadData (); + }; + + this.filterResource.Hidden = true; + + TabStack.AddView (this.filterResource, NSStackViewGravity.Leading); } public override void OnViewModelChanged (BrushPropertyViewModel oldModel) @@ -30,7 +45,7 @@ namespace Xamarin.PropertyEditing.Mac var removed = new HashSet (this.brushTypeTable.Keys); removed.ExceptWith (existing); - foreach (var item in removed.Select (t => new { Type = t, Tab = TabView.Items[this.brushTypeTable[t]] }).ToArray()) { + foreach (var item in removed.Select (t => new { Type = t, Tab = TabView.Items[this.brushTypeTable[t]] }).ToArray ()) { RemoveTabViewItem (item.Tab); item.Tab.Dispose (); this.brushTypeTable.Remove (item.Type); @@ -67,9 +82,9 @@ namespace Xamarin.PropertyEditing.Mac item.Image = NSImage.ImageNamed ("property-brush-palette-16"); break; case CommonBrushType.Resource: - var resource = new ResourceBrushViewController (); - resource.ViewModel = ViewModel; - item.ViewController = resource; + this.resource = new ResourceBrushViewController (); + this.resource.ViewModel = ViewModel; + item.ViewController = this.resource; item.ToolTip = Properties.Resources.ResourceBrush; item.Image = NSImage.ImageNamed ("property-brush-resources-16"); break; @@ -79,7 +94,7 @@ namespace Xamarin.PropertyEditing.Mac item.ViewController = gradient; item.ToolTip = item.Label; item.Image = NSImage.ImageNamed ("property-brush-gradient-16"); - break; + break; default: case CommonBrushType.NoBrush: var none = new EmptyBrushEditorViewController (); @@ -114,10 +129,9 @@ namespace Xamarin.PropertyEditing.Mac public override void WillSelect (NSTabView tabView, NSTabViewItem item) { - var brushController = item.ViewController as NotifyingViewController; - if (brushController != null) + if (item.ViewController is NotifyingViewController brushController) brushController.ViewModel = ViewModel; - + if (this.inhibitSelection) return; @@ -129,13 +143,15 @@ namespace Xamarin.PropertyEditing.Mac if (this.inhibitSelection) return; + ViewModel.SelectedBrushType = ViewModel.BrushTypes[item.Label]; + this.filterResource.Hidden = ViewModel.SelectedBrushType != CommonBrushType.Resource; + base.DidSelect (tabView, item); - ViewModel.SelectedBrushType = ViewModel.BrushTypes [item.Label]; } public override void ViewDidLoad () { - View.Frame = new CGRect (0, 0, 430,230); + View.Frame = new CGRect (0, 0, 430, 230); this.inhibitSelection = true; base.ViewDidLoad (); @@ -143,6 +159,9 @@ namespace Xamarin.PropertyEditing.Mac } private readonly Dictionary brushTypeTable = new Dictionary (); - private bool inhibitSelection; + private bool inhibitSelection; + + private NSSearchField filterResource; + private ResourceBrushViewController resource; } } diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/ResourceBrushViewController.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/ResourceBrushViewController.cs index 94fb844..a212024 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/ResourceBrushViewController.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/ResourceBrushViewController.cs @@ -78,7 +78,7 @@ namespace Xamarin.PropertyEditing.Mac public override void LoadView () { viewDelegate.ViewModel = ViewModel; - resourceSelector = new ResourceOutlineView { + this.resourceSelector = new ResourceOutlineView { Delegate = viewDelegate, }; @@ -88,12 +88,17 @@ namespace Xamarin.PropertyEditing.Mac }; // add the panel to the window - tableContainer.DocumentView = resourceSelector; + tableContainer.DocumentView = this.resourceSelector; View = tableContainer; if (ViewModel != null) { resourceSelector.ViewModel = ViewModel?.ResourceSelector; } } + + public void ReloadData() + { + this.resourceSelector.ReloadData (); + } } } diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs index b401833..b779ed4 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/UnderlinedTabViewController.cs @@ -87,9 +87,11 @@ namespace Xamarin.PropertyEditing.Mac private NSStackView outerStack; private NSStackView innerStack; private NSStackView tabStack = new NSStackView () { - Spacing = 2f, + Spacing = 10f, }; + protected NSStackView TabStack => this.tabStack; + private NSEdgeInsets edgeInsets = new NSEdgeInsets (0, 0, 0, 0); private void SetSelected (int index) -- cgit v1.2.3