Browse Source

Register bindings by providing binding info object instead bunch of arguments. 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
shortcuts^2
Sergej Andrejev 16 years ago
parent
commit
d1fd2832d4
  1. 182
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 10
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  3. BIN
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo
  4. 2
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs
  5. 95
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs
  6. 24
      src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs
  7. 12
      src/Main/Base/Project/Src/TextEditor/Codons/EditActionDoozer.cs
  8. 19
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDescriptor.cs
  9. 30
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/InputBindingDescriptor.cs
  10. 87
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs
  11. 86
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsRegistry.cs
  12. 46
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsService.cs
  13. 39
      src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs
  14. 33
      src/Main/ICSharpCode.Core.Presentation/CommandsService/InputGestureCollectionExtensions.cs
  15. 1
      src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj
  16. 278
      src/SharpDevelop.sln

182
AddIns/ICSharpCode.SharpDevelop.addin

@ -99,42 +99,152 @@
<Path name="/SharpDevelop/Workbench/CommandBindings"> <Path name="/SharpDevelop/Workbench/CommandBindings">
<CommandBinding command="SDTestCommands.Test" class="ICSharpCode.SharpDevelop.Commands.TestCommand" gestures="Ctrl+M" /> <CommandBinding
command="SDTestCommands.Test"
<CommandBinding command="SDBuildCommands.BuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Build" gestures="F8" /> class="ICSharpCode.SharpDevelop.Commands.TestCommand"
<CommandBinding command="SDBuildCommands.RebuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Rebuild" gestures="Alt+F8" /> gestures="Ctrl+M"
<CommandBinding command="SDBuildCommands.CleanSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Clean" /> category="Test" />
<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
<CommandBinding command="SDBuildCommands.AbortBuild" class="ICSharpCode.SharpDevelop.Project.Commands.AbortBuild" /> command="SDBuildCommands.BuildSolution"
<CommandBinding command="SDBuildCommands.EditConfigurationsCommand" class="ICSharpCode.SharpDevelop.Project.Commands.EditConfigurationsCommand" /> class="ICSharpCode.SharpDevelop.Project.Commands.Build"
gestures="F8"
<CommandBinding command="SDProjectCommands.AddNewProjectToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddNewProjectToSolution" /> category="Building" />
<CommandBinding command="SDProjectCommands.AddExitingProjectToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddExitingProjectToSolution" /> <CommandBinding
<CommandBinding command="SDProjectCommands.AddExistingItemToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemToSolution" /> command="SDBuildCommands.RebuildSolution"
<CommandBinding command="SDProjectCommands.AddNewSolutionFolderToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddNewSolutionFolderToSolution" /> class="ICSharpCode.SharpDevelop.Project.Commands.Rebuild"
gestures="Alt+F8"
category="Building" />
<CommandBinding command="SDDebugCommands.Execute" class="ICSharpCode.SharpDevelop.Project.Commands.Execute" gestures="F5" /> <CommandBinding
<CommandBinding command="SDDebugCommands.ExecuteWithoutDebugger" class="ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger" gestures="Ctrl+F5" /> command="SDBuildCommands.CleanSolution"
<CommandBinding command="SDDebugCommands.StopDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand" /> class="ICSharpCode.SharpDevelop.Project.Commands.Clean"
<CommandBinding command="SDDebugCommands.AttachToProcess" class="ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand" /> category="Building" />
<CommandBinding command="SDDebugCommands.DetachFromProcess" class="ICSharpCode.SharpDevelop.Project.Commands.DetachFromProcessCommand" /> <CommandBinding
<CommandBinding command="SDDebugCommands.BreakDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.BreakDebuggingCommand" gestures="Ctrl+Alt+B" /> command="SDBuildCommands.BuildProject"
<CommandBinding command="SDDebugCommands.ContinueDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand" gestures="Ctrl+Alt+B" /> class="ICSharpCode.SharpDevelop.Project.Commands.BuildProject"
<CommandBinding command="SDDebugCommands.StepOver" class="ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand" gestures="F10" /> gestures="F9"
<CommandBinding command="SDDebugCommands.StepInto" class="ICSharpCode.SharpDevelop.Project.Commands.StepIntoDebuggingCommand" gestures="F11" /> category="Building" />
<CommandBinding command="SDDebugCommands.StepOut" class="ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand" gestures="Shift+F11" /> <CommandBinding
<CommandBinding command="SDDebugCommands.ToggleBreakpoint" class="ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand" gestures="F7" /> command="SDBuildCommands.RebuildProject"
class="ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"
gestures="Alt+F9"
<CommandBinding command="SDSearchCommands.ToggleBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark" gestures="Ctrl+F2" /> category="Building" />
<CommandBinding command="SDSearchCommands.PrevBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark" gestures="Alt+F2" /> <CommandBinding
<CommandBinding command="SDSearchCommands.NextBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.NextBookmark" gestures="F2" /> command="SDBuildCommands.CleanProject"
<CommandBinding command="SDSearchCommands.ClearBookmarks" class="ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks" /> class="ICSharpCode.SharpDevelop.Project.Commands.CleanProject"
<CommandBinding command="SDSearchCommands.GotoLineNumber" class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoLineNumber" gestures="Ctrl+G" /> category="Buildin" />
<CommandBinding command="SDSearchCommands.GotoBrace" class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoMatchingBrace" gestures="Ctrl+B" /> <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>
<Path name="/SharpDevelop/Workbench/InputBindings"> <Path name="/SharpDevelop/Workbench/InputBindings">

