diff --git a/Xamarin.PropertyEditing.Mac/Controls/BaseDateTimeEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/BaseDateTimeEditorControl.cs new file mode 100644 index 0000000..795c44e --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/BaseDateTimeEditorControl.cs @@ -0,0 +1,58 @@ +using System; +using AppKit; +using Xamarin.PropertyEditing.ViewModels; + +namespace Xamarin.PropertyEditing.Mac +{ + internal abstract class BaseDateTimeEditorControl : PropertyEditorControl> + { + public NSDatePicker DatePicker { get; } + + public BaseDateTimeEditorControl (IHostResourceProvider hostResources) + : base (hostResources) + { + DatePicker = new NSDatePicker { + ControlSize = NSControlSize.Small, + DatePickerElements = NSDatePickerElementFlags.HourMinuteSecond | NSDatePickerElementFlags.YearMonthDateDay, + DatePickerStyle = NSDatePickerStyle.TextFieldAndStepper, + Font = NSFont.SystemFontOfSize (NSFont.SystemFontSizeForControlSize (NSControlSize.Small)), + TimeZone = Foundation.NSTimeZone.FromAbbreviation ("UTC"), + TranslatesAutoresizingMaskIntoConstraints = false, + }; + + // update the value on keypress + DatePicker.Activated += Editor_Activated; + + AddSubview (DatePicker); + + AddConstraints (new[] { + NSLayoutConstraint.Create (DatePicker, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterY, 1f, 0f), + NSLayoutConstraint.Create (DatePicker, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, this, NSLayoutAttribute.Leading, 1f, 0f), + NSLayoutConstraint.Create (DatePicker, NSLayoutAttribute.Width, NSLayoutRelation.Equal, this, NSLayoutAttribute.Width, 1f, 0), + NSLayoutConstraint.Create (DatePicker, NSLayoutAttribute.Height, NSLayoutRelation.Equal, this, NSLayoutAttribute.Height, 1f, -6f), + }); + } + + protected abstract void Editor_Activated (object sender, EventArgs e); + + public override NSView FirstKeyView => DatePicker; + public override NSView LastKeyView => DatePicker; + + protected override void SetEnabled () + { + DatePicker.Enabled = ViewModel.Property.CanWrite; + } + + protected override void UpdateAccessibilityValues () + { + DatePicker.AccessibilityTitle = string.Format (Properties.Resources.AccessibilityDateTime, ViewModel.Property.Name); + DatePicker.Enabled = DatePicker.Enabled; + } + + protected override void Dispose (bool disposing) + { + DatePicker.Activated -= Editor_Activated; + base.Dispose (disposing); + } + } +} \ No newline at end of file diff --git a/Xamarin.PropertyEditing.Mac/Controls/DateEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/DateEditorControl.cs new file mode 100644 index 0000000..7249f0d --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/DateEditorControl.cs @@ -0,0 +1,27 @@ +using System; +using AppKit; +using Xamarin.PropertyEditing.Common; + +namespace Xamarin.PropertyEditing.Mac +{ + internal class DateEditorControl : BaseDateTimeEditorControl + { + + public DateEditorControl (IHostResourceProvider hostResources) + : base (hostResources) + { + DatePicker.DatePickerElements = NSDatePickerElementFlags.YearMonthDateDay; + } + + protected override void Editor_Activated (object sender, EventArgs e) + { + ViewModel.Value = new Date (DatePicker.DateValue.ToDateTime ()); + } + + protected override void UpdateValue () + { + if (ViewModel.Value != null) + DatePicker.DateValue = ViewModel.Value.DateTime.ToNSDate (); + } + } +} diff --git a/Xamarin.PropertyEditing.Mac/Controls/DateTimeEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/DateTimeEditorControl.cs index 36532e2..53874ae 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/DateTimeEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/DateTimeEditorControl.cs @@ -1,65 +1,22 @@ using System; -using AppKit; -using Xamarin.PropertyEditing.ViewModels; namespace Xamarin.PropertyEditing.Mac { - internal class DateTimeEditorControl : PropertyEditorControl> - { - private readonly NSDatePicker datePicker; - + internal class DateTimeEditorControl : BaseDateTimeEditorControl + { public DateTimeEditorControl (IHostResourceProvider hostResources) : base (hostResources) - { - this.datePicker = new NSDatePicker { - ControlSize = NSControlSize.Small, - DatePickerElements = NSDatePickerElementFlags.HourMinuteSecond | NSDatePickerElementFlags.YearMonthDateDay, - DatePickerStyle = NSDatePickerStyle.TextFieldAndStepper, - Font = NSFont.SystemFontOfSize (NSFont.SystemFontSizeForControlSize (NSControlSize.Small)), - TranslatesAutoresizingMaskIntoConstraints = false - }; - - // update the value on keypress - this.datePicker.Activated += Editor_Activated; - - AddSubview (this.datePicker); - - AddConstraints (new[] { - NSLayoutConstraint.Create (this.datePicker, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, this, NSLayoutAttribute.CenterY, 1f, 0f), - NSLayoutConstraint.Create (this.datePicker, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, this, NSLayoutAttribute.Leading, 1f, 0f), - NSLayoutConstraint.Create (this.datePicker, NSLayoutAttribute.Width, NSLayoutRelation.Equal, this, NSLayoutAttribute.Width, 1f, 0), - NSLayoutConstraint.Create (this.datePicker, NSLayoutAttribute.Height, NSLayoutRelation.Equal, this, NSLayoutAttribute.Height, 1f, -6f), - }); - } - - private void Editor_Activated (object sender, EventArgs e) { - ViewModel.Value = this.datePicker.DateValue.ToDateTime (); } - - public override NSView FirstKeyView => this.datePicker; - public override NSView LastKeyView => this.datePicker; + + protected override void Editor_Activated (object sender, EventArgs e) + { + ViewModel.Value = DatePicker.DateValue.ToDateTime (); + } protected override void UpdateValue () { - this.datePicker.DateValue = ViewModel.Value.ToNSDate (); - } - - protected override void SetEnabled () - { - this.datePicker.Enabled = ViewModel.Property.CanWrite; - } - - protected override void UpdateAccessibilityValues () - { - this.datePicker.AccessibilityTitle = string.Format (Properties.Resources.AccessibilityDateTime, ViewModel.Property.Name); - this.datePicker.Enabled = this.datePicker.Enabled; - } - - protected override void Dispose (bool disposing) - { - this.datePicker.Activated -= Editor_Activated; - base.Dispose (disposing); + DatePicker.DateValue = ViewModel.Value.ToNSDate (); } } } diff --git a/Xamarin.PropertyEditing.Mac/Controls/TimeEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/TimeEditorControl.cs new file mode 100644 index 0000000..f4ccd3b --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/TimeEditorControl.cs @@ -0,0 +1,27 @@ +using System; +using AppKit; +using Xamarin.PropertyEditing.Common; + +namespace Xamarin.PropertyEditing.Mac +{ + internal class TimeEditorControl : BaseDateTimeEditorControl