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:
Diffstat (limited to 'Xamarin.PropertyEditing.Mac/Controls/BindingEditor/BindingObjectSelectorControl.cs')
-rw-r--r--Xamarin.PropertyEditing.Mac/Controls/BindingEditor/BindingObjectSelectorControl.cs223
1 files changed, 45 insertions, 178 deletions
diff --git a/Xamarin.PropertyEditing.Mac/Controls/BindingEditor/BindingObjectSelectorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/BindingEditor/BindingObjectSelectorControl.cs
index 9022c37..8e82477 100644
--- a/Xamarin.PropertyEditing.Mac/Controls/BindingEditor/BindingObjectSelectorControl.cs
+++ b/Xamarin.PropertyEditing.Mac/Controls/BindingEditor/BindingObjectSelectorControl.cs
@@ -6,206 +6,73 @@ using Xamarin.PropertyEditing.ViewModels;
namespace Xamarin.PropertyEditing.Mac
{
- internal class BindingObjectSelectorControl : NSView
+ internal class BindingObjectSelectorControl
+ : NotifyingView<CreateBindingViewModel>
{
- internal class ObjectOutlineView : NSOutlineView
- {
- private IReadOnlyList<ObjectTreeElement> viewModel;
- public IReadOnlyList<ObjectTreeElement> ViewModel {
- get => this.viewModel;
- set {
- if (this.viewModel != value) {
- this.viewModel = value;
- var dataSource = new ObjectOutlineViewDataSource (this.viewModel);
- Delegate = new ObjectOutlineViewDelegate (dataSource);
- DataSource = dataSource;
- }
-
- if (this.viewModel != null) {
- ReloadData ();
-
- ExpandItem (null, true);
- }
- }
- }
+ private ObjectOutlineView objectOutlineView;
- public ObjectOutlineView ()
- {
- Initialize ();
- }
+ private const string ObjectSelectorColId = "ObjectSelectorColumn";
- // Called when created from unmanaged code
- public ObjectOutlineView (IntPtr handle) : base (handle)
- {
- Initialize ();
- }
+ internal BindingObjectSelectorControl (CreateBindingViewModel viewModel)
+ {
+ if (viewModel == null)
+ throw new ArgumentNullException (nameof (viewModel));
- // Called when created directly from a XIB file
- [Export ("initWithCoder:")]
- public ObjectOutlineView (NSCoder coder) : base (coder)
- {
- Initialize ();
- }
+ ViewModel = viewModel;
- [Export ("validateProposedFirstResponder:forEvent:")]
- public bool ValidateProposedFirstResponder (NSResponder responder, NSEvent forEvent)
- {
- return true;
- }
+ this.objectOutlineView = new ObjectOutlineView ();
+ TranslatesAutoresizingMaskIntoConstraints = false;
- public void Initialize ()
- {
- AutoresizingMask = NSViewResizingMask.WidthSizable;
- HeaderView = null;
- TranslatesAutoresizingMaskIntoConstraints = false;
- }
- }
+ this.objectOutlineView.Activated += OnObjectOutlineViewSelected;
- internal class ObjectOutlineViewDelegate : NSOutlineViewDelegate
- {
- private ObjectOutlineViewDataSource dataSource;
+ var resourceColumn = new NSTableColumn (ObjectSelectorColId);
+ this.objectOutlineView.AddColumn (resourceColumn);
- public ObjectOutlineViewDelegate (ObjectOutlineViewDataSource dataSource)
- {
- this.dataSource = dataSource;
- }
+ // Set OutlineTableColumn or the arrows showing children/expansion will not be drawn
+ this.objectOutlineView.OutlineTableColumn = resourceColumn;
- public override nfloat GetRowHeight (NSOutlineView outlineView, NSObject item)
- {
- return PropertyEditorControl.DefaultControlHeight;
- }
+ // create a table view and a scroll view
+ var outlineViewContainer = new NSScrollView {
+ TranslatesAutoresizingMaskIntoConstraints = false,
+ };
- public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
- {
- var labelContainer = (UnfocusableTextField)outlineView.MakeView ("type", this);
- if (labelContainer == null) {
- labelContainer = new UnfocusableTextField {
- Identifier = "type",
- };
- }
- var target = (item as NSObjectFacade).Target;
-
- switch (target) {
- case KeyValuePair<string, SimpleCollectionView> kvp:
- labelContainer.StringValue = kvp.Key;
- break;
- case TypeInfo info:
- labelContainer.StringValue = info.Name;
- break;
- default:
- labelContainer.StringValue = "Type Not Supported";
- break;
- }
+ // add the panel to the window
+ outlineViewContainer.DocumentView = this.objectOutlineView;
+ AddSubview (outlineViewContainer);
- return labelContainer;
- }
+ AddConstraints (new[] {
+ NSLayoutConstraint.Create (outlineViewContainer, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this, NSLayoutAttribute.Top, 1f, 28f),
+ NSLayoutConstraint.Create (outlineViewContainer, NSLayoutAttribute.Width, NSLayoutRelation.Equal, this, NSLayoutAttribute.Width, 1f, 0f),
+ NSLayoutConstraint.Create (outlineViewContainer, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterX, 1, 0),
+ NSLayoutConstraint.Create (outlineViewContainer, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal,this, NSLayoutAttribute.Bottom, 1f, 0f),
+ });
- public override bool ShouldSelectItem (NSOutlineView outlineView, NSObject item)
- {
- var target = (item as NSObjectFacade).Target;
- switch (target) {
- case KeyValuePair<string, SimpleCollectionView> kvp:
- return false;
- case TypeInfo info:
- return true;
-
- default:
- return false;
- }
- }
+ viewModel.PropertyChanged += OnPropertyChanged;
}
- internal class ObjectOutlineViewDataSource : NSOutlineViewDataSource
+ public override void OnPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
- public IReadOnlyList<ObjectTreeElement> ViewModel { get; }
-
- internal ObjectOutlineViewDataSource (IReadOnlyList<ObjectTreeElement> viewModel)
- {
- if (viewModel == null)
- throw new ArgumentNullException (nameof (viewModel));
-
- ViewModel = viewModel;
- }
-
- public override nint GetChildrenCount (NSOutlineView outlineView, NSObject item)
- {
- var childCount = 0;
- if (item == null) {
- childCount = this.ViewModel != null ? this.ViewModel.Count () : 0;
- } else {
- var target = (item as NSObjectFacade).Target;
- switch (target) {
- case KeyValuePair<string, SimpleCollectionView> kvp:
- childCount = kvp.Value.Count;
- break;
- case TypeInfo info:
- childCount = 0;
- break;
- default:
- childCount = 0;
- break;
- }
- }
+ if (e.PropertyName == nameof (CreateBindingViewModel.ShowObjectSelector)) {
+ Hidden = !ViewModel.ShowObjectSelector;
- return childCount;
+ if (ViewModel.ShowObjectSelector && ViewModel.ObjectElementRoots != null) {
+ this.objectOutlineView.ItemsSource = ViewModel.ObjectElementRoots.Value;
+ };
}
+ }
- public override NSObject GetChild (NSOutlineView outlineView, nint childIndex, NSObject item)
- {
- object element;
-
- if (item == null) {
- element = this.ViewModel.ElementAt ((int)childIndex);
- } else {
- var target = (item as NSObjectFacade).Target;
- switch (target) {
- case KeyValuePair<string, SimpleCollectionView> kvp:
- element = kvp.Value[(int)childIndex];
- break;
- case TypeInfo info:
- element = info;
- break;
- default:
- return null;
+ private void OnObjectOutlineViewSelected (object sender, EventArgs e)
+ {
+ if (sender is ObjectOutlineView rov) {
+ if (rov.SelectedRow != -1) {
+ if (rov.ItemAtRow (rov.SelectedRow) is NSObjectFacade item) {
+ if (item.Target is Resource resource) {
+ ViewModel.SelectedResource = resource;
+ }
}
}
-
- return new NSObjectFacade (element);
- }
-
- public override bool ItemExpandable (NSOutlineView outlineView, NSObject item)
- {
- var target = (item as NSObjectFacade).Target;
- switch (target) {
- case KeyValuePair<string, SimpleCollectionView> kvp:
- return kvp.Value.Count > 0;
- case TypeInfo info:
- return false;
- default:
- return false;
- }
}
}
- internal ObjectOutlineView objectOutlineView;
-
- internal BindingObjectSelectorControl (CreateBindingViewModel viewModel)
- {
- if (viewModel == null)
- throw new ArgumentNullException (nameof (viewModel));
-
- this.objectOutlineView = new ObjectOutlineView ();
- TranslatesAutoresizingMaskIntoConstraints = false;
-
- viewModel.PropertyChanged += (sender, e) => {
- if (e.PropertyName == nameof (CreateBindingViewModel.ShowObjectSelector)) {
- Hidden = !viewModel.ShowObjectSelector;
-
- if (viewModel.ShowObjectSelector && viewModel.ObjectElementRoots != null) {
- this.objectOutlineView.ViewModel = viewModel.ObjectElementRoots.Value;
- };
- }
- };
- }
}
}