10
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -120,7 +120,15 @@ namespace ICSharpCode.AvalonEdit.AddIn
var contextName = this.GetType().FullName; var contextName = this.GetType().FullName;
CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, this, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, contextName, this)); CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, this, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, contextName, this));
CommandsRegistry.RegisterInputBindingUpdateHandler(contextName, this, CommandsRegistry.CreateInputBindingUpdateHandler(InputBindings, 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.InvokeCommandBindingUpdateHandlers(contextName, this);
CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName, this); CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName, this);

BIN
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo

Binary file not shown.

2
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.ShortcutsManagement.Converters
foreach (var gesture in (ObservableCollection<InputGesture>)value) { foreach (var gesture in (ObservableCollection<InputGesture>)value) {
inputGestureCollection.Add(gesture); inputGestureCollection.Add(gesture);
} }
return new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection); return new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection).Replace("+", " + ").Replace("|", " | ");
} }
return value.ToString(); return value.ToString();

95
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs

@ -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.Controls;
using System.Windows.Input; using System.Windows.Input;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.Presentation; using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.ShortcutsManagement.Data;
using AddIn=ICSharpCode.Core.AddIn;
using ShortcutManagement=ICSharpCode.ShortcutsManagement.Data; using ShortcutManagement=ICSharpCode.ShortcutsManagement.Data;
namespace ICSharpCode.ShortcutsManagement namespace ICSharpCode.ShortcutsManagement
@ -29,37 +33,82 @@ namespace ICSharpCode.ShortcutsManagement
// Test data // Test data
var addins = new ObservableCollection<ShortcutManagement.AddIn>(); var addins = new ObservableCollection<ShortcutManagement.AddIn>();
addins.Add(new ShortcutManagement.AddIn("SharpDevelop")); addins.Add(new ShortcutManagement.AddIn("SharpDevelop"));
addins[0].Categories.Add(new ShortcutManagement.ShortcutCategory("Editing")); addins[0].Categories.Add(new ShortcutCategory("Editing"));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Copy", GetGestures("Ctrl + C"))); addins[0].Categories[0].Shortcuts.Add(new 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 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 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 Shortcut("Undo", GetGestures("Ctrl + Z")));
addins[0].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Redo", GetGestures("Ctrl + Y"))); addins[0].Categories[0].Shortcuts.Add(new Shortcut("Redo", GetGestures("Ctrl + Y")));
addins[0].Categories.Add(new ShortcutManagement.ShortcutCategory("Building")); addins[0].Categories.Add(new ShortcutCategory("Building"));
addins[0].Categories[1].Shortcuts.Add(new ShortcutManagement.Shortcut("Build", GetGestures("Ctrl + Shift+B"))); addins[0].Categories[1].Shortcuts.Add(new 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 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 Shortcut("Run without debuger", GetGestures("Ctrl + F5")));
addins[0].Categories[1].Shortcuts.Add(new ShortcutManagement.Shortcut("Attach debuger", GetGestures("Ctrl + F8"))); addins[0].Categories[1].Shortcuts.Add(new Shortcut("Attach debuger", GetGestures("Ctrl + F8")));
addins[0].Categories.Add(new ShortcutManagement.ShortcutCategory("Uncategorized")); addins[0].Categories.Add(new ShortcutCategory("Uncategorized"));
addins[0].Categories[2].Shortcuts.Add(new ShortcutManagement.Shortcut("Attach debuger", GetGestures("Ctrl + F8"))); addins[0].Categories[2].Shortcuts.Add(new Shortcut("Attach debuger", GetGestures("Ctrl + F8")));
addins.Add(new ShortcutManagement.AddIn("Search & replace")); addins.Add(new ShortcutManagement.AddIn("Search & replace"));
addins[1].Categories.Add(new ShortcutManagement.ShortcutCategory("Uncategorized")); addins[1].Categories.Add(new ShortcutCategory("Uncategorized"));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Quick find", GetGestures("Ctrl + F"))); addins[1].Categories[0].Shortcuts.Add(new 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 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 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 Shortcut("Replace in files", GetGestures("Ctrl + Shift + H")));
addins[1].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Find symbol", null)); addins[1].Categories[0].Shortcuts.Add(new Shortcut("Find symbol", null));
addins.Add(new ShortcutManagement.AddIn("Unspecified")); addins.Add(new ShortcutManagement.AddIn("Unspecified"));
addins[2].Categories.Add(new ShortcutManagement.ShortcutCategory("Uncategorized")); addins[2].Categories.Add(new ShortcutCategory("Uncategorized"));
addins[2].Categories[0].Shortcuts.Add(new ShortcutManagement.Shortcut("Test regex expression", null)); addins[2].Categories[0].Shortcuts.Add(new Shortcut("Test regex expression", null));
shortcutsManagementOptionsPanel.DataContext = addins; 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() { public bool SaveOptions() {

24
src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs

@ -6,6 +6,7 @@
// </file> // </file>
using System; using System;
using System.Linq;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
@ -474,17 +475,32 @@ namespace ICSharpCode.SharpDevelop.Commands
// TODO: fix this hack // TODO: fix this hack
if(!bindingsAssigned.Contains(routedCommandName)) { if(!bindingsAssigned.Contains(routedCommandName)) {
var addIn = AddInTree.AddIns.FirstOrDefault(a => a.Name == "SharpDevelop");
// Dynamicaly create routed UI command to loaded pad and bindings for it // Dynamicaly create routed UI command to loaded pad and bindings for it
CommandsRegistry.RegisterRoutedUICommand(routedCommandName, routedCommandText); CommandsRegistry.RegisterRoutedUICommand(routedCommandName, routedCommandText);
CommandsRegistry.LoadCommand(routedCommandName, new BringPadToFrontCommand(padContent)); CommandsRegistry.LoadCommand(routedCommandName, new BringPadToFrontCommand(padContent));
CommandsRegistry.RegisterCommandBinding(CommandsRegistry.DefaultContext, null, routedCommandName, routedCommandName, null, false);
var commandBindingInfo = new CommandBindingInfo();
commandBindingInfo.ClassName = routedCommandName;
commandBindingInfo.ContextName = CommandsRegistry.DefaultContext;
commandBindingInfo.RoutedCommandName = routedCommandName;
commandBindingInfo.AddIn = addIn;
CommandsRegistry.RegisterCommandBinding(commandBindingInfo);
// If pad have shortcut specified add input binding // If pad have shortcut specified add input binding
if (!string.IsNullOrEmpty(padContent.Shortcut)) { if (!string.IsNullOrEmpty(padContent.Shortcut)) {
var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(padContent.Shortcut); var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(padContent.Shortcut);
foreach(InputGesture gesture in gestures) {
CommandsRegistry.RegisterInputBinding(CommandsRegistry.DefaultContext, null, routedCommandName, gesture); var inputBindingInfo = new InputBindingInfo();
} inputBindingInfo.ContextName = CommandsRegistry.DefaultContext;
inputBindingInfo.RoutedCommandName = routedCommandName;
inputBindingInfo.Gestures = gestures;
inputBindingInfo.CategoryName = "Views";
inputBindingInfo.AddIn = addIn;
CommandsRegistry.RegisterInputBinding(inputBindingInfo);
} }
bindingsAssigned.Add(routedCommandName); bindingsAssigned.Add(routedCommandName);

12
src/Main/Base/Project/Src/TextEditor/Codons/EditActionDoozer.cs

@ -9,6 +9,7 @@ using System;
using System.Collections; using System.Collections;
using System.Reflection; using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
using ICSharpCode.Core.WinForms;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.TextEditor.Actions; using ICSharpCode.TextEditor.Actions;
@ -44,17 +45,8 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Codons
public object BuildItem(object caller, Codon codon, ArrayList subItems) public object BuildItem(object caller, Codon codon, ArrayList subItems)
{ {
IEditAction editAction = (IEditAction)codon.AddIn.CreateObject(codon.Properties["class"]); IEditAction editAction = (IEditAction)codon.AddIn.CreateObject(codon.Properties["class"]);
string[] keys = codon.Properties["keys"].Split(',');
Keys[] actionKeys = new Keys[keys.Length]; var actionKeys = (Keys[])new KeysCollectionConverter().ConvertFrom(codon.Properties["keys"]);
for (int j = 0; j < keys.Length; ++j) {
string[] keydescr = keys[j].Split('|');
Keys key = (Keys)((System.Windows.Forms.Keys.Space.GetType()).InvokeMember(keydescr[0], BindingFlags.GetField, null, System.Windows.Forms.Keys.Space, new object[0]));
for (int k = 1; k < keydescr.Length; ++k) {
key |= (Keys)((System.Windows.Forms.Keys.Space.GetType()).InvokeMember(keydescr[k], BindingFlags.GetField, null, System.Windows.Forms.Keys.Space, new object[0]));
}
actionKeys[j] = key;
}
editAction.Keys = actionKeys; editAction.Keys = actionKeys;
return editAction; return editAction;

19
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDescriptor.cs

@ -24,11 +24,20 @@ namespace ICSharpCode.Core
/// <summary> /// <summary>
/// Full name of routed UI command which will trigger this binding /// Full name of routed UI command which will trigger this binding
///
/// If command with provided name is not yet registered it's created automatically
/// </summary> /// </summary>
public string Command { public string Command {
get; private set; get; private set;
} }
/// <summary>
/// Override routed command text (string visible to user) if specified
/// </summary>
public string CommandText {
get; private set;
}
/// <summary> /// <summary>
/// Full name of context class. /// Full name of context class.
/// ///
@ -47,6 +56,14 @@ namespace ICSharpCode.Core
get; private set; get; private set;
} }
/// <summary>
/// If input binding is created in the same context (this is done by setting <see cref="Gestures" /> property)
/// assign this input binding to provided category
/// </summary>
public string Category {
get; private set;
}
/// <summary> /// <summary>
/// Lazy loading /// Lazy loading
/// ///
@ -68,8 +85,10 @@ namespace ICSharpCode.Core
Codon = codon; Codon = codon;
Class = Codon.Properties["class"]; Class = Codon.Properties["class"];
Command = Codon.Properties["command"]; Command = Codon.Properties["command"];
CommandText = Codon.Properties["commandtext"];
Context = Codon.Properties["context"]; Context = Codon.Properties["context"];
Gestures = Codon.Properties["gestures"]; Gestures = Codon.Properties["gestures"];
Category = Codon.Properties["category"];
} }
} }
} }

