diff options
author | Eric Maupin <ermaup@microsoft.com> | 2018-09-14 19:40:19 +0300 |
---|---|---|
committer | Eric Maupin <ermaup@microsoft.com> | 2018-11-12 22:17:15 +0300 |
commit | afd2f005a37ae33ba861e0e9f23b14f3cfe3a5de (patch) | |
tree | 2b6a1640d65da96ef9b003669ba086351604b93d /Xamarin.PropertyEditing.Mac | |
parent | c905b9534dbe248dde3aa430cd536d20be8ff5e7 (diff) |
[mac] Breakout common editor access
Since Cocoa is so readily dependent on sub-classing we need to switch to interfaces to
commonize our access to things we need on the various controls. Not everything can
sub-class from PropertyEditorControl.
Diffstat (limited to 'Xamarin.PropertyEditing.Mac')
6 files changed, 43 insertions, 7 deletions
diff --git a/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs b/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs index a8d021f..fd6a4c2 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/Custom/BrushTabViewController.cs @@ -10,7 +10,8 @@ using Xamarin.PropertyEditing.ViewModels; namespace Xamarin.PropertyEditing.Mac { - internal class BrushTabViewController : UnderlinedTabViewController<BrushPropertyViewModel> + internal class BrushTabViewController + : UnderlinedTabViewController<BrushPropertyViewModel>, IEditorView { public BrushTabViewController () { @@ -34,6 +35,13 @@ namespace Xamarin.PropertyEditing.Mac TabStack.AddView (this.filterResource, NSStackViewGravity.Leading); } + EditorViewModel IEditorView.ViewModel { + get { return this.ViewModel; } + set { ViewModel = (BrushPropertyViewModel)value; } + } + + NSView IEditorView.NativeView => View; + public override void OnViewModelChanged (BrushPropertyViewModel oldModel) { this.inhibitSelection = true; diff --git a/Xamarin.PropertyEditing.Mac/Controls/IEditorView.cs b/Xamarin.PropertyEditing.Mac/Controls/IEditorView.cs new file mode 100644 index 0000000..6793622 --- /dev/null +++ b/Xamarin.PropertyEditing.Mac/Controls/IEditorView.cs @@ -0,0 +1,17 @@ +using AppKit; + +using Xamarin.PropertyEditing.ViewModels; + +namespace Xamarin.PropertyEditing.Mac +{ + internal interface IEditorView + { + /// <summary> + /// Gets the native view. + /// </summary> + /// <value>Generally just `this`.</value> + NSView NativeView { get; } + + EditorViewModel ViewModel { get; set; } + } +} diff --git a/Xamarin.PropertyEditing.Mac/Controls/PropertyEditorControl.cs b/Xamarin.PropertyEditing.Mac/Controls/PropertyEditorControl.cs index 20b8736..440f974 100644 --- a/Xamarin.PropertyEditing.Mac/Controls/PropertyEditorControl.cs +++ b/Xamarin.PropertyEditing.Mac/Controls/PropertyEditorControl.cs @@ -7,7 +7,8 @@ using Xamarin.PropertyEditing.ViewModels; namespace Xamarin.PropertyEditing.Mac { - internal abstract class PropertyEditorControl : BaseEditorControl + internal abstract class PropertyEditorControl + : BaseEditorControl, IEditorView { public string Label { get; set; } @@ -46,6 +47,14 @@ namespace Xamarin.PropertyEditing.Mac } } + EditorViewModel IEditorView.ViewModel + { + get { return this.ViewModel; } + set { ViewModel = (PropertyViewModel)value; } + } + + NSView IEditorView.NativeView => this; + [Export ("_primitiveSetDefaultNextKeyView:")] public void SetDefaultNextKeyView (NSView child) { diff --git a/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs b/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs index 3b6a057..e1ca8fb 100644 --- a/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs +++ b/Xamarin.PropertyEditing.Mac/PropertyEditorSelector.cs @@ -9,7 +9,7 @@ namespace Xamarin.PropertyEditing.Mac { internal class PropertyEditorSelector { - public virtual PropertyEditorControl GetEditor (EditorViewModel vm) + public virtual IEditorView GetEditor (EditorViewModel vm) { Type[] genericArgs = null; Type controlType; @@ -32,7 +32,7 @@ namespace Xamarin.PropertyEditing.Mac controlType = controlType.MakeGenericType (genericArgs); } - return (PropertyEditorControl)Activator.CreateInstance (controlType); + return (IEditorView)Activator.CreateInstance (controlType); } private static readonly Dictionary<Type, Type> ViewModelTypes = new Dictionary<Type, Type> { diff --git a/Xamarin.PropertyEditing.Mac/PropertyTableDelegate.cs b/Xamarin.PropertyEditing.Mac/PropertyTableDelegate.cs index 6b64057..9b4c750 100644 --- a/Xamarin.PropertyEditing.Mac/PropertyTableDelegate.cs +++ b/Xamarin.PropertyEditing.Mac/PropertyTableDelegate.cs @@ -213,10 +213,11 @@ namespace Xamarin.PropertyEditing.Mac var view = (PropertyEditorControl)outlineView.MakeView (identifier, this); if (view != null) return view; - + if (vm != null) { - view = this.editorSelector.GetEditor (vm); - if (view != null) { + IEditorView editor = this.editorSelector.GetEditor (vm); + if (editor != null) { + view = (PropertyEditorControl)editor.NativeView; view.Identifier = identifier; view.TableView = outlineView; } diff --git a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj index b4a8a29..0023e31 100644 --- a/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj +++ b/Xamarin.PropertyEditing.Mac/Xamarin.PropertyEditing.Mac.csproj @@ -137,6 +137,7 @@ <Compile Include="Controls\PanelHeaderEditorControl.cs" />
<Compile Include="Controls\ThicknessEditorControl.cs" />
<Compile Include="PropertyEditorSelector.cs" />
+ <Compile Include="Controls\IEditorView.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controls\" />
|