48 lines
1.1 KiB
C#
48 lines
1.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace BITKit.UX.Hotkey
|
|
{
|
|
public interface IHotkeyProvider
|
|
{
|
|
string Name { get; }
|
|
string Description { get; }
|
|
object Data { get; }
|
|
bool Enabled { get; }
|
|
Action OnPerform { get; }
|
|
float HoldDuration => 0;
|
|
}
|
|
public struct HotkeyProvider : IHotkeyProvider
|
|
{
|
|
public string Name { get; set; }
|
|
public string Description { get; set; }
|
|
public object Data { get; set; }
|
|
public bool Enabled { get; set; }
|
|
public Action OnPerform { get; set; }
|
|
|
|
public float HoldDuration { get; set; }
|
|
}
|
|
public interface IHotkeyCollection
|
|
{
|
|
IEnumerable<IHotkeyProvider> Hotkeys { get; }
|
|
void Register(IHotkeyProvider hotkey);
|
|
void UnRegister(IHotkeyProvider hotkey);
|
|
}
|
|
|
|
public class HotkeyCollection:IHotkeyCollection
|
|
{
|
|
private readonly HashSet<IHotkeyProvider> _hotkeys = new();
|
|
public IEnumerable<IHotkeyProvider> Hotkeys => _hotkeys;
|
|
public void Register(IHotkeyProvider hotkey)
|
|
{
|
|
_hotkeys.Add(hotkey);
|
|
}
|
|
|
|
public void UnRegister(IHotkeyProvider hotkey)
|
|
{
|
|
_hotkeys.Remove(hotkey);
|
|
}
|
|
}
|
|
}
|