30
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/InputBindingDescriptor.cs

@ -7,6 +7,13 @@ namespace ICSharpCode.Core
/// </summary> /// </summary>
public class InputBindingDescriptor public class InputBindingDescriptor
{ {
/// <summary>
/// Codon used to create this descriptor
/// </summary>
public Codon Codon {
get; private set;
}
/// <summary> /// <summary>
/// Full name of routed UI command which will be invoked when this binding is triggered /// Full name of routed UI command which will be invoked when this binding is triggered
/// </summary> /// </summary>
@ -14,6 +21,13 @@ namespace ICSharpCode.Core
get; private set; get; private set;
} }
/// <summary>
/// Override routed command text (string visible to user) if specified
/// </summary>
public string CommandText {
get; private set;
}
/// <summary> /// <summary>
/// Full name of context class. /// Full name of context class.
/// ///
@ -24,9 +38,16 @@ namespace ICSharpCode.Core
} }
/// <summary> /// <summary>
/// Description of gesture which will trigger this bindin /// Description of gesture which will trigger this binding
/// </summary>
public string Gestures {
get; private set;
}
/// <summary>
/// Category to which this binding belongs
/// </summary> /// </summary>
public string Gesture { public string Category {
get; private set; get; private set;
} }
@ -36,9 +57,12 @@ namespace ICSharpCode.Core
/// <param name="codon">Reference to codon used to create this descriptor</param> /// <param name="codon">Reference to codon used to create this descriptor</param>
public InputBindingDescriptor(Codon codon) public InputBindingDescriptor(Codon codon)
{ {
Codon = codon;
Command = codon.Properties["command"]; Command = codon.Properties["command"];
CommandText = codon.Properties["commandtext"];
Context = codon.Properties["context"]; Context = codon.Properties["context"];
Gesture = codon.Properties["gesture"]; Gestures = codon.Properties["gestures"];
Category = codon.Properties["category"];
} }
} }
} }

