Skip to content
This repository has been archived by the owner on Oct 16, 2020. It is now read-only.

Commit

Permalink
Register bindings by providing binding info object instead bunch of a…
Browse files Browse the repository at this point in the history
…rguments. Show bindings in options panel. Add categories and allow multiple gestures in InputBindingInfo instance

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/shortcuts@4274 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
  • Loading branch information
sandrejev committed Jun 10, 2009
1 parent 74ef0ed commit d1fd283
Show file tree
Hide file tree
Showing 16 changed files with 622 additions and 330 deletions.
182 changes: 146 additions & 36 deletions AddIns/ICSharpCode.SharpDevelop.addin
Expand Up @@ -99,42 +99,152 @@


<Path name="/SharpDevelop/Workbench/CommandBindings">
<CommandBinding command="SDTestCommands.Test" class="ICSharpCode.SharpDevelop.Commands.TestCommand" gestures="Ctrl+M" />

<CommandBinding command="SDBuildCommands.BuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Build" gestures="F8" />
<CommandBinding command="SDBuildCommands.RebuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Rebuild" gestures="Alt+F8" />
<CommandBinding command="SDBuildCommands.CleanSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Clean" />
<CommandBinding command="SDBuildCommands.BuildProject" class="ICSharpCode.SharpDevelop.Project.Commands.BuildProject" gestures="F9" />
<CommandBinding command="SDBuildCommands.RebuildProject" class="ICSharpCode.SharpDevelop.Project.Commands.RebuildProject" gestures="Alt+F9" />
<CommandBinding command="SDBuildCommands.CleanProject" class="ICSharpCode.SharpDevelop.Project.Commands.CleanProject" />
<CommandBinding command="SDBuildCommands.AbortBuild" class="ICSharpCode.SharpDevelop.Project.Commands.AbortBuild" />
<CommandBinding command="SDBuildCommands.EditConfigurationsCommand" class="ICSharpCode.SharpDevelop.Project.Commands.EditConfigurationsCommand" />

<CommandBinding command="SDProjectCommands.AddNewProjectToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddNewProjectToSolution" />
<CommandBinding command="SDProjectCommands.AddExitingProjectToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddExitingProjectToSolution" />
<CommandBinding command="SDProjectCommands.AddExistingItemToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemToSolution" />
<CommandBinding command="SDProjectCommands.AddNewSolutionFolderToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddNewSolutionFolderToSolution" />


<CommandBinding command="SDDebugCommands.Execute" class="ICSharpCode.SharpDevelop.Project.Commands.Execute" gestures="F5" />
<CommandBinding command="SDDebugCommands.ExecuteWithoutDebugger" class="ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger" gestures="Ctrl+F5" />
<CommandBinding command="SDDebugCommands.StopDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand" />
<CommandBinding command="SDDebugCommands.AttachToProcess" class="ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand" />
<CommandBinding command="SDDebugCommands.DetachFromProcess" class="ICSharpCode.SharpDevelop.Project.Commands.DetachFromProcessCommand" />
<CommandBinding command="SDDebugCommands.BreakDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.BreakDebuggingCommand" gestures="Ctrl+Alt+B" />
<CommandBinding command="SDDebugCommands.ContinueDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand" gestures="Ctrl+Alt+B" />
<CommandBinding command="SDDebugCommands.StepOver" class="ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand" gestures="F10" />
<CommandBinding command="SDDebugCommands.StepInto" class="ICSharpCode.SharpDevelop.Project.Commands.StepIntoDebuggingCommand" gestures="F11" />
<CommandBinding command="SDDebugCommands.StepOut" class="ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand" gestures="Shift+F11" />
<CommandBinding command="SDDebugCommands.ToggleBreakpoint" class="ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand" gestures="F7" />


<CommandBinding command="SDSearchCommands.ToggleBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark" gestures="Ctrl+F2" />
<CommandBinding command="SDSearchCommands.PrevBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark" gestures="Alt+F2" />
<CommandBinding command="SDSearchCommands.NextBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.NextBookmark" gestures="F2" />
<CommandBinding command="SDSearchCommands.ClearBookmarks" class="ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks" />
<CommandBinding command="SDSearchCommands.GotoLineNumber" class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoLineNumber" gestures="Ctrl+G" />
<CommandBinding command="SDSearchCommands.GotoBrace" class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoMatchingBrace" gestures="Ctrl+B" />
<CommandBinding
command="SDTestCommands.Test"
class="ICSharpCode.SharpDevelop.Commands.TestCommand"
gestures="Ctrl+M"
category="Test" />


