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 <ermaup@microsoft.com>2019-02-21 01:40:34 +0300
committerEric Maupin <ermaup@microsoft.com>2019-02-21 01:45:03 +0300
commitaf9ca3b7b44d4a9d00ec76e9116a2c9d204ae501 (patch)
tree85c06192ba3eac8628aaba98a93722bfa435109f /Xamarin.PropertyEditing.Mac
parent82cc1d7043a0bcdcd2fc41df66a4bf880a4568ae (diff)
[mac] TypeEditorControl
Diffstat (limited to 'Xamarin.PropertyEditing.Mac')
-rw-r--r--Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs151
-rw-r--r--Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs1
-rw-r--r--Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj1
3 files changed, 153 insertions, 0 deletions
diff --git a/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs
new file mode 100644
index 0000000..a7ca19e
--- /dev/null
+++ b/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs
@@ -0,0 +1,151 @@
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Threading.Tasks;
+using AppKit;
+using Foundation;
+using Xamarin.PropertyEditing.ViewModels;
+
+namespace Xamarin.PropertyEditing.Mac
+{
+ internal class TypeEditorControl
+ : PropertyEditorControl<TypePropertyViewModel>
+ {
+ public TypeEditorControl (IHostResourceProvider hostResources)
+ : base (hostResources)
+ {
+ this.typeLabel = new UnfocusableTextField {
+ TranslatesAutoresizingMaskIntoConstraints = false
+ };
+ AddSubview (this.typeLabel);
+
+ this.selectType = new NSButton {
+ Title = Properties.Resources.Select,
+ TranslatesAutoresizingMaskIntoConstraints = false,
+ BezelStyle = NSBezelStyle.Rounded
+ };
+ this.selectType.Activated += OnSelectPressed;
+ AddSubview (this.selectType);
+
+ this.buttonConstraint = NSLayoutConstraint.Create (this.selectType, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, this.typeLabel, NSLayoutAttribute.Trailing, 1f, 12);
+
+ AddConstraints (new[] {
+ NSLayoutConstraint.Create (this.typeLabel, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, this, NSLayoutAttribute.Leading, 1f, 0f),
+ NSLayoutConstraint.Create (this.typeLabel, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterY, 1f, 0f),
+ NSLayoutConstraint.Create (this.typeLabel, NSLayoutAttribute.Height, NSLayoutRelation.Equal, this, NSLayoutAttribute.Height, 1, 0),
+ this.buttonConstraint,
+ NSLayoutConstraint.Create (this.selectType, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, this, NSLayoutAttribute.Leading, 1, 0).WithPriority (NSLayoutPriority.DefaultLow),
+ NSLayoutConstraint.Create (this.selectType, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterY, 1f, 0f),
+ NSLayoutConstraint.Create (this.selectType, NSLayoutAttribute.Width, NSLayoutRelation.GreaterThanOrEqual, 1f, 70f),
+ });
+ }
+
+ public override NSView FirstKeyView => this.selectType;
+
+ public override NSView LastKeyView => this.selectType;
+
+ protected override void UpdateValue ()
+ {
+ }
+
+ protected override void UpdateErrorsDisplayed (IEnumerable errors)
+ {
+ }
+
+ protected override void HandleErrorsChanged (object sender, DataErrorsChangedEventArgs e)
+ {
+ }
+
+ protected override void SetEnabled ()
+ {
+ this.selectType.Enabled = ViewModel.Property.CanWrite;
+ }
+
+ protected override void UpdateAccessibilityValues ()
+ {
+ this.selectType.AccessibilityTitle = String.Format (Properties.Resources.SelectTypeForProperty, ViewModel.Property.Name);
+ }
+
+ protected override void OnViewModelChanged (PropertyViewModel oldModel)
+ {
+ base.OnViewModelChanged (oldModel);
+
+ if (oldModel is TypePropertyViewModel tvm) {
+ tvm.TypeRequested -= OnTypeRequested;
+ }
+
+ if (ViewModel != null) {
+ ViewModel.TypeRequested += OnTypeRequested;
+
+ OnPropertyChanged (ViewModel, new PropertyChangedEventArgs (null));
+ }
+ }
+
+ protected override void OnPropertyChanged (object sender, PropertyChangedEventArgs e)
+ {
+ switch (e.PropertyName) {
+ case nameof (TypePropertyViewModel.Value):
+ UpdateTypeLabel ();
+ break;
+ case null:
+ case "":
+ UpdateTypeLabel ();
+ UpdateCreateInstanceCommand ();
+ break;
+ }
+
+ base.OnPropertyChanged (sender, e);
+ }
+
+ private readonly UnfocusableTextField typeLabel;
+ private readonly NSButton selectType;
+ private readonly NSLayoutConstraint buttonConstraint;
+
+ private void OnCreateInstanceExecutableChanged (object sender, EventArgs e)
+ {
+ UpdateCreateInstanceCommand ();
+ }
+
+ private void OnTypeRequested (object sender, TypeRequestedEventArgs e)
+ {
+ e.SelectedType = e.RequestAt (HostResources, this.selectType, ViewModel.AssignableTypes);
+ }
+
+ private void UpdateTypeLabel ()
+ {
+ if (ViewModel.Value == null) {
+ this.typeLabel.StringValue = String.Empty;
+ this.buttonConstraint.Active = false;
+ } else {
+ this.typeLabel.StringValue = $"({ViewModel.Value.Name})";
+ this.buttonConstraint.Active = true;
+ }
+ }
+
+ private void UpdateCreateInstanceCommand ()
+ {
+ this.selectType.Enabled = ViewModel.SelectTypeCommand.CanExecute (null);
+ }
+
+ private void OnSelectPressed (object sender, EventArgs e)
+ {
+ ViewModel.SelectTypeCommand.Execute (null);
+ }
+
+ private class PopoverDelegate<T>
+ : NSPopoverDelegate
+ {
+ public PopoverDelegate (TaskCompletionSource<T> tcs)
+ {
+ this.tcs = tcs;
+ }
+
+ public override void WillClose (NSNotification notification)
+ {
+ this.tcs.TrySetCanceled ();
+ }
+
+ private readonly TaskCompletionSource<T> tcs;
+ }
+ }
+}
diff --git a/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs b/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs
index cb96191..29bc5b2 100644
--- a/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs
+++ b/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs
@@ -55,6 +55,7 @@ namespace Xamarin.PropertyEditing.Mac
{typeof (ThicknessPropertyViewModel), typeof (CommonThicknessEditorControl) },
{typeof (PropertyGroupViewModel), typeof (GroupEditorControl)},
{typeof (ObjectPropertyViewModel), typeof (ObjectEditorControl)},
+ {typeof (TypePropertyViewModel), typeof (TypeEditorControl)},
};
}
diff --git a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj
index 15e8123..b23ec1a 100644
--- a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj
+++ b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj
@@ -150,6 +150,7 @@
<Compile Include="Controls\TypeSelectorWindow.cs" />
<Compile Include="Controls\Custom\PropertyTextField.cs" />
<Compile Include="Controls\ControlExtensions.cs" />
+ <Compile Include="Controls\TypeEditorControl.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controls\" />