87
src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs

@ -11,44 +11,8 @@ namespace ICSharpCode.Core.Presentation
{ {
private UIElement contextInstance; private UIElement contextInstance;
/// <summary> public CommandBindingInfo()
/// Constructor {
/// </summary>
/// <param name="contextName">Context full name</param>
/// <param name="routedCommandName">Name of routed UI command which triggers this binding</param>
/// <param name="className">Command full name</param>
/// <param name="addIn">Add-in where command is registered</param>
/// <param name="isLazy">Lazy load command</param>
public CommandBindingInfo(string contextName, string routedCommandName, string className, AddIn addIn, bool isLazy) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
ClassName = className;
IsLazy = isLazy;
AddIn = addIn;
}
public CommandBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, string className, AddIn addIn, bool isLazy) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
ClassName = className;
IsLazy = isLazy;
AddIn = addIn;
this.contextInstance = contextInstance;
}
public CommandBindingInfo(string contextName, string routedCommandName, ExecutedRoutedEventHandler executedHandler, CanExecuteRoutedEventHandler canExecuteHandler) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
this.executedEventHandler = executedHandler;
this.canExecutedEventHandler = canExecuteHandler;
}
public CommandBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, ExecutedRoutedEventHandler executedHandler, CanExecuteRoutedEventHandler canExecuteHandler) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
this.executedEventHandler = executedHandler;
this.canExecutedEventHandler = canExecuteHandler;
this.contextInstance = contextInstance;
} }
/// <summary> /// <summary>
@ -58,7 +22,7 @@ namespace ICSharpCode.Core.Presentation
/// </summary> /// </summary>
/// <seealso cref="RoutedCommand"></seealso> /// <seealso cref="RoutedCommand"></seealso>
public string RoutedCommandName { public string RoutedCommandName {
get; private set; get; set;
} }
/// <summary> /// <summary>
@ -77,7 +41,7 @@ namespace ICSharpCode.Core.Presentation
/// Add-in to which binded command belongs /// Add-in to which binded command belongs
/// </summary> /// </summary>
public AddIn AddIn { public AddIn AddIn {
get; private set; get; set;
} }
/// <summary> /// <summary>
@ -87,9 +51,11 @@ namespace ICSharpCode.Core.Presentation
/// </summary> /// </summary>
/// <seealso cref="Class"></seealso> /// <seealso cref="Class"></seealso>
public string ClassName { public string ClassName {
get; private set; get; set;
} }
private System.Windows.Input.ICommand classInstance;
/// <summary> /// <summary>
/// Binded command instance /// Binded command instance
/// ///
@ -99,13 +65,21 @@ namespace ICSharpCode.Core.Presentation
/// </summary> /// </summary>
/// <seealso cref="ClassName"></seealso> /// <seealso cref="ClassName"></seealso>
public System.Windows.Input.ICommand Class { public System.Windows.Input.ICommand Class {
set {
classInstance = value;
}
get { get {
if(classInstance != null) {
return classInstance;
}
if(AddIn != null && (AddIn.DependenciesLoaded || IsLazy)) { if(AddIn != null && (AddIn.DependenciesLoaded || IsLazy)) {
CommandsRegistry.LoadAddinCommands(AddIn); CommandsRegistry.LoadAddinCommands(AddIn);
} }
System.Windows.Input.ICommand command; System.Windows.Input.ICommand command;
CommandsRegistry.commands.TryGetValue(ClassName, out command); CommandsRegistry.commands.TryGetValue(ClassName, out command);
classInstance = command;
return command; return command;
} }
@ -117,7 +91,7 @@ namespace ICSharpCode.Core.Presentation
/// Described binding will be valid in this context /// Described binding will be valid in this context
/// </summary> /// </summary>
public string ContextName{ public string ContextName{
get; private set; get; set;
} }
/// <summary> /// <summary>
@ -126,6 +100,9 @@ namespace ICSharpCode.Core.Presentation
/// Described binding will be valid in this context /// Described binding will be valid in this context
/// </summary> /// </summary>
public UIElement Context { public UIElement Context {
set {
contextInstance = value;
}
get { get {
if(contextInstance != null) { if(contextInstance != null) {
return contextInstance; return contextInstance;
@ -146,13 +123,22 @@ namespace ICSharpCode.Core.Presentation
/// to false then this binding can't be triggered until add-in is loaded. /// to false then this binding can't be triggered until add-in is loaded.
/// </summary> /// </summary>
public bool IsLazy{ public bool IsLazy{
get; private set; get; set;
}
public ExecutedRoutedEventHandler ExecutedEventHandler
{
get; set;
}
public CanExecuteRoutedEventHandler CanExecutedEventHandler
{
get; set;
} }
private ExecutedRoutedEventHandler executedEventHandler; internal void GeneratedExecutedEventHandler(object sender, ExecutedRoutedEventArgs e) {
public void ExecutedEventHandler(object sender, ExecutedRoutedEventArgs e) { if(ExecutedEventHandler != null) {
if(executedEventHandler != null) { ExecutedEventHandler.Invoke(sender, e);
executedEventHandler.Invoke(sender, e);
} else { } else {
if(IsLazy && Class == null) { if(IsLazy && Class == null) {
AddIn.LoadRuntimeAssemblies(); AddIn.LoadRuntimeAssemblies();
@ -167,10 +153,9 @@ namespace ICSharpCode.Core.Presentation
} }
} }
private CanExecuteRoutedEventHandler canExecutedEventHandler; internal void GeneratedCanExecuteEventHandler(object sender, CanExecuteRoutedEventArgs e) {
public void CanExecuteEventHandler(object sender, CanExecuteRoutedEventArgs e) { if(CanExecutedEventHandler != null) {
if(canExecutedEventHandler != null) { CanExecutedEventHandler.Invoke(sender, e);
canExecutedEventHandler.Invoke(sender, e);
} else { } else {
if(IsLazy && Class == null) { if(IsLazy && Class == null) {
e.CanExecute = true; e.CanExecute = true;

86
src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsRegistry.cs

@ -28,6 +28,20 @@ namespace ICSharpCode.Core.Presentation
get; set; get; set;
} }
public static ICollection<CommandBindingInfo> CommandBindings
{
get {
return commandBindings;
}
}
public static List<InputBindingInfo> InputBidnings
{
get {
return inputBidnings;
}
}
private static List<CommandBindingInfo> commandBindings = new List<CommandBindingInfo>(); private static List<CommandBindingInfo> commandBindings = new List<CommandBindingInfo>();
private static List<InputBindingInfo> inputBidnings = new List<InputBindingInfo>(); private static List<InputBindingInfo> inputBidnings = new List<InputBindingInfo>();
@ -107,23 +121,18 @@ namespace ICSharpCode.Core.Presentation
} }
} }
/// <summary> public static void RegisterInputBinding(InputBindingInfo inputBindingInfo)
/// Register input binding in context {
///
/// Registering input binding means that when specified gesture is met in specified
/// context routed command is invoked
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Context class instance. If instance is provided this input binding only applies to provided UI element</param>
/// <param name="routedCommandName">Routed UI command invoked on gesture run</param>
/// <param name="gesture">Gesture</param>
public static void RegisterInputBinding(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
var inputBindingInfo = new InputBindingInfo(contextName, contextInstance, routedCommandName, gesture);
inputBidnings.Add(inputBindingInfo); inputBidnings.Add(inputBindingInfo);
} }
public static void UnregisterInputBinding(InputBindingInfo inputBindingInfo)
{
inputBidnings.Remove(inputBindingInfo);
}
/// <summary> /// <summary>
/// Remove input bindings which satisfy provided arguments /// Find input input bindings which satisfy provided arguments
/// ///
/// Null arguments are ignored /// Null arguments are ignored
/// </summary> /// </summary>
@ -131,15 +140,18 @@ namespace ICSharpCode.Core.Presentation
/// <param name="contextInstance">Unregister binding assigned to specific context instance</param> /// <param name="contextInstance">Unregister binding assigned to specific context instance</param>
/// <param name="routedCommandName">Routed UI command name</param> /// <param name="routedCommandName">Routed UI command name</param>
/// <param name="gesture">Gesture</param> /// <param name="gesture">Gesture</param>
public static void UnregisterInputBindings(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) { public static ICollection<InputBindingInfo> FindInputBindingInfos(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
var foundBindings = new List<InputBindingInfo>();
for(int i = inputBidnings.Count - 1; i >= 0; i--) { for(int i = inputBidnings.Count - 1; i >= 0; i--) {
if((contextName == null || inputBidnings[i].ContextName == contextName) if((contextName == null || inputBidnings[i].ContextName == contextName)
&& (contextInstance == null || inputBidnings[i].Context == null || inputBidnings[i].Context == contextInstance) && (contextInstance == null || inputBidnings[i].Context == null || inputBidnings[i].Context == contextInstance)
&& (routedCommandName == null || inputBidnings[i].RoutedCommandName == routedCommandName) && (routedCommandName == null || inputBidnings[i].RoutedCommandName == routedCommandName)
&& (gesture == null || inputBidnings[i].Gesture == gesture)) { && (gesture == null || inputBidnings[i].Gestures.ContainsCopy(gesture))) {
inputBidnings.RemoveAt(i); foundBindings.Add(inputBidnings[i]);
} }
} }
return foundBindings;
} }
/// <summary> /// <summary>
@ -238,35 +250,10 @@ namespace ICSharpCode.Core.Presentation
} }
} }
/// <summary> public static void RegisterCommandBinding(CommandBindingInfo commandBindingInfo) {
/// Register command binding
///
/// Registering command binding means that when provided routed command is invoked
/// in specified context event is routed to specified command (implementing ICommand class)
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Register update handler which is triggered only if input bindings registered for specific instance are updated</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="className">Command full name to which invokation event is routed</param>
/// <param name="addIn">Add-in in which hosts the command</param>
/// <param name="isLazy">Load add-in referenced assemblies on command invocation</param>
public static void RegisterCommandBinding(string contextName, UIElement contextInstance, string routedCommandName, string className, AddIn addIn, bool isLazy) {
var commandBindingInfo = new CommandBindingInfo(contextName, contextInstance, routedCommandName, className, addIn, isLazy);
commandBindings.Add(commandBindingInfo); commandBindings.Add(commandBindingInfo);
} }
/// <summary>
/// Register command binding which when triggered provided delegates are invoked
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Register update handler which is triggered only if input bindings registered for specific instance are updated</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="executedEventHandler">Delegate which is called when binding is triggered</param>
/// <param name="canExecuteEventHandler">Delegate which is called to check whether executedEventHandler can be invoked</param>
public static void RegisterCommandBinding(string contextName, UIElement contextInstance, string routedCommandName, ExecutedRoutedEventHandler executedEventHandler, CanExecuteRoutedEventHandler canExecuteEventHandler) {
var commandBindingInfo = new CommandBindingInfo(contextName, contextInstance, routedCommandName, executedEventHandler, canExecuteEventHandler);
commandBindings.Add(commandBindingInfo);
}
/// <summary> /// <summary>
/// Remove all command bindings which satisfy provided parameters /// Remove all command bindings which satisfy provided parameters
@ -391,6 +378,11 @@ namespace ICSharpCode.Core.Presentation
foreach(var binding in commandBindings) { foreach(var binding in commandBindings) {
if(binding.AddIn != addIn) continue; if(binding.AddIn != addIn) continue;
if(binding.ClassName == null)
{
}
if(!commands.ContainsKey(binding.ClassName)){ if(!commands.ContainsKey(binding.ClassName)){
var command = addIn.CreateObject(binding.ClassName); var command = addIn.CreateObject(binding.ClassName);
var wpfCommand = command as System.Windows.Input.ICommand; var wpfCommand = command as System.Windows.Input.ICommand;
@ -449,8 +441,8 @@ namespace ICSharpCode.Core.Presentation
&& (className == null || binding.ClassName == className)) { && (className == null || binding.ClassName == className)) {
var managedCommandBinding = new ManagedCommandBinding(binding.RoutedCommand); var managedCommandBinding = new ManagedCommandBinding(binding.RoutedCommand);
managedCommandBinding.CanExecute += binding.CanExecuteEventHandler; managedCommandBinding.CanExecute += binding.GeneratedCanExecuteEventHandler;
managedCommandBinding.Executed += binding.ExecutedEventHandler; managedCommandBinding.Executed += binding.GeneratedExecutedEventHandler;
bindings.Add(managedCommandBinding); bindings.Add(managedCommandBinding);
} }
@ -475,9 +467,11 @@ namespace ICSharpCode.Core.Presentation
if((contextName == null || binding.ContextName == contextName) if((contextName == null || binding.ContextName == contextName)
&& (contextInstance == null || binding.Context == null || binding.Context == contextInstance) && (contextInstance == null || binding.Context == null || binding.Context == contextInstance)
&& (routedCommandName == null || binding.RoutedCommandName == routedCommandName) && (routedCommandName == null || binding.RoutedCommandName == routedCommandName)
&& (gesture == null || binding.Gesture == gesture)) { && (gesture == null || binding.Gestures.ContainsCopy(gesture))) {
bindings.Add(new ManagedInputBinding(binding.RoutedCommand, binding.Gesture)); foreach(InputGesture bindingGesture in binding.Gestures) {
bindings.Add(new ManagedInputBinding(binding.RoutedCommand, bindingGesture));
}
} }
} }

46
src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsService.cs

@ -43,17 +43,37 @@ namespace ICSharpCode.Core.Presentation
// If routed with such name is not registered register routed command with text same as name // If routed with such name is not registered register routed command with text same as name
if(CommandsRegistry.GetRoutedUICommand(desc.Command) == null) { if(CommandsRegistry.GetRoutedUICommand(desc.Command) == null) {
CommandsRegistry.RegisterRoutedUICommand(desc.Command, desc.Command); var commandText = string.IsNullOrEmpty(desc.CommandText) ? desc.Command : desc.CommandText;
CommandsRegistry.RegisterRoutedUICommand(desc.Command, commandText);
} }
CommandsRegistry.RegisterCommandBinding(contextName, null, desc.Command, desc.Class, desc.Codon.AddIn, desc.Lazy); var commandBindingInfo = new CommandBindingInfo();
commandBindingInfo.ContextName = contextName;
commandBindingInfo.RoutedCommandName = desc.Command;
commandBindingInfo.ClassName = desc.Class;
commandBindingInfo.AddIn = desc.Codon.AddIn;
commandBindingInfo.IsLazy = desc.Lazy;
CommandsRegistry.RegisterCommandBinding(commandBindingInfo);
// If gestures are provided register input binding in the same context // If gestures are provided register input binding in the same context
if(!string.IsNullOrEmpty(desc.Gestures)) { if(!string.IsNullOrEmpty(desc.Gestures)) {
var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(desc.Gestures); var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(desc.Gestures);
foreach(InputGesture gesture in gestures) {
CommandsRegistry.RegisterInputBinding(contextName, null, desc.Command, gesture); var inputBindingInfo = new InputBindingInfo();
inputBindingInfo.ContextName = contextName;
inputBindingInfo.AddIn = desc.Codon.AddIn;
inputBindingInfo.RoutedCommandName = desc.Command;
inputBindingInfo.Gestures = gestures;
if(!string.IsNullOrEmpty(desc.CommandText)) {
inputBindingInfo.RoutedCommandText = desc.CommandText;
} }
if(!string.IsNullOrEmpty(desc.Category)) {
inputBindingInfo.CategoryName = desc.Category;
}
CommandsRegistry.RegisterInputBinding(inputBindingInfo);
} }
} }
} }
@ -62,10 +82,24 @@ namespace ICSharpCode.Core.Presentation
{ {
var descriptors = AddInTree.BuildItems<InputBindingDescriptor>(path, caller, false); var descriptors = AddInTree.BuildItems<InputBindingDescriptor>(path, caller, false);
foreach(var desc in descriptors) { foreach(var desc in descriptors) {
var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(desc.Gestures);
var contextName = !string.IsNullOrEmpty(desc.Context) ? desc.Context : CommandsRegistry.DefaultContext; var contextName = !string.IsNullOrEmpty(desc.Context) ? desc.Context : CommandsRegistry.DefaultContext;
var gesture = (KeyGesture)new KeyGestureConverter().ConvertFromInvariantString(desc.Gesture); var inputBindingInfo = new InputBindingInfo();
CommandsRegistry.RegisterInputBinding(contextName, null, desc.Command, gesture); inputBindingInfo.ContextName = contextName;
inputBindingInfo.AddIn = desc.Codon.AddIn;
inputBindingInfo.RoutedCommandName = desc.Command;
inputBindingInfo.Gestures = gestures;
if(!string.IsNullOrEmpty(desc.CommandText)) {
inputBindingInfo.RoutedCommandText = desc.CommandText;
}
if(!string.IsNullOrEmpty(desc.Category)) {
inputBindingInfo.CategoryName = desc.Category;
}
CommandsRegistry.RegisterInputBinding(inputBindingInfo);
} }
} }
} }

