Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/Xamarin.PropertyEditing.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Maupin <me@ermau.com>2017-06-19 20:21:20 +0300
committerEric Maupin <me@ermau.com>2017-06-19 22:51:39 +0300
commit76e5686b27a19c0e83a37ac32728adcc4df07b2c (patch)
tree576723c76de0664623959d4d5e2a81a9c7776e6f /Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs
parent89926082d227a2a27708bf41645893ed55900bb2 (diff)
[Mac] Improve search/arrange
This does a number of things: - We now auto-expand categories when searching - We now remember & restore open categories from searching and switching arrange modes. - Order & Grouping are now cached rather than running every cell. - Order & Grouping are now a view on the existing list of properties, using the same view models.
Diffstat (limited to 'Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs')
-rw-r--r--Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs66
1 files changed, 56 insertions, 10 deletions
diff --git a/Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs b/Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs
index 8b01f2c..f46220b 100644
--- a/Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs
+++ b/Xamarin.PropertyEditing.Mac/PropertyTableDataSource.cs
@@ -3,34 +3,80 @@ using System.Collections.Generic;
using System.Linq;
using AppKit;
using Foundation;
-using Xamarin.PropertyEditing.Mac.ViewModels;
using Xamarin.PropertyEditing.ViewModels;
namespace Xamarin.PropertyEditing.Mac
{
- public class PropertyTableDataSource : NSOutlineViewDataSource
+ internal class PropertyTableDataSource
+ : NSOutlineViewDataSource
{
- internal MacPanelViewModel ViewModel { get; private set; }
- public ICollection<object> SelectedItems => ViewModel.SelectedObjects;
-
- internal PropertyTableDataSource (MacPanelViewModel viewModel)
+ internal PropertyTableDataSource (PanelViewModel panelVm)
{
- ViewModel = viewModel;
+ if (panelVm == null)
+ throw new ArgumentNullException (nameof (panelVm));
+
+ this.vm = panelVm;
}
+ public PanelViewModel DataContext => this.vm;
+
public override nint GetChildrenCount (NSOutlineView outlineView, NSObject item)
{
- return ViewModel.GetChildrenCount (item);
+ if (this.vm.ArrangedProperties.Count == 0)
+ return 0;
+
+ if (this.vm.ArrangeMode == PropertyArrangeMode.Name)
+ return this.vm.ArrangedProperties[0].Count;
+
+ if (item == null)
+ return this.vm.ArrangedProperties.Count;
+ else
+ return ((IGroupingList<string, PropertyViewModel>)((NSObjectFacade)item).Target).Count;
}
public override NSObject GetChild (NSOutlineView outlineView, nint childIndex, NSObject item)
{
- return ViewModel.GetChildObject ((int)childIndex, item);
+ object element;
+ if (this.vm.ArrangeMode == PropertyArrangeMode.Name) {
+ element = (this.vm.ArrangedProperties[0][(int)childIndex]);
+ } else {
+ if (item == null)
+ element = this.vm.ArrangedProperties[(int)childIndex];
+ else {
+ element = ((IGroupingList<string, PropertyViewModel>)((NSObjectFacade)item).Target)[(int)childIndex];
+ }
+ }
+
+ return GetFacade (element);
}
public override bool ItemExpandable (NSOutlineView outlineView, NSObject item)
{
- return ViewModel.ItemExpandable (item);
+ if (this.vm.ArrangeMode == PropertyArrangeMode.Name)
+ return false;
+
+ return ((NSObjectFacade)item).Target is IGroupingList<string, PropertyViewModel>;
}
+
+ public NSObject GetFacade (object element)
+ {
+ NSObject facade;
+ if (element is IGrouping<string, PropertyViewModel>) {
+ if (!this.groupFacades.TryGetValue (element, out facade)) {
+ this.groupFacades[element] = facade = new NSObjectFacade (element);
+ }
+ } else
+ facade = new NSObjectFacade (element);
+
+ return facade;
+ }
+
+ public bool TryGetFacade (object element, out NSObject facade)
+ {
+ return this.groupFacades.TryGetValue (element, out facade);
+ }
+
+ private readonly PanelViewModel vm;
+ private readonly Dictionary<object, NSObject> groupFacades = new Dictionary<object, NSObject> ();
}
}