<CommandBinding
command="SDBuildCommands.BuildSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.Build"
gestures="F8"
category="Building" />
<CommandBinding
command="SDBuildCommands.RebuildSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.Rebuild"
gestures="Alt+F8"
category="Building" />
<CommandBinding
command="SDBuildCommands.CleanSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.Clean"
category="Building" />
<CommandBinding
command="SDBuildCommands.BuildProject"
class="ICSharpCode.SharpDevelop.Project.Commands.BuildProject"
gestures="F9"
category="Building" />
<CommandBinding
command="SDBuildCommands.RebuildProject"
class="ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"
gestures="Alt+F9"
category="Building" />
<CommandBinding
command="SDBuildCommands.CleanProject"
class="ICSharpCode.SharpDevelop.Project.Commands.CleanProject"
category="Buildin" />
<CommandBinding
command="SDBuildCommands.AbortBuild"
class="ICSharpCode.SharpDevelop.Project.Commands.AbortBuild"
category="Buildin" />
<CommandBinding
command="SDBuildCommands.EditConfigurationsCommand"
class="ICSharpCode.SharpDevelop.Project.Commands.EditConfigurationsCommand"
category="Buildin" />


<CommandBinding
command="SDProjectCommands.AddNewProjectToSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.AddNewProjectToSolution"
category="Project" />
<CommandBinding
command="SDProjectCommands.AddExitingProjectToSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.AddExitingProjectToSolution"
category="Project" />
<CommandBinding
command="SDProjectCommands.AddExistingItemToSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemToSolution"
category="Project" />
<CommandBinding
command="SDProjectCommands.AddNewSolutionFolderToSolution"
class="ICSharpCode.SharpDevelop.Project.Commands.AddNewSolutionFolderToSolution"
category="Project" />


<CommandBinding
command="SDDebugCommands.Execute"
class="ICSharpCode.SharpDevelop.Project.Commands.Execute"
gestures="F5"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.ExecuteWithoutDebugger"
class="ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger"
gestures="Ctrl+F5"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.StopDebugging"
class="ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.AttachToProcess"
class="ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand"
category="Project" />
<CommandBinding
command="SDDebugCommands.DetachFromProcess"
class="ICSharpCode.SharpDevelop.Project.Commands.DetachFromProcessCommand"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.BreakDebugging"
class="ICSharpCode.SharpDevelop.Project.Commands.BreakDebuggingCommand"
gestures="Ctrl+Alt+B"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.ContinueDebugging"
class="ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand"
gestures="Ctrl+Alt+B | Ctrl+Alt+D"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.StepOver"
class="ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand"
gestures="F10"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.StepInto"
class="ICSharpCode.SharpDevelop.Project.Commands.StepIntoDebuggingCommand"
gestures="F11"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.StepOut"
class="ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand"
gestures="Shift+F11"
category="Debugger" />
<CommandBinding
command="SDDebugCommands.ToggleBreakpoint"
class="ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand"
gestures="F7"
category="Debugger" />


<CommandBinding
command="SDSearchCommands.ToggleBookmark"
class="ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark"
gestures="Ctrl+F2"
category="Search" />
<CommandBinding
command="SDSearchCommands.PrevBookmark"
class="ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark"
gestures="Alt+F2"
category="Search" />
<CommandBinding
command="SDSearchCommands.NextBookmark"
class="ICSharpCode.SharpDevelop.Bookmarks.NextBookmark"
gestures="F2"
category="Search" />
<CommandBinding
command="SDSearchCommands.ClearBookmarks"
class="ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks"
category="Search" />
<CommandBinding
command="SDSearchCommands.GotoLineNumber"
class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoLineNumber"
gestures="Ctrl+G"
category="Search" />
<CommandBinding
command="SDSearchCommands.GotoBrace"
class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoMatchingBrace"
gestures="Ctrl+B"
category="Search" />
</Path>

<Path name="/SharpDevelop/Workbench/InputBindings">
Expand Down
10 changes: 9 additions & 1 deletion src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
Expand Up @@ -120,7 +120,15 @@ public CodeEditor()
var contextName = this.GetType().FullName;
CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, this, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, contextName, this));
CommandsRegistry.RegisterInputBindingUpdateHandler(contextName, this, CommandsRegistry.CreateInputBindingUpdateHandler(InputBindings, contextName, this));
CommandsRegistry.RegisterCommandBinding(contextName, this, "SDWindowCommands.SplitView", OnSplitView, OnCanSplitView);

