8 changed files with 103 additions and 21 deletions
@ -0,0 +1,58 @@ |
|||
using System.Collections.Generic; |
|||
using Avalonia.Controls; |
|||
using Avalonia.Controls.Platform; |
|||
|
|||
#nullable enable |
|||
|
|||
namespace Avalonia.Win32 |
|||
{ |
|||
internal class Win32NativeToManagedMenuExporter : INativeMenuExporter |
|||
{ |
|||
private NativeMenu? _nativeMenu; |
|||
|
|||
public void SetNativeMenu(NativeMenu nativeMenu) |
|||
{ |
|||
_nativeMenu = nativeMenu; |
|||
} |
|||
|
|||
private IEnumerable<MenuItem>? Populate (NativeMenu nativeMenu) |
|||
{ |
|||
var items = new List<MenuItem>(); |
|||
|
|||
foreach (var menuItem in nativeMenu.Items) |
|||
{ |
|||
if (menuItem is NativeMenuItemSeparator separator) |
|||
{ |
|||
items.Add(new MenuItem { Header = "-" }); |
|||
} |
|||
else if (menuItem is NativeMenuItem item) |
|||
{ |
|||
var newItem = new MenuItem { Header = item.Header, Icon = item.Icon, Command = item.Command, CommandParameter = item.CommandParameter }; |
|||
|
|||
if(item.Menu != null) |
|||
{ |
|||
newItem.ContextMenu = new ContextMenu() { Items = Populate(item.Menu) }; |
|||
} |
|||
else if (item.HasClickHandlers && item is INativeMenuItemExporterEventsImplBridge bridge) |
|||
{ |
|||
newItem.Click += (_,_) => bridge.RaiseClicked(); |
|||
} |
|||
|
|||
items.Add(newItem); |
|||
} |
|||
} |
|||
|
|||
return items; |
|||
} |
|||
|
|||
public IEnumerable<MenuItem>? GetMenu () |
|||
{ |
|||
if(_nativeMenu != null) |
|||
{ |
|||
return Populate(_nativeMenu); |
|||
} |
|||
|
|||
return null; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue