aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/UI/Helpers/HotKeyControl.cs
blob: 4ae903b49cf69842c36a68e04d31eb861de3b79b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using System;
using System.Windows.Input;

namespace Ryujinx.Ava.UI.Helpers
{
    public class HotKeyControl : ContentControl, ICommandSource
    {
        public static readonly StyledProperty<object> CommandParameterProperty =
            AvaloniaProperty.Register<HotKeyControl, object>(nameof(CommandParameter));

        public static readonly DirectProperty<HotKeyControl, ICommand> CommandProperty =
            AvaloniaProperty.RegisterDirect<HotKeyControl, ICommand>(nameof(Command),
                control => control.Command, (control, command) => control.Command = command, enableDataValidation: true);

        public static readonly StyledProperty<KeyGesture> HotKeyProperty = HotKeyManager.HotKeyProperty.AddOwner<Button>();

        private ICommand _command;
        private bool _commandCanExecute;

        public ICommand Command
        {
            get { return _command; }
            set { SetAndRaise(CommandProperty, ref _command, value); }
        }

        public KeyGesture HotKey
        {
            get { return GetValue(HotKeyProperty); }
            set { SetValue(HotKeyProperty, value); }
        }

        public object CommandParameter
        {
            get { return GetValue(CommandParameterProperty); }
            set { SetValue(CommandParameterProperty, value); }
        }

        public void CanExecuteChanged(object sender, EventArgs e)
        {
            var canExecute = Command == null || Command.CanExecute(CommandParameter);

            if (canExecute != _commandCanExecute)
            {
                _commandCanExecute = canExecute;
                UpdateIsEffectivelyEnabled();
            }
        }
    }
}