Browse Source

Implement Radio Toggle type on OSX.

pull/3838/head
Dan Walmsley 6 years ago
parent
commit
6426a20666
  1. 1
      native/Avalonia.Native/src/OSX/menu.h
  2. 9
      native/Avalonia.Native/src/OSX/menu.mm
  3. 7
      src/Avalonia.Native/IAvnMenuItem.cs

1
native/Avalonia.Native/src/OSX/menu.h

@ -32,7 +32,6 @@ private:
IAvnActionCallback* _callback;
IAvnPredicateCallback* _predicate;
bool _isSeperator;
bool _isCheckable;
public:
FORWARD_IUNKNOWN()

9
native/Avalonia.Native/src/OSX/menu.mm

@ -70,7 +70,6 @@
AvnAppMenuItem::AvnAppMenuItem(bool isSeperator)
{
_isCheckable = false;
_isSeperator = isSeperator;
if(isSeperator)
@ -158,7 +157,7 @@ HRESULT AvnAppMenuItem::SetIsChecked (bool isChecked)
{
@autoreleasepool
{
[_native setState:(isChecked && _isCheckable ? NSOnState : NSOffState)];
[_native setState:(isChecked ? NSOnState : NSOffState)];
return S_OK;
}
}
@ -171,16 +170,14 @@ HRESULT AvnAppMenuItem::SetToggleType(AvnMenuItemToggleType toggleType)
{
case AvnMenuItemToggleType::None:
[_native setOnStateImage:nullptr];
_isCheckable = false;
break;
case AvnMenuItemToggleType::CheckMark:
[_native setOnStateImage:nullptr];
_isCheckable = true;
[_native setOnStateImage: [NSImage imageNamed:@"NSMenuCheckmark"]];
break;
case AvnMenuItemToggleType::Radio:
[_native setOnStateImage: [NSImage imageNamed:@"NSMenuRadio"]];
[_native setOnStateImage: [NSImage imageNamed:@"NSMenuItemBullet"]];
break;
}

7
src/Avalonia.Native/IAvnMenuItem.cs

@ -28,7 +28,7 @@ namespace Avalonia.Native.Interop
private void UpdateToggleType(NativeMenuItemToggleType toggleType)
{
ToggleType = (AvnMenuItemToggleType)toggleType;
}
private void UpdateGesture(Input.KeyGesture gesture)
@ -78,6 +78,8 @@ namespace Avalonia.Native.Interop
UpdateAction(ManagedMenuItem as NativeMenuItem);
UpdateToggleType(item.ToggleType);
UpdateIsChecked(item.IsChecked);
_propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.HeaderProperty)
@ -89,6 +91,9 @@ namespace Avalonia.Native.Interop
_propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.CommandProperty)
.Subscribe(x => UpdateAction(ManagedMenuItem as NativeMenuItem)));
_propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.ToggleTypeProperty)
.Subscribe(x => UpdateToggleType(x)));
_propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.IsCheckedProperty)
.Subscribe(x => UpdateIsChecked(x)));
}

Loading…
Cancel
Save