39
src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs

@ -11,22 +11,26 @@ namespace ICSharpCode.Core.Presentation
{ {
private UIElement contextInstance; private UIElement contextInstance;
public InputBindingInfo() {
}
/// <summary> /// <summary>
/// Constructor /// Constructor
/// </summary> /// </summary>
/// <param name="contextName">Context full name</param> /// <param name="contextName">Context full name</param>
/// <param name="routedCommandName">Name of routed UI command which is triggered by this binding</param> /// <param name="routedCommandName">Name of routed UI command which is triggered by this binding</param>
/// <param name="gesture">Gesture which triggers this binding</param> /// <param name="gesture">Gesture which triggers this binding</param>
public InputBindingInfo(string contextName, string routedCommandName, InputGesture gesture) { public InputBindingInfo(string contextName, string routedCommandName, InputGestureCollection gestures) {
ContextName = contextName; ContextName = contextName;
RoutedCommandName = routedCommandName; RoutedCommandName = routedCommandName;
Gesture = gesture; Gestures = gestures;
} }
public InputBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) { public InputBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, InputGestureCollection gestures) {
ContextName = contextName; ContextName = contextName;
RoutedCommandName = routedCommandName; RoutedCommandName = routedCommandName;
Gesture = gesture; Gestures = gestures;
this.contextInstance = contextInstance; this.contextInstance = contextInstance;
} }
@ -58,6 +62,25 @@ namespace ICSharpCode.Core.Presentation
} }
} }
/// <summary>
/// Routed command text
///
/// Override routed command text when displaying to user
/// </summary>
/// <seealso cref="RoutedCommand"></seealso>
public string RoutedCommandText {
get; set;
}
/// <summary>
/// Add-in to which registered this input binding
/// </summary>
public AddIn AddIn {
get; set;
}
/// <summary> /// <summary>
/// Routed command name /// Routed command name
/// ///
@ -81,9 +104,13 @@ namespace ICSharpCode.Core.Presentation
} }
/// <summary> /// <summary>
/// Gesture which triggers this binding /// Gestures which triggers this binding
/// </summary> /// </summary>
public InputGesture Gesture { public InputGestureCollection Gestures {
get; set;
}
public string CategoryName {
get; set; get; set;
} }
} }