var commandBindingInfo = new CommandBindingInfo();
commandBindingInfo.ContextName = contextName;
commandBindingInfo.Context = this;
commandBindingInfo.RoutedCommandName = "SDWindowCommands.SplitView";
commandBindingInfo.ExecutedEventHandler = OnSplitView;
commandBindingInfo.CanExecutedEventHandler = OnCanSplitView;

CommandsRegistry.RegisterCommandBinding(commandBindingInfo);

CommandsRegistry.InvokeCommandBindingUpdateHandlers(contextName, this);
CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName, this);
Expand Down
Binary file modified src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo
Binary file not shown.
Expand Up @@ -31,7 +31,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
foreach (var gesture in (ObservableCollection<InputGesture>)value) {
inputGestureCollection.Add(gesture);
}
return new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection);
return new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection).Replace("+", " + ").Replace("|", " | ");
}

return value.ToString();
Expand Down
@@ -1,9 +1,13 @@
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using System.Windows.Controls;
using System.Windows.Input;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop;
using ICSharpCode.ShortcutsManagement.Data;
using AddIn=ICSharpCode.Core.AddIn;
using ShortcutManagement=ICSharpCode.ShortcutsManagement.Data;

namespace ICSharpCode.ShortcutsManagement
Expand All @@ -29,37 +33,82 @@ public ShortcutsManagementOptionsPanel()
// Test data
var addins = new ObservableCollection<ShortcutManagement.AddIn>();
addins.Add(new ShortcutManagement.AddIn("SharpDevelop"));
addins[0].Categories.Add(new ShortcutManagement.ShortcutCategory("Editing"));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Copy", GetGestures("Ctrl + C")));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Paste", GetGestures("Ctrl + V | Ctrl+Insert")));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Cut", GetGestures("Ctrl + X")));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Undo", GetGestures("Ctrl + Z")));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Redo", GetGestures("Ctrl + Y")));
addins[0].Categories.Add(new ShortcutManagement.ShortcutCategory("Building"));
addins[0].Categories[1].Shortcuts.Add(new ShortcutManagement.Shortcut("Build", GetGestures("Ctrl + Shift+B")));
addins[0].Categories[1].Shortcuts.Add(new ShortcutManagement.Shortcut("Run", GetGestures("F5")));
addins[0].Categories[1].Shortcuts.Add(new ShortcutManagement.Shortcut("Run without debuger", GetGestures("Ctrl + F5")));
addins[0].Categories[1].Shortcuts.Add(new ShortcutManagement.Shortcut("Attach debuger", GetGestures("Ctrl + F8")));
addins[0].Categories.Add(new ShortcutManagement.ShortcutCategory("Uncategorized"));
addins[0].Categories[2].Shortcuts.Add(new ShortcutManagement.Shortcut("Attach debuger", GetGestures("Ctrl + F8")));
addins[0].Categories.Add(new ShortcutCategory("Editing"));
addins[0].Categories[0].Shortcuts.Add(new Shortcut("Copy", GetGestures("Ctrl + C")));
addins[0].Categories[0].Shortcuts.Add(new Shortcut("Paste", GetGestures("Ctrl + V | Ctrl+Insert")));
addins[0].Categories[0].Shortcuts.Add(new Shortcut("Cut", GetGestures("Ctrl + X")));
addins[0].Categories[0].Shortcuts.Add(new Shortcut("Undo", GetGestures("Ctrl + Z")));
addins[0].Categories[0].Shortcuts.Add(new Shortcut("Redo", GetGestures("Ctrl + Y")));
addins[0].Categories.Add(new ShortcutCategory("Building"));
addins[0].Categories[1].Shortcuts.Add(new Shortcut("Build", GetGestures("Ctrl + Shift+B")));
addins[0].Categories[1].Shortcuts.Add(new Shortcut("Run", GetGestures("F5")));
addins[0].Categories[1].Shortcuts.Add(new Shortcut("Run without debuger", GetGestures("Ctrl + F5")));
addins[0].Categories[1].Shortcuts.Add(new Shortcut("Attach debuger", GetGestures("Ctrl + F8")));
addins[0].Categories.Add(new ShortcutCategory("Uncategorized"));
addins[0].Categories[2].Shortcuts.Add(new Shortcut("Attach debuger", GetGestures("Ctrl + F8")));

