Skip to content

Commit bb48e3d

Browse files
committed
Fix hotkeys
1 parent 926c3e3 commit bb48e3d

13 files changed

+67
-30
lines changed

RetailCoder.VBE/Common/RubberduckHooks.cs

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.ComponentModel;
4+
using System.Diagnostics;
45
using System.Linq;
56
using System.Runtime.InteropServices;
67
using System.Windows.Forms;
@@ -28,7 +29,6 @@ public class RubberduckHooks : IRubberduckHooks
2829
private readonly IGeneralConfigService _config;
2930
private readonly IEnumerable<CommandBase> _commands;
3031
private readonly IList<IAttachable> _hooks = new List<IAttachable>();
31-
private readonly IDictionary<RubberduckHotkey, CommandBase> _mappings;
3232
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
3333

3434
public RubberduckHooks(VBE vbe, IGeneralConfigService config, IEnumerable<CommandBase> commands)
@@ -42,29 +42,11 @@ public RubberduckHooks(VBE vbe, IGeneralConfigService config, IEnumerable<Comman
4242

4343
_commands = commands;
4444
_config = config;
45-
_mappings = GetCommandMappings();
4645
}
4746

48-
private CommandBase Command<TCommand>() where TCommand : CommandBase
47+
private CommandBase Command(RubberduckHotkey hotkey)
4948
{
50-
return _commands.OfType<TCommand>().SingleOrDefault();
51-
}
52-
53-
private IDictionary<RubberduckHotkey, CommandBase> GetCommandMappings()
54-
{
55-
return new Dictionary<RubberduckHotkey, CommandBase>
56-
{
57-
{ RubberduckHotkey.ParseAll, Command<ReparseCommand>() },
58-
{ RubberduckHotkey.CodeExplorer, Command<CodeExplorerCommand>() },
59-
{ RubberduckHotkey.IndentModule, Command<IndentCurrentModuleCommand>() },
60-
{ RubberduckHotkey.IndentProcedure, Command<IndentCurrentProcedureCommand>() },
61-
{ RubberduckHotkey.FindSymbol, Command<FindSymbolCommand>() },
62-
{ RubberduckHotkey.RefactorMoveCloserToUsage, Command<RefactorMoveCloserToUsageCommand>() },
63-
{ RubberduckHotkey.InspectionResults, Command<InspectionResultsCommand>() },
64-
{ RubberduckHotkey.RefactorExtractMethod, Command<RefactorExtractMethodCommand>() },
65-
{ RubberduckHotkey.RefactorRename, Command<CodePaneRefactorRenameCommand>() },
66-
{ RubberduckHotkey.TestExplorer, Command<TestExplorerCommand>() }
67-
};
49+
return _commands.SingleOrDefault(s => s.Hotkey == hotkey);
6850
}
6951

7052
public void HookHotkeys()
@@ -92,7 +74,10 @@ public void HookHotkeys()
9274
RubberduckHotkey assigned;
9375
if (Enum.TryParse(hotkey.Name, out assigned))
9476
{
95-
AddHook(new Hotkey(_mainWindowHandle, hotkey.ToString(), _mappings[assigned]));
77+
var command = Command(assigned);
78+
Debug.Assert(command != null);
79+
80+
AddHook(new Hotkey(_mainWindowHandle, hotkey.ToString(), command));
9681
}
9782
}
9883
Attach();

RetailCoder.VBE/Settings/RubberduckHotkey.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ namespace Rubberduck.Settings
22
{
33
public enum RubberduckHotkey
44
{
5+
None,
56
ParseAll,
67
IndentProcedure,
78
IndentModule,

RetailCoder.VBE/UI/Command/CodeExplorerCommand.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ public CodeExplorerCommand(IPresenter presenter)
1616
_presenter = presenter;
1717
}
1818

19+
public override RubberduckHotkey Hotkey
20+
{
21+
get { return RubberduckHotkey.CodeExplorer; }
22+
}
23+
1924
public override void Execute(object parameter)
2025
{
2126
_presenter.Show();
2227
}
23-
24-
public RubberduckHotkey Hotkey { get {return RubberduckHotkey.CodeExplorer; } }
2528
}
2629
}

RetailCoder.VBE/UI/Command/CommandBase.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Runtime.InteropServices;
33
using System.Windows.Input;
4+
using Rubberduck.Settings;
45