33
src/Main/ICSharpCode.Core.Presentation/CommandsService/InputGestureCollectionExtensions.cs

@ -0,0 +1,33 @@
using System;
using System.Windows.Input;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Description of InputGestureCollectionExtensions.
/// </summary>
public static class InputGestureCollectionExtensions
{
public static bool ContainsCopy(this InputGestureCollection gestures, InputGesture searchedGesture) {
var searchedKeyGesture = searchedGesture as KeyGesture;
var searchedMouseGesture = searchedGesture as MouseGesture;
foreach(var gesture in gestures) {
if(searchedKeyGesture != null) {
var keyGesture = gesture as KeyGesture;
if(keyGesture != null && keyGesture.Key == searchedKeyGesture.Key && keyGesture.Modifiers == searchedKeyGesture.Modifiers) {
return true;
}
} else if(searchedMouseGesture != null) {
var mouseGesture = gesture as MouseGesture;
if(mouseGesture != null && mouseGesture.MouseAction == searchedMouseGesture.MouseAction && mouseGesture.Modifiers == searchedMouseGesture.Modifiers) {
return true;
}
}
}
return false;
}
}
}

1
src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj

@ -73,6 +73,7 @@
<Compile Include="CommandsService\GesturePlaceHolderRegistry.cs" /> <Compile Include="CommandsService\GesturePlaceHolderRegistry.cs" />
<Compile Include="CommandsService\InputBindingInfo.cs" /> <Compile Include="CommandsService\InputBindingInfo.cs" />
<Compile Include="CommandsService\InputGestureCollectionConverter.cs" /> <Compile Include="CommandsService\InputGestureCollectionConverter.cs" />
<Compile Include="CommandsService\InputGestureCollectionExtensions.cs" />
<Compile Include="CommandsService\ManagedCommandBinding.cs" /> <Compile Include="CommandsService\ManagedCommandBinding.cs" />
<Compile Include="CommandsService\ManagedInputBinding.cs" /> <Compile Include="CommandsService\ManagedInputBinding.cs" />
<Compile Include="CommandsService\WpfCommandWrapper.cs" /> <Compile Include="CommandsService\WpfCommandWrapper.cs" />

