1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
using System;
using System.Collections;
using System.Diagnostics;
using System.Drawing;
using AppKit;
using CoreGraphics;
using Xamarin.PropertyEditing.Mac.Resources;
using Xamarin.PropertyEditing.ViewModels;
namespace Xamarin.PropertyEditing.Mac
{
internal abstract class BaseRectangleEditorControl<T> : PropertyEditorControl<PropertyViewModel<T>>
{
protected UnfocusableTextField XLabel { get; set; }
protected NumericSpinEditor<T> XEditor { get; set; }
protected UnfocusableTextField YLabel { get; set; }
protected NumericSpinEditor<T> YEditor { get; set; }
protected UnfocusableTextField WidthLabel { get; set; }
protected NumericSpinEditor<T> WidthEditor { get; set; }
protected UnfocusableTextField HeightLabel { get; set; }
protected NumericSpinEditor<T> HeightEditor { get; set; }
public override NSView FirstKeyView => XEditor;
public override NSView LastKeyView => HeightEditor.DecrementButton;
public BaseRectangleEditorControl ()
{
XLabel = new UnfocusableTextField ();
XEditor = new NumericSpinEditor<T> ();
XEditor.BackgroundColor = NSColor.Clear;
XEditor.Value = 0.0f;
XEditor.ValueChanged += OnInputUpdated;
YLabel = new UnfocusableTextField ();
YEditor = new NumericSpinEditor<T> ();
YEditor.BackgroundColor = NSColor.Clear;
YEditor.Value = 0.0f;
YEditor.ValueChanged += OnInputUpdated;
WidthLabel = new UnfocusableTextField ();
WidthEditor = new NumericSpinEditor<T> ();
WidthEditor.BackgroundColor = NSColor.Clear;
WidthEditor.Value = 0.0f;
WidthEditor.ValueChanged += OnInputUpdated;
HeightLabel = new UnfocusableTextField ();
HeightEditor = new NumericSpinEditor<T> ();
HeightEditor.BackgroundColor = NSColor.Clear;
HeightEditor.Value = 0.0f;
HeightEditor.ValueChanged += OnInputUpdated;
AddSubview (XLabel);
AddSubview (XEditor);
AddSubview (YLabel);
AddSubview (YEditor);
AddSubview (WidthLabel);
AddSubview (WidthEditor);
AddSubview (HeightLabel);
AddSubview (HeightEditor);
this.DoConstraints (new[] {
XEditor.ConstraintTo (this, (xe, c) => xe.Width == 90),
XEditor.ConstraintTo (this, (xe, c) => xe.Height == DefaultControlHeight),
YEditor.ConstraintTo (this, (ye, c) => ye.Width == 90),
YEditor.ConstraintTo (this, (ye, c) => ye.Height == DefaultControlHeight),
WidthEditor.ConstraintTo (this, (we, c) => we.Width == 90),
WidthEditor.ConstraintTo (this, (we, c) => we.Height == DefaultControlHeight),
HeightEditor.ConstraintTo (this, (he, c) => he.Width == 90),
HeightEditor.ConstraintTo (this, (he, c) => he.Height == DefaultControlHeight),
});
UpdateTheme ();
}
protected virtual void OnInputUpdated (object sender, EventArgs e)
{
ViewModel.Value = (T)Activator.CreateInstance (typeof(T), XEditor.Value, YEditor.Value, WidthEditor.Value, HeightEditor.Value);
}
protected override void HandleErrorsChanged (object sender, System.ComponentModel.DataErrorsChangedEventArgs e)
{
UpdateErrorsDisplayed (ViewModel.GetErrors (ViewModel.Property.Name));
}
protected override void UpdateErrorsDisplayed (IEnumerable errors)
{
if (ViewModel.HasErrors) {
SetErrors (errors);
} else {
SetErrors (null);
SetEnabled ();
}
}
protected override void SetEnabled ()
{
XEditor.Editable = ViewModel.Property.CanWrite;
YEditor.Editable = ViewModel.Property.CanWrite;
WidthEditor.Editable = ViewModel.Property.CanWrite;
HeightEditor.Editable = 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);
WidthEditor.AccessibilityEnabled = WidthEditor.Enabled;
WidthEditor.AccessibilityTitle = string.Format (LocalizationResources.AccessibilityWidthEditor, ViewModel.Property.Name);
HeightEditor.AccessibilityEnabled = HeightEditor.Enabled;
HeightEditor.AccessibilityTitle = string.Format (LocalizationResources.AccessibilityHeightEditor, ViewModel.Property.Name);
}
}
}
|