Browse Source
Merge pull request #3837 from AvaloniaUI/dbus-checkmark
Checkmark support for dbus exporter
pull/3840/head
danwalmsley
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
41 additions and
1 deletions
-
samples/ControlCatalog/MainWindow.xaml
-
src/Avalonia.Controls/NativeMenuItem.cs
-
src/Avalonia.FreeDesktop/DBusMenuExporter.cs
|
|
|
@ -41,6 +41,7 @@ |
|
|
|
<NativeMenu> |
|
|
|
<NativeMenuItem Header="Check Me Out" |
|
|
|
Command="{Binding ToggleMenuItemCheckedCommand}" |
|
|
|
ToggleType="CheckBox" |
|
|
|
IsChecked="{Binding IsMenuItemChecked}" /> |
|
|
|
</NativeMenu> |
|
|
|
</NativeMenuItem.Menu> |
|
|
|
|
|
|
|
@ -12,6 +12,7 @@ namespace Avalonia.Controls |
|
|
|
private bool _isEnabled = true; |
|
|
|
private ICommand _command; |
|
|
|
private bool _isChecked = false; |
|
|
|
private NativeMenuItemToggleType _toggleType; |
|
|
|
|
|
|
|
private NativeMenu _menu; |
|
|
|
|
|
|
|
@ -99,6 +100,18 @@ namespace Avalonia.Controls |
|
|
|
get => _isChecked; |
|
|
|
set => SetAndRaise(IsCheckedProperty, ref _isChecked, value); |
|
|
|
} |
|
|
|
|
|
|
|
public static readonly DirectProperty<NativeMenuItem, NativeMenuItemToggleType> ToggleTypeProperty = |
|
|
|
AvaloniaProperty.RegisterDirect<NativeMenuItem, NativeMenuItemToggleType>( |
|
|
|
nameof(ToggleType), |
|
|
|
o => o.ToggleType, |
|
|
|
(o, v) => o.ToggleType = v); |
|
|
|
|
|
|
|
public NativeMenuItemToggleType ToggleType |
|
|
|
{ |
|
|
|
get => _toggleType; |
|
|
|
set => SetAndRaise(ToggleTypeProperty, ref _toggleType, value); |
|
|
|
} |
|
|
|
|
|
|
|
public static readonly DirectProperty<NativeMenuItem, ICommand> CommandProperty = |
|
|
|
Button.CommandProperty.AddOwner<NativeMenuItem>( |
|
|
|
@ -169,4 +182,11 @@ namespace Avalonia.Controls |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public enum NativeMenuItemToggleType |
|
|
|
{ |
|
|
|
None, |
|
|
|
CheckBox, |
|
|
|
Radio |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -184,7 +184,7 @@ namespace Avalonia.FreeDesktop |
|
|
|
|
|
|
|
private static string[] AllProperties = new[] |
|
|
|
{ |
|
|
|
"type", "label", "enabled", "visible", "shortcut", "toggle-type", "children-display" |
|
|
|
"type", "label", "enabled", "visible", "shortcut", "toggle-type", "children-display", "toggle-state" |
|
|
|
}; |
|
|
|
|
|
|
|
object GetProperty((NativeMenuItemBase item, NativeMenu menu) i, string name) |
|
|
|
@ -234,6 +234,25 @@ namespace Avalonia.FreeDesktop |
|
|
|
return new[] { lst.ToArray() }; |
|
|
|
} |
|
|
|
|
|
|
|
if (name == "toggle-type") |
|
|
|
{ |
|
|
|
if (item.ToggleType == NativeMenuItemToggleType.CheckBox) |
|
|
|
return "checkmark"; |
|
|
|
if (item.ToggleType == NativeMenuItemToggleType.Radio) |
|
|
|
return "radio"; |
|
|
|
// Someone has forgot to set the style
|
|
|
|
if (item.IsChecked) |
|
|
|
return "checkmark"; |
|
|
|
} |
|
|
|
|
|
|
|
if (name == "toggle-state") |
|
|
|
{ |
|
|
|
if (item.IsChecked) |
|
|
|
return 1; |
|
|
|
if (item.ToggleType != NativeMenuItemToggleType.None) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
if (name == "children-display") |
|
|
|
return menu != null ? "submenu" : null; |
|
|
|
} |
|
|
|
|