diff options
Diffstat (limited to 'Xamarin.Forms.Platform.MacOS/Renderers/PickerRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.MacOS/Renderers/PickerRenderer.cs | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/Xamarin.Forms.Platform.MacOS/Renderers/PickerRenderer.cs b/Xamarin.Forms.Platform.MacOS/Renderers/PickerRenderer.cs deleted file mode 100644 index ac07bfd2..00000000 --- a/Xamarin.Forms.Platform.MacOS/Renderers/PickerRenderer.cs +++ /dev/null @@ -1,154 +0,0 @@ -using System; -using AppKit; -using System.ComponentModel; -using Foundation; - -namespace Xamarin.Forms.Platform.MacOS -{ - public class PickerRenderer : ViewRenderer<Picker, NSComboBox> - { - bool _disposed; - NSColor _defaultTextColor; - NSColor _defaultBackgroundColor; - - IElementController ElementController => Element; - - protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) - { - if (e.NewElement != null) - { - if (Control == null) - SetNativeControl(new NSComboBox { Editable = false }); - - _defaultTextColor = Control.TextColor; - _defaultBackgroundColor = Control.BackgroundColor; - - Control.UsesDataSource = true; - Control.DataSource = new ComboDataSource(this); - - Control.SelectionChanged += ComboBoxSelectionChanged; - - UpdatePicker(); - UpdateTextColor(); - } - - base.OnElementChanged(e); - } - - protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) - { - base.OnElementPropertyChanged(sender, e); - if (e.PropertyName == Picker.TitleProperty.PropertyName) - UpdatePicker(); - if (e.PropertyName == Picker.SelectedIndexProperty.PropertyName) - UpdatePicker(); - if (e.PropertyName == Picker.TextColorProperty.PropertyName || - e.PropertyName == VisualElement.IsEnabledProperty.PropertyName) - UpdateTextColor(); - } - - protected override void SetBackgroundColor(Color color) - { - base.SetBackgroundColor(color); - - if (Control == null) - return; - - Control.BackgroundColor = color == Color.Default ? _defaultBackgroundColor : color.ToNSColor(); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (!_disposed) - { - _disposed = true; - if (Element != null) - { - //TODO: Implement ObservableList picker source change - //((ObservableList<string>)Element.Items).CollectionChanged -= RowsCollectionChanged; - } - - if (Control != null) - Control.SelectionChanged -= ComboBoxSelectionChanged; - } - } - base.Dispose(disposing); - } - - void ComboBoxSelectionChanged(object sender, EventArgs e) - { - ElementController?.SetValueFromRenderer(Picker.SelectedIndexProperty, (int)Control.SelectedIndex); - } - - void OnEnded(object sender, EventArgs eventArgs) - { - ElementController?.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false); - } - - void OnStarted(object sender, EventArgs eventArgs) - { - ElementController?.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, true); - } - - void RowsCollectionChanged(object sender, EventArgs e) - { - UpdatePicker(); - } - - void UpdatePicker() - { - if (Control == null || Element == null) - return; - - var selectedIndex = Element.SelectedIndex; - var items = Element.Items; - Control.PlaceholderString = Element.Title ?? string.Empty; - Control.ReloadData(); - if (items == null || items.Count == 0 || selectedIndex < 0) - return; - - Control.SelectItem(selectedIndex); - } - - void UpdateTextColor() - { - if (Control == null || Element == null) - return; - - var textColor = Element.TextColor; - - if (textColor.IsDefault || !Element.IsEnabled) - Control.TextColor = _defaultTextColor; - else - Control.TextColor = textColor.ToNSColor(); - } - - class ComboDataSource : NSComboBoxDataSource - { - readonly PickerRenderer _renderer; - - public ComboDataSource(PickerRenderer model) - { - _renderer = model; - } - - public override nint ItemCount(NSComboBox comboBox) - { - return _renderer.Element.Items?.Count ?? 0; - } - - public override NSObject ObjectValueForItem(NSComboBox comboBox, nint index) - { - return new NSString(_renderer.Element.Items[(int)index]); - } - - public override nint IndexOfItem(NSComboBox comboBox, string value) - { - var index = _renderer.Element.Items?.IndexOf(value) ?? -1; - return index; - } - } - } -}
\ No newline at end of file |