278
src/SharpDevelop.sln

@ -6,167 +6,167 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "86CE7B3F-6273-4215-9E36-6184D98F854E"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{DB137F0B-9B62-4232-AE92-F7BE0280B8D3}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}"
EndProject EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6e59af58-f635-459a-9a35-c9ac41c00339}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}"
EndProject EndProject
Project("{982E8BC1-ACD7-4dbf-96AB-B2CE67D6A008}") = "FSharpBinding", "AddIns\BackendBindings\FSharp\FSharpBinding\Project\FSharpBinding.fsproj", "{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4}" Project("{982E8BC1-ACD7-4dbf-96AB-B2CE67D6A008}") = "FSharpBinding", "AddIns\BackendBindings\FSharp\FSharpBinding\Project\FSharpBinding.fsproj", "{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6e59af58-f635-459a-9a35-c9ac41c00339}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}" Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{DB137F0B-9B62-4232-AE92-F7BE0280B8D3}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "86CE7B3F-6273-4215-9E36-6184D98F854E"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
EndProject EndProject
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -420,74 +420,74 @@ Global
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{461606BD-E824-4D0A-8CBA-01810B1F5E02} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
86CE7B3F-6273-4215-9E36-6184D98F854E = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{3CA90546-3B4C-4663-9445-C4E9371750A7} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{8D732610-8FC6-43BA-94C9-7126FD7FE361} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{533F4684-DBA6-4518-B005-C84F22A2DD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DB137F0B-9B62-4232-AE92-F7BE0280B8D3} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0162E499-42D0-409B-AA25-EED21F75336B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} {0162E499-42D0-409B-AA25-EED21F75336B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} {6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{DB137F0B-9B62-4232-AE92-F7BE0280B8D3} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{533F4684-DBA6-4518-B005-C84F22A2DD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}
{08F772A1-F0BE-433E-8B37-F6522953DB05} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} {08F772A1-F0BE-433E-8B37-F6522953DB05} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3}
{E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3}
{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{8D732610-8FC6-43BA-94C9-7126FD7FE361} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}
{3CA90546-3B4C-4663-9445-C4E9371750A7} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
86CE7B3F-6273-4215-9E36-6184D98F854E = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{461606BD-E824-4D0A-8CBA-01810B1F5E02} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

Loading…
Cancel
Save