56
namespace Rubberduck.UI.Command
67
{
@@ -15,6 +16,8 @@ public virtual bool CanExecute(object parameter)
1516
public abstract void Execute(object parameter);
1617

1718
public virtual string ShortcutText { get; set; }
19+
20+
public virtual RubberduckHotkey Hotkey { get { return RubberduckHotkey.None; } }
1821

1922
public event EventHandler CanExecuteChanged
2023
{

RetailCoder.VBE/UI/Command/FindSymbolCommand.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Microsoft.Vbe.Interop;
44
using Rubberduck.Common;
55
using Rubberduck.Parsing.VBA;
6+
using Rubberduck.Settings;
67
using Rubberduck.UI.FindSymbol;
78

89
namespace Rubberduck.UI.Command
@@ -25,6 +26,11 @@ public FindSymbolCommand(VBE vbe, RubberduckParserState state, DeclarationIconCa
2526
_iconCache = iconCache;
2627
}
2728

29+
public override RubberduckHotkey Hotkey
30+
{
31+
get { return RubberduckHotkey.FindSymbol; }
32+
}
33+
2834
public override void Execute(object parameter)
2935
{
3036
var viewModel = new FindSymbolViewModel(_state.AllDeclarations.Where(item => !item.IsBuiltIn), _iconCache);

RetailCoder.VBE/UI/Command/IndentCurrentModuleCommand.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public IndentCurrentModuleCommand(VBE vbe, IIndenter indenter)
1717
_indenter = indenter;
1818
}
1919

20+
public override RubberduckHotkey Hotkey
21+
{
22+
get { return RubberduckHotkey.IndentModule; }
23+
}
24+
2025
public override bool CanExecute(object parameter)
2126
{
2227
return _vbe.ActiveCodePane != null;
@@ -26,7 +31,5 @@ public override void Execute(object parameter)
2631
{
2732
_indenter.IndentCurrentModule();
2833
}
29-
30-
public RubberduckHotkey Hotkey { get { return RubberduckHotkey.IndentModule; } }
3134
}
3235
}

RetailCoder.VBE/UI/Command/IndentCurrentProcedureCommand.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public IndentCurrentProcedureCommand(VBE vbe, IIndenter indenter)
1717
_indenter = indenter;
1818
}
1919

20+
public override RubberduckHotkey Hotkey
21+
{
22+
get { return RubberduckHotkey.IndentProcedure; }
23+
}
24+
2025
public override bool CanExecute(object parameter)
2126
{
2227
return _vbe.ActiveCodePane != null;
@@ -26,7 +31,5 @@ public override void Execute(object parameter)
2631
{
2732
_indenter.IndentCurrentProcedure();
2833
}
29-
30-
public RubberduckHotkey Hotkey { get {return RubberduckHotkey.IndentProcedure; } }
3134
}
3235
}

RetailCoder.VBE/UI/Command/InspectionResultsCommand.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Runtime.InteropServices;
2+
using Rubberduck.Settings;
23

34
namespace Rubberduck.UI.Command
45
{
@@ -15,6 +16,11 @@ public InspectionResultsCommand(IPresenter presenter)
1516
_presenter = presenter;
1617
}
1718

19+
public override RubberduckHotkey Hotkey
20+
{
21+
get { return RubberduckHotkey.InspectionResults; }
22+
}
23+
1824
/// <summary>
1925
/// Runs code inspections
2026
/// </summary>

RetailCoder.VBE/UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Rubberduck.Parsing.Symbols;
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.Refactorings.Rename;
7+
using Rubberduck.Settings;
78
using Rubberduck.UI.Refactorings;
89

910
namespace Rubberduck.UI.Command.Refactorings
@@ -21,6 +22,11 @@ public CodePaneRefactorRenameCommand(VBE vbe, RubberduckParserState state, ICode
2122
_wrapperWrapperFactory = wrapperWrapperFactory;
2223
}
2324

25+
public override RubberduckHotkey Hotkey
26+
{
27+
get { return RubberduckHotkey.RefactorRename; }
28+
}
29+
2430
public override bool CanExecute(object parameter)
2531
{
2632
if (Vbe.ActiveCodePane == null)

RetailCoder.VBE/UI/Command/Refactorings/RefactorExtractMethodCommand.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.VBEditor;
99
using System.Collections.Generic;
1010
using NLog;
11+
using Rubberduck.Settings;
1112

1213
namespace Rubberduck.UI.Command.Refactorings
1314
{
@@ -25,6 +26,11 @@ public RefactorExtractMethodCommand(VBE vbe, RubberduckParserState state, IInden
2526
_indenter = indenter;
2627
}
2728

29+
public override RubberduckHotkey Hotkey
30+
{
31+
get { return RubberduckHotkey.RefactorExtractMethod; }
32+
}
33+
2834
public override bool CanExecute(object parameter)
2935
{
3036
if (Vbe.ActiveCodePane == null || _state.Status != ParserState.Ready)

0 commit comments

Comments
 (0)