2025-02-24 23:03:39 +08:00
|
|
|
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;
|
|
|
|
}
|
2025-04-17 19:36:08 +08:00
|
|
|
|
|
|
|
public interface IUXHotKey
|
|
|
|
{
|
|
|
|
void Perform(IHotkeyCollection collection);
|
|
|
|
}
|
2025-02-24 23:03:39 +08:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|