diff options
author | Dominique Louis <dominique@MININT-P5QM3VP.europe.corp.microsoft.com> | 2019-02-25 04:51:45 +0300 |
---|---|---|
committer | Dominique Louis <dominique@BLADE51.redmond.corp.microsoft.com> | 2019-02-28 15:43:34 +0300 |
commit | 743e3fa1caad6948c17ca7407cbbfabce17acc63 (patch) | |
tree | aa50b6d10f5ea8a791e3658f3416ff90c8a3d104 /Xamarin.PropertyEditing.Mac | |
parent | 93ef5b2bf8f74ce3a46305e48f59f9f43ab98710 (diff) |
[Mac] When tabbing scroll focused control into view.
Diffstat (limited to 'Xamarin.PropertyEditing.Mac')
14 files changed, 122 insertions, 44 deletions
diff --git a/Xamarin.PropertyEditing.Mac/Controls/BooleanEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/BooleanEditorControl.cs index 2065ba5..16c29b0 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/BooleanEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/BooleanEditorControl.cs @@ -14,14 +14,7 @@ namespace Xamarin.PropertyEditing.Mac public BooleanEditorControl (IHostResourceProvider hostResource)
: base (hostResource) { - BooleanEditor = new NSButton { - AllowsMixedState = true, - ControlSize = NSControlSize.Small, - Font = NSFont.FromFontName (DefaultFontName, DefaultFontSize), - Title = string.Empty, - TranslatesAutoresizingMaskIntoConstraints = false, - }; - BooleanEditor.SetButtonType (NSButtonType.Switch); + BooleanEditor = new FocusableBooleanButton (); // update the value on 'enter' BooleanEditor.Activated += (sender, e) => { diff --git a/Xamarin.PropertyEditing.Mac/Controls/BrushEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/BrushEditorControl.cs index 7731bba..ae00c0c 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/BrushEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/BrushEditorControl.cs @@ -9,20 +9,8 @@ using Xamarin.PropertyEditing.ViewModels; namespace Xamarin.PropertyEditing.Mac { - internal class ColorPopUpButton : NSPopUpButton + internal class ColorPopUpButton : FocusablePopUpButton { - public ColorPopUpButton () : base () - { - } - - public ColorPopUpButton (CGRect frame) : base (frame, true) - { - } - - public ColorPopUpButton (IntPtr handle) : base (handle) - { - } - public NSPopover Popover { get; set; } public override void MouseDown (NSEvent theEvent) diff --git a/Xamarin.PropertyEditing.Mac/Controls/CombinablePropertyEditor.cs b/Xamarin.PropertyEditing.Mac/Controls/CombinablePropertyEditor.cs index 29fd55f..311be05 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/CombinablePropertyEditor.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/CombinablePropertyEditor.cs @@ -77,19 +77,8 @@ namespace Xamarin.PropertyEditing.Mac NSButton checkbox; if (i >= this.combinableList.Count) { - checkbox = new NSButton { - AllowsExpansionToolTips = true, - AllowsMixedState = true, - Cell = { - LineBreakMode = NSLineBreakMode.TruncatingTail, - UsesSingleLineMode = true, - }, - ControlSize = NSControlSize.Small, - Font = NSFont.FromFontName (DefaultFontName, DefaultFontSize), - TranslatesAutoresizingMaskIntoConstraints = false, - }; - - checkbox.SetButtonType (NSButtonType.Switch); + checkbox = new FocusableBooleanButton (); + checkbox.Activated += SelectionChanged; AddSubview (checkbox); diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableBooleanButton.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableBooleanButton.cs new file mode 100644 index 0000000..219fb95 --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableBooleanButton.cs @@ -0,0 +1,33 @@ +using System; +using AppKit; + +namespace Xamarin.PropertyEditing.Mac +{ + internal class FocusableBooleanButton : NSButton + { + public override bool CanBecomeKeyView { get { return Enabled; } } + + public FocusableBooleanButton () + { + AllowsExpansionToolTips = true; + AllowsMixedState = true; + Cell.LineBreakMode = NSLineBreakMode.TruncatingTail; + Cell.UsesSingleLineMode = true; + ControlSize = NSControlSize.Small; + Font = NSFont.FromFontName (PropertyEditorControl.DefaultFontName, PropertyEditorControl.DefaultFontSize); + Title = string.Empty; + TranslatesAutoresizingMaskIntoConstraints = false; + + SetButtonType (NSButtonType.Switch); + } + + public override bool BecomeFirstResponder () + { + var willBecomeFirstResponder = base.BecomeFirstResponder (); + if (willBecomeFirstResponder) { + ScrollRectToVisible (Bounds); + } + return willBecomeFirstResponder; + } + } +} diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableButton.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableButton.cs new file mode 100644 index 0000000..5dba23c --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableButton.cs @@ -0,0 +1,31 @@ +using System; +using AppKit; + +namespace Xamarin.PropertyEditing.Mac +{ + internal class FocusableButton : NSButton + { + public override bool CanBecomeKeyView { get { return Enabled; } } + + public FocusableButton () + { + AllowsExpansionToolTips = true; + AllowsMixedState = true; + Cell.LineBreakMode = NSLineBreakMode.TruncatingTail; + Cell.UsesSingleLineMode = true; + ControlSize = NSControlSize.Small; + Font = NSFont.FromFontName (PropertyEditorControl.DefaultFontName, PropertyEditorControl.DefaultFontSize); + Title = string.Empty; + TranslatesAutoresizingMaskIntoConstraints = false; + } + + public override bool BecomeFirstResponder () + { + var willBecomeFirstResponder = base.BecomeFirstResponder (); + if (willBecomeFirstResponder) { + ScrollRectToVisible (Bounds); + } + return willBecomeFirstResponder; + } + } +} diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableComboBox.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableComboBox.cs index 401c2ce..577ce4b 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableComboBox.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusableComboBox.cs @@ -1,10 +1,19 @@ -using Foundation; +using Foundation; using AppKit; namespace Xamarin.PropertyEditing.Mac { - class FocusableComboBox : NSComboBox + internal class FocusableComboBox : NSComboBox { + public override bool BecomeFirstResponder () + { + var willBecomeFirstResponder = base.BecomeFirstResponder (); + if (willBecomeFirstResponder) { + ScrollRectToVisible (Bounds); + } + return willBecomeFirstResponder; + } + public override bool ShouldBeginEditing (NSText textObject) { textObject.Delegate = new FocusableComboBoxDelegate (); diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusablePopupButton.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusablePopupButton.cs new file mode 100644 index 0000000..4c9d392 --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/FocusablePopupButton.cs @@ -0,0 +1,20 @@ +using System; +using AppKit; +using CoreGraphics; + +namespace Xamarin.PropertyEditing.Mac +{ + internal class FocusablePopUpButton : NSPopUpButton + { + public override bool CanBecomeKeyView { get { return Enabled; } } + + public override bool BecomeFirstResponder () + { + var willBecomeFirstResponder = base.BecomeFirstResponder (); + if (willBecomeFirstResponder) { + ScrollRectToVisible (Bounds); + } + return willBecomeFirstResponder; + } + } +} diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/PropertyTextField.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/PropertyTextField.cs index 2e7e158..0f28e2a 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/PropertyTextField.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/PropertyTextField.cs @@ -11,5 +11,14 @@ namespace Xamarin.PropertyEditing.Mac Cell.LineBreakMode = NSLineBreakMode.TruncatingTail; Cell.UsesSingleLineMode = true; } + + public override bool BecomeFirstResponder () + { + var willBecomeFirstResponder = base.BecomeFirstResponder (); + if (willBecomeFirstResponder) { + ScrollRectToVisible (Bounds); + } + return willBecomeFirstResponder; + } } } diff --git a/Xamarin.PropertyEditing.Mac/Controls/NumericEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/NumericEditorControl.cs index 55c4066..05b2463 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/NumericEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/NumericEditorControl.cs @@ -140,7 +140,7 @@ namespace Xamarin.PropertyEditing.Mac if (ViewModel.HasInputModes) { if (this.inputModePopup == null) { - this.inputModePopup = new NSPopUpButton { + this.inputModePopup = new FocusablePopUpButton { Menu = new NSMenu (), TranslatesAutoresizingMaskIntoConstraints = false, }; diff --git a/Xamarin.PropertyEditing.Mac/Controls/ObjectEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/ObjectEditorControl.cs index 9e71316..275bde6 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/ObjectEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/ObjectEditorControl.cs @@ -19,9 +19,8 @@ namespace Xamarin.PropertyEditing.Mac }; AddSubview (this.typeLabel); - this.createObject = new NSButton { + this.createObject = new FocusableButton { Title = Properties.Resources.New, - TranslatesAutoresizingMaskIntoConstraints = false, BezelStyle = NSBezelStyle.Rounded }; this.createObject.Activated += OnNewPressed; diff --git a/Xamarin.PropertyEditing.Mac/Controls/PredefinedValuesEditor.cs b/Xamarin.PropertyEditing.Mac/Controls/PredefinedValuesEditor.cs index c41d01a..6da0661 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/PredefinedValuesEditor.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/PredefinedValuesEditor.cs @@ -37,7 +37,7 @@ namespace Xamarin.PropertyEditing.Mac ViewModel.ValueName = this.comboBox.SelectedValue.ToString (); }; - this.popUpButton = new NSPopUpButton { + this.popUpButton = new FocusablePopUpButton { AllowsExpansionToolTips = true, Cell = { LineBreakMode = NSLineBreakMode.TruncatingTail, diff --git a/Xamarin.PropertyEditing.Mac/Controls/StringEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/StringEditorControl.cs index b3b2efe..fa7badb 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/StringEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/StringEditorControl.cs @@ -19,7 +19,8 @@ namespace Xamarin.PropertyEditing.Mac private NSLayoutConstraint stringEditorWidthConstraint; public override NSView FirstKeyView => this.stringEditor; - public override NSView LastKeyView => this.stringEditor; + private NSView lastKeyView; + public override NSView LastKeyView => this.lastKeyView; internal NSPopUpButton inputModePopup; private IReadOnlyList<InputMode> viewModelInputModes; @@ -41,6 +42,8 @@ namespace Xamarin.PropertyEditing.Mac }; AddSubview (this.stringEditor); + this.lastKeyView = this.stringEditor; + this.stringEditorWidthConstraint = NSLayoutConstraint.Create (this.stringEditor, NSLayoutAttribute.Width, NSLayoutRelation.Equal, this, NSLayoutAttribute.Width, 1f, -117f); this.AddConstraints (new[] { @@ -72,7 +75,7 @@ namespace Xamarin.PropertyEditing.Mac if (ViewModel.HasInputModes) { if (this.inputModePopup == null) { - this.inputModePopup = new NSPopUpButton { + this.inputModePopup = new FocusablePopUpButton { Menu = new NSMenu (), TranslatesAutoresizingMaskIntoConstraints = false, }; @@ -90,6 +93,8 @@ namespace Xamarin.PropertyEditing.Mac NSLayoutConstraint.Create (this.inputModePopup, NSLayoutAttribute.Width, NSLayoutRelation.Equal, 1f, 80f), NSLayoutConstraint.Create (this.inputModePopup, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, DefaultControlHeight - 3 ), }); + + this.lastKeyView = this.inputModePopup; } this.inputModePopup.Menu.RemoveAllItems (); diff --git a/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs index a7ca19e..082faf2 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/TypeEditorControl.cs @@ -19,9 +19,8 @@ namespace Xamarin.PropertyEditing.Mac }; AddSubview (this.typeLabel); - this.selectType = new NSButton { + this.selectType = new FocusableButton { Title = Properties.Resources.Select, - TranslatesAutoresizingMaskIntoConstraints = false, BezelStyle = NSBezelStyle.Rounded }; this.selectType.Activated += OnSelectPressed; diff --git a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj index ec68293..35ff6d7 100644 --- a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj +++ b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj @@ -151,6 +151,9 @@ <Compile Include="Controls\Custom\PropertyTextField.cs" />
<Compile Include="Controls\ControlExtensions.cs" />
<Compile Include="Controls\TypeEditorControl.cs" />
+ <Compile Include="Controls\Custom\FocusablePopupButton.cs" />
+ <Compile Include="Controls\Custom\FocusableBooleanButton.cs" />
+ <Compile Include="Controls\Custom\FocusableButton.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controls\" />
|