addins.Add(new ShortcutManagement.AddIn("Search & replace"));
addins[1].Categories.Add(new ShortcutManagement.ShortcutCategory("Uncategorized"));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Quick find", GetGestures("Ctrl + F")));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Quick replace", GetGestures("Ctrl + H")));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Find in files", GetGestures("Ctrl + Shift + F | Ctrl + Shift + H | Ctrl + I")));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Replace in files", GetGestures("Ctrl + Shift + H")));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Find symbol", null));
addins[1].Categories.Add(new ShortcutCategory("Uncategorized"));
addins[1].Categories[0].Shortcuts.Add(new Shortcut("Quick find", GetGestures("Ctrl + F")));
addins[1].Categories[0].Shortcuts.Add(new Shortcut("Quick replace", GetGestures("Ctrl + H")));
addins[1].Categories[0].Shortcuts.Add(new Shortcut("Find in files", GetGestures("Ctrl + Shift + F | Ctrl + Shift + H | Ctrl + I")));
addins[1].Categories[0].Shortcuts.Add(new Shortcut("Replace in files", GetGestures("Ctrl + Shift + H")));
addins[1].Categories[0].Shortcuts.Add(new Shortcut("Find symbol", null));

addins.Add(new ShortcutManagement.AddIn("Unspecified"));
addins[2].Categories.Add(new ShortcutManagement.ShortcutCategory("Uncategorized"));
addins[2].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Test regex expression", null));
addins[2].Categories.Add(new ShortcutCategory("Uncategorized"));
addins[2].Categories[0].Shortcuts.Add(new Shortcut("Test regex expression", null));

shortcutsManagementOptionsPanel.DataContext = addins;
}

public void LoadOptions() {

public void LoadOptions()
{
// Load shortcuts for real
var unspecifiedAddInSection = new ShortcutManagement.AddIn("Unspecified");
unspecifiedAddInSection.Categories.Add(new ShortcutCategory("Uncategorized"));

var addIns = new ObservableCollection<ShortcutManagement.AddIn>();
addIns.Add(unspecifiedAddInSection);

var addInsMap = new Dictionary<AddIn, ShortcutManagement.AddIn>();
var categoriesMap = new Dictionary<ShortcutManagement.AddIn, Dictionary<string, ShortcutCategory>>();

foreach(var inputBindingInfo in CommandsRegistry.InputBidnings) {
ShortcutManagement.AddIn addinSection;
if(inputBindingInfo.AddIn == null) {
addinSection = unspecifiedAddInSection;
} else if (addInsMap.ContainsKey(inputBindingInfo.AddIn)) {
addinSection = addInsMap[inputBindingInfo.AddIn];
} else {
addinSection = new ShortcutManagement.AddIn(inputBindingInfo.AddIn.Name);
addinSection.Categories.Add(new ShortcutCategory("Uncategorized"));
addInsMap.Add(inputBindingInfo.AddIn, addinSection);
categoriesMap.Add(addinSection, new Dictionary<string, ShortcutCategory>());
addIns.Add(addinSection);
}

ShortcutCategory categorySection;
if(string.IsNullOrEmpty(inputBindingInfo.CategoryName) || !categoriesMap[addinSection].ContainsKey(inputBindingInfo.CategoryName)) {
categorySection = addinSection.Categories[0];
} else {
categorySection = categoriesMap[addinSection][inputBindingInfo.CategoryName];
}

var shortcutText = !string.IsNullOrEmpty(inputBindingInfo.RoutedCommandText)
? inputBindingInfo.RoutedCommandText
: inputBindingInfo.RoutedCommand.Text;
shortcutText = StringParser.Parse(shortcutText);

// Some commands have "&" sign to mark alternative key used to call this command from menu
// Strip this sign
shortcutText = Regex.Replace(shortcutText, @"&([^\s])", @"$1");

var shortcut = new Shortcut(shortcutText, inputBindingInfo.Gestures);
categorySection.Shortcuts.Add(shortcut);
}

shortcutsManagementOptionsPanel.DataContext = addIns;
}

public bool SaveOptions() {
Expand Down

0 comments on commit d1fd283

Please sign in to comment.