From f6add71221f87a5d4280118fd500d69dbbce7e0a Mon Sep 17 00:00:00 2001 From: Jarle Friestad Date: Mon, 6 Nov 2023 11:26:23 +0100 Subject: [PATCH] Remove all keyboard shortcuts --- .../Behaviors/KeyboardShortcutsBehavior.cs | 25 ++++++++++++++----- .../KeyboardShortcutsBehaviorTests.cs | 13 ++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/Blazor.Diagrams.Core/Behaviors/KeyboardShortcutsBehavior.cs b/src/Blazor.Diagrams.Core/Behaviors/KeyboardShortcutsBehavior.cs index 5243bed0..28f97727 100644 --- a/src/Blazor.Diagrams.Core/Behaviors/KeyboardShortcutsBehavior.cs +++ b/src/Blazor.Diagrams.Core/Behaviors/KeyboardShortcutsBehavior.cs @@ -2,41 +2,54 @@ using Blazor.Diagrams.Core.Utils; using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace Blazor.Diagrams.Core.Behaviors; public class KeyboardShortcutsBehavior : Behavior { - private readonly Dictionary> _shortcuts; + public record KeyboardShortcut(string Key, bool Ctrl, bool Shift, bool Alt, Func Action); + + private readonly Dictionary _shortcuts; public KeyboardShortcutsBehavior(Diagram diagram) : base(diagram) { - _shortcuts = new Dictionary>(); + _shortcuts = new Dictionary(); SetShortcut("Delete", false, false, false, KeyboardShortcutsDefaults.DeleteSelection); SetShortcut("g", true, false, true, KeyboardShortcutsDefaults.Grouping); Diagram.KeyDown += OnDiagramKeyDown; } + public KeyboardShortcut[] GetShortcuts() + { + return _shortcuts.Values.ToArray(); + } + public void SetShortcut(string key, bool ctrl, bool shift, bool alt, Func action) { var k = KeysUtils.GetStringRepresentation(ctrl, shift, alt, key); - _shortcuts[k] = action; + _shortcuts[k] = new KeyboardShortcut(key, ctrl, shift, alt, action); } - + public bool RemoveShortcut(string key, bool ctrl, bool shift, bool alt) { var k = KeysUtils.GetStringRepresentation(ctrl, shift, alt, key); return _shortcuts.Remove(k); } + public void RemoveAllShortcuts() + { + _shortcuts.Clear(); + } + private async void OnDiagramKeyDown(KeyboardEventArgs e) { var k = KeysUtils.GetStringRepresentation(e.CtrlKey, e.ShiftKey, e.AltKey, e.Key); - if (_shortcuts.TryGetValue(k, out var action)) + if (_shortcuts.TryGetValue(k, out var shortcut)) { - await action(Diagram); + await shortcut.Action(Diagram); } } diff --git a/tests/Blazor.Diagrams.Core.Tests/Behaviors/KeyboardShortcutsBehaviorTests.cs b/tests/Blazor.Diagrams.Core.Tests/Behaviors/KeyboardShortcutsBehaviorTests.cs index 42fe887b..8e783d0a 100644 --- a/tests/Blazor.Diagrams.Core.Tests/Behaviors/KeyboardShortcutsBehaviorTests.cs +++ b/tests/Blazor.Diagrams.Core.Tests/Behaviors/KeyboardShortcutsBehaviorTests.cs @@ -36,6 +36,19 @@ public void Behavior_ShouldExecuteAction_WhenCombinationIsPressed(string key, bo executed.Should().BeTrue(); } + [Fact] + public void RemoveAll_ShouldRemoveAllShortcuts() + { + var diagram = new TestDiagram(); + var ksb = diagram.GetBehavior()!; + + ksb.GetShortcuts().Length.Should().Be(2); + + ksb.RemoveAllShortcuts(); + + ksb.GetShortcuts().Length.Should().Be(0); + } + [Fact] public void Behavior_ShouldDoNothing_WhenRemoved() {