using System; using System.Collections; using System.Diagnostics; using AppKit; using Xamarin.PropertyEditing.Mac.Resources; using Xamarin.PropertyEditing.ViewModels; namespace Xamarin.PropertyEditing.Mac { internal abstract class BasePointEditorControl : PropertyEditorControl> { internal UnfocusableTextField XLabel { get; set; } internal NumericSpinEditor XEditor { get; set; } internal UnfocusableTextField YLabel { get; set; } internal NumericSpinEditor YEditor { get; set; } public override NSView FirstKeyView => XEditor; public override NSView LastKeyView => YEditor.DecrementButton; protected BasePointEditorControl (IHostResourceProvider hostResources) : base (hostResources) { XLabel = new UnfocusableTextField { Font = NSFont.FromFontName (DefaultFontName, DefaultDescriptionLabelFontSize), TranslatesAutoresizingMaskIntoConstraints = false, }; XEditor = new NumericSpinEditor (hostResources) { BackgroundColor = NSColor.Clear, Value = 0.0f }; XEditor.ValueChanged += OnInputUpdated; YLabel = new UnfocusableTextField { Font = NSFont.FromFontName (DefaultFontName, DefaultDescriptionLabelFontSize), TranslatesAutoresizingMaskIntoConstraints = false, }; YEditor = new NumericSpinEditor (hostResources) { BackgroundColor = NSColor.Clear, Value = 0.0f }; YEditor.ValueChanged += OnInputUpdated; AddSubview (XLabel); AddSubview (XEditor); AddSubview (YLabel); AddSubview (YEditor); const float editorHeight = 18; this.AddConstraints (new[] { NSLayoutConstraint.Create (XEditor, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this, NSLayoutAttribute.Top, 1f, 3f), NSLayoutConstraint.Create (XEditor, NSLayoutAttribute.Left, NSLayoutRelation.Equal, this, NSLayoutAttribute.Left, 1f, 0f), NSLayoutConstraint.Create (XEditor, NSLayoutAttribute.Right, NSLayoutRelation.Equal, YEditor, NSLayoutAttribute.Left, 1f, -10f), NSLayoutConstraint.Create (XEditor, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, editorHeight), NSLayoutConstraint.Create (XLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, XEditor, NSLayoutAttribute.Bottom, 1f, -4f), NSLayoutConstraint.Create (XLabel, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, editorHeight), NSLayoutConstraint.Create (YEditor, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this, NSLayoutAttribute.Top, 1f, 3f), NSLayoutConstraint.Create (YEditor, NSLayoutAttribute.Right, NSLayoutRelation.Equal, this, NSLayoutAttribute.Right, 1f, 0), NSLayoutConstraint.Create (YEditor, NSLayoutAttribute.Width, NSLayoutRelation.Equal, XEditor, NSLayoutAttribute.Width, 1f, 0f), NSLayoutConstraint.Create (YEditor, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, editorHeight), NSLayoutConstraint.Create (YLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, XLabel, NSLayoutAttribute.Top, 1f, 0f), NSLayoutConstraint.Create (YLabel, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, editorHeight), NSLayoutConstraint.Create (XLabel, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, XEditor.Subviews[0], NSLayoutAttribute.CenterX, 1f, 0), NSLayoutConstraint.Create (YLabel, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, YEditor.Subviews[0], NSLayoutAttribute.CenterX, 1f, 0), }); ViewDidChangeEffectiveAppearance (); } public override void ViewDidChangeEffectiveAppearance () { XLabel.TextColor = HostResources.GetNamedColor (NamedResources.DescriptionLabelColor); YLabel.TextColor = HostResources.GetNamedColor (NamedResources.DescriptionLabelColor); } protected override void SetEnabled () { XEditor.Enabled = ViewModel.Property.CanWrite; YEditor.Enabled = ViewModel.Property.CanWrite; } protected override void UpdateAccessibilityValues () { XEditor.AccessibilityEnabled = XEditor.Enabled; XEditor.AccessibilityTitle = string.Format (LocalizationResources.AccessibilityXEditor, ViewModel.Property.Name); YEditor.AccessibilityEnabled = YEditor.Enabled; YEditor.AccessibilityTitle = string.Format (LocalizationResources.AccessibilityYEditor, ViewModel.Property.Name); } protected virtual void OnInputUpdated (object sender, EventArgs e) { ViewModel.Value = (T)Activator.CreateInstance (typeof (T), XEditor.Value, YEditor.Value); } } }