-
Notifications
You must be signed in to change notification settings - Fork 0
/
KeySelector.cs
70 lines (63 loc) · 2.57 KB
/
KeySelector.cs
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
namespace Thuja
{
/// <summary>
/// Комбинация клавиш.
/// </summary>
public readonly struct KeySelector
{
/// <summary>
/// Набор комбинаций для выбора текущего элемента.
/// </summary>
public static readonly KeySelector[] SelectItem =
{
new(ConsoleKey.Enter),
new(ConsoleKey.Spacebar)
};
/// <summary>
/// Модификаторы нажатой клавиши.
/// </summary>
public readonly ConsoleModifiers Modifiers;
/// <summary>
/// Вид нажатой клавиши. Null, если это не важно.
/// </summary>
public readonly ConsoleKey? Key;
/// <summary>
/// Нажатый символ. Null, если это не важно.
/// </summary>
public readonly char? Character;
/// <summary>
/// Создаёт новый KeySelector на основании вида клавиши и, возможно, модификаторов.
/// </summary>
/// <param name="key">Вид клавиши.</param>
/// <param name="modifiers">Модификаторы.</param>
public KeySelector(ConsoleKey key, ConsoleModifiers modifiers = 0)
{
Modifiers = modifiers;
Key = key;
Character = null;
}
/// <summary>
/// Создаёт новый KeySelector на основании нажатого символа и, возможно, модификаторов.
/// </summary>
/// <param name="character">Нажатый символ.</param>
/// <param name="modifiers">Модификаторы.</param>
public KeySelector(char character, ConsoleModifiers modifiers = 0)
{
Modifiers = modifiers;
Key = null;
Character = character;
}
/// <summary>
/// Проверяет соответсвует ли переданное нажатие этой комбинации.
/// </summary>
/// <param name="key">Информация о нажатой клавише.</param>
/// <returns>True, если нажатие соответсвует этой клавише.</returns>
public bool Match(ConsoleKeyInfo key)
{
return (Character == null || key.KeyChar == Character)
&& (Key == null || key.Key == Key)
&& key.Modifiers.HasFlag(Modifiers);
}
}
}