Browse Source

GesturesPlaceHolderRegistry and CommandsRegistry fixes

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4154 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts^2
Sergej Andrejev 16 years ago
parent
commit
12a9dd40f4
  1. 155
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 2
      src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.addin
  3. 2
      src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.addin
  4. 18
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs
  5. 33
      src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin
  6. 15
      src/Main/Base/Project/Src/Commands/AutostartCommands.cs
  7. 16
      src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs
  8. 8
      src/Main/Base/Project/Src/Commands/ToolsCommands.cs
  9. 4
      src/Main/Core/Project/ICSharpCode.Core.csproj
  10. 7
      src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs
  11. 25
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDescriptor.cs
  12. 15
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDoozer.cs
  13. 26
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/GesturesPlaceHolderDescriptor.cs
  14. 43
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/GesturesPlaceHolderDoozer.cs
  15. 18
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/InputBindingDescriptor.cs
  16. 4
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
  17. 1
      src/Main/Core/Project/Src/AddInTree/AddInTree.cs
  18. 174
      src/Main/Core/Project/Src/Services/CommandsService/BaseGesturesPlaceHolderRegistry.cs
  19. 210
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs
  20. 19
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsRegistry.cs
  21. 13
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsService.cs
  22. 82
      src/Main/ICSharpCode.Core.Presentation/CommandsService/GesturePlaceHolderRegistry.cs
  23. 32
      src/Main/ICSharpCode.Core.Presentation/CommandsService/InputGestureCollectionConverter.cs
  24. 1
      src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj
  25. 18
      src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs
  26. 7
      src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs
  27. 82
      src/Main/ICSharpCode.Core.WinForms/CommandsService/GesturePlaceHolderRegistry.cs
  28. 114
      src/Main/ICSharpCode.Core.WinForms/CommandsService/KeysCollectionConverter.cs
  29. 3
      src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj
  30. 28
      src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs
  31. 280
      src/SharpDevelop.sln

155
AddIns/ICSharpCode.SharpDevelop.addin

@ -52,9 +52,9 @@ @@ -52,9 +52,9 @@
</Runtime>
<!-- Commands registry test -->
<!-- Commands registry test
<Path name="/SharpDevelop/Workbench/RoutedUICommands">
<RoutedUICommand name="SharpDevelop.CreateNewFile" text="Create new file" />
<RoutedUICommand name="SDTestCommands.Test" text="Create new file" />
<RoutedUICommand name="SDBuildCommands.BuildSolution" text="${res:XML.MainMenu.BuildMenu.BuildSolution}" />
<RoutedUICommand name="SDBuildCommands.RebuildSolution" text="${res:XML.MainMenu.BuildMenu.RebuildSolution}" />
@ -72,6 +72,11 @@ @@ -72,6 +72,11 @@
<RoutedUICommand name="SDProjectCommands.AddExistingItemToSolution" text="${res:ProjectComponent.ContextMenu.AddItem}" />
<RoutedUICommand name="SDProjectCommands.AddNewSolutionFolderToSolution" text="${res:ProjectComponent.ContextMenu.NewSolutionFolder}" />
<RoutedUICommand name="SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" text="${res:MainWindow.Windows.PropertiesScoutLabel}" />
<RoutedUICommand name="SDProjectCommands.ShowHiddenFilesInProjectBrowser" text="${res:Gui.ProjectBrowser.ShowAllFiles}" />
<RoutedUICommand name="SDProjectCommands.RefreshProjectBrowser" text="${res:AddIns.HtmlHelp2.Refresh}" />
<RoutedUICommand name="SDDebugCommands.Execute" text="${res:XML.MainMenu.RunMenu.Run}" />
<RoutedUICommand name="SDDebugCommands.ExecuteWithoutDebugger" text="${res:XML.MainMenu.DebugMenu.RunWithoutDebug}" />
<RoutedUICommand name="SDDebugCommands.StopDebugging" text="${res:XML.MainMenu.DebugMenu.Stop}" />
@ -83,16 +88,25 @@ @@ -83,16 +88,25 @@
<RoutedUICommand name="SDDebugCommands.StepInto" text="${res:XML.MainMenu.DebugMenu.StepInto}" />
<RoutedUICommand name="SDDebugCommands.StepOut" text="${res:XML.MainMenu.DebugMenu.StepOut}" />
<RoutedUICommand name="SDDebugCommands.ToggleBreakpoint" text="${res:XML.MainMenu.DebugMenu.ToggleBreakpoint}" />
<RoutedUICommand name="SDSearchCommands.ToggleBookmark" text="${res:XML.MainMenu.SearchMenu.ToggleBookmark}" />
<RoutedUICommand name="SDSearchCommands.PrevBookmark" text="${res:XML.MainMenu.SearchMenu.PrevBookmark}" />
<RoutedUICommand name="SDSearchCommands.NextBookmark" text="${res:XML.MainMenu.SearchMenu.NextBookmark}" />
<RoutedUICommand name="SDSearchCommands.ClearBookmarks" text="${res:XML.MainMenu.SearchMenu.ClearBookmarks}" />
<RoutedUICommand name="SDSearchCommands.GotoLineNumber" text="${res:XML.MainMenu.SearchMenu.GotoLineNr}" />
<RoutedUICommand name="SDSearchCommands.GotoBrace" text="${res:XML.MainMenu.SearchMenu.GotoBrace}" />
</Path>
-->
<Path name="/SharpDevelop/Workbench/CommandBindings">
<CommandBinding command="SharpDevelop.CreateNewFile" class="ICSharpCode.SharpDevelop.Commands.TestCommand" />
<CommandBinding command="SDTestCommands.Test" class="ICSharpCode.SharpDevelop.Commands.TestCommand" gestures="Ctrl+M" />
<CommandBinding command="SDBuildCommands.BuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Build" />
<CommandBinding command="SDBuildCommands.RebuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Rebuild" />
<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" />
<CommandBinding command="SDBuildCommands.RebuildProject" class="ICSharpCode.SharpDevelop.Project.Commands.RebuildProject" />
<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" />
@ -101,39 +115,32 @@ @@ -101,39 +115,32 @@
<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" />
<CommandBinding command="SDDebugCommands.ExecuteWithoutDebugger" class="ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger" />
<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" />
<CommandBinding command="SDDebugCommands.ContinueDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand" />
<CommandBinding command="SDDebugCommands.StepOver" class="ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand" />
<CommandBinding command="SDDebugCommands.StepInto" class="ICSharpCode.SharpDevelop.Project.Commands.StepIntoDebuggingCommand" />
<CommandBinding command="SDDebugCommands.StepOut" class="ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand" />
<CommandBinding command="SDDebugCommands.ToggleBreakpoint" class="ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand" />
<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" />
</Path>
<Path name="/SharpDevelop/Workbench/InputBindings">
<InputBinding command="SharpDevelop.CreateNewFile" gesture="Ctrl+M" />
<InputBinding command="SDBuildCommands.BuildSolution" gesture="F8" />
<InputBinding command="SDBuildCommands.RebuildSolution" gesture="Alt+F8" />
<InputBinding command="SDBuildCommands.BuildProject" gesture="F9" />
<InputBinding command="SDBuildCommands.RebuildProject" gesture="Alt+F9" />
<InputBinding command="SDDebugCommands.Execute" gesture="F5" />
<InputBinding command="SDDebugCommands.ExecuteWithoutDebugger" gesture="Control+F5" />
<InputBinding command="SDDebugCommands.BreakDebugging" gesture="Control+Alt+B" />
<InputBinding command="SDDebugCommands.ContinueDebugging" gesture="Control+Alt+B" />
<InputBinding command="SDDebugCommands.StepOver" gesture="F10" />
<InputBinding command="SDDebugCommands.StepInto" gesture="F11" />
<InputBinding command="SDDebugCommands.StepOut" gesture="Shift+F11" />
<InputBinding command="SDDebugCommands.ToggleBreakpoint" gesture="F7" />
</Path>
<!-- Commands registry test -->
<Path name = "/SharpDevelop/Workbench/Ambiences">
<Class id = ".NET"
@ -265,17 +272,20 @@ @@ -265,17 +272,20 @@
<ToolbarItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
tooltip = "${res:MainWindow.Windows.PropertiesScoutLabel}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
<ToolbarItem id = "PropertySeparator" type = "Separator"/>
<ToolbarItem id = "ShowAll"
type = "CheckBox"
icon = "ProjectBrowser.Toolbar.ShowHiddenFiles"
tooltip = "${res:Gui.ProjectBrowser.ShowAllFiles}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ToggleShowAll"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ToggleShowAll"
command = "SDProjectCommands.ShowHiddenFilesInProjectBrowser" />
<ToolbarItem id = "Refresh"
icon = "ProjectBrowser.Toolbar.Refresh"
tooltip = "${res:AddIns.HtmlHelp2.Refresh}"
class = "ICSharpCode.SharpDevelop.Project.Commands.RefreshProjectBrowser"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.RefreshProjectBrowser"
command = "SDProjectCommands.RefreshProjectBrowser" />
</Condition>
</Path>
@ -292,16 +302,16 @@ @@ -292,16 +302,16 @@
shortcut = "F8"
icon = "Icons.16x16.BuildCombine"
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"
command = "BuildCommands.Build" />
command = "SDBuildCommands.Build" />
<MenuItem id = "Rebuild"
label = "${res:XML.MainMenu.BuildMenu.RebuildSolution}"
shortcut = "Alt|F8"
shortcut = "Alt+F8"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"
command = "BuildCommands.Rebuild" />
command = "SDBuildCommands.Rebuild" />
<MenuItem id = "Clean"
label = "${res:XML.MainMenu.BuildMenu.CleanSolution}"
class = "ICSharpCode.SharpDevelop.Project.Commands.Clean"
command = "BuildCommands.Clean" />
command = "SDBuildCommands.Clean" />
<MenuItem id = "CombineBuildGroupSeparator" type = "Separator"/>
@ -344,7 +354,8 @@ @@ -344,7 +354,8 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
</Path>
<Path path = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/SolutionFolderNode">
@ -411,7 +422,8 @@ @@ -411,7 +422,8 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
</Path>
<Path name="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/MissingProjectNode">
@ -532,7 +544,8 @@ @@ -532,7 +544,8 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
</ComplexCondition>
</Path>
@ -735,7 +748,8 @@ @@ -735,7 +748,8 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
</ComplexCondition>
</Path>
@ -914,40 +928,40 @@ @@ -914,40 +928,40 @@
<ToolbarItem id = "Cut"
icon = "Icons.16x16.CutIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Cut.Description}"
command = "Cut"/>
command = "ApplicationCommands.Cut"/>
<ToolbarItem id = "Copy"
icon = "Icons.16x16.CopyIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Copy.Description}"
command = "Copy"/>
command = "ApplicationCommands.Copy"/>
<ToolbarItem id = "Paste"
icon = "Icons.16x16.PasteIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Paste.Description}"
command = "Paste"/>
command = "ApplicationCommands.Paste"/>
<ToolbarItem id = "Delete"
icon = "Icons.16x16.DeleteIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Delete.Description}"
command = "Delete"/>
command = "ApplicationCommands.Delete"/>
<ToolbarItem id = "UndoRedoSeparator" type = "Separator"/>
<ToolbarItem id = "Undo"
icon = "Icons.16x16.UndoIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Undo.Description}"
command = "Undo"/>
command = "ApplicationCommands.Undo"/>
<ToolbarItem id = "Redo"
icon = "Icons.16x16.RedoIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Redo.Description}"
command = "Redo"/>
command = "ApplicationCommands.Redo"/>
<ToolbarItem id = "CompileSeparator" type = "Separator"/>
<ToolbarItem id = "Compile"
icon = "Icons.16x16.BuildCombine"
tooltip = "${res:XML.MainMenu.RunMenu.Compile.Description}"
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.Build" />
<ToolbarItem id = "BuildProject"
icon = "Icons.16x16.BuildCurrentSelectedProject"
tooltip = "${res:XML.MainMenu.RunMenu.BuildProject.Description}"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild" />
<ToolbarItem id = "DebuggerSeparator" type = "Separator" />
@ -964,14 +978,16 @@ @@ -964,14 +978,16 @@
<ToolbarItem id = "Run"
icon = "Icons.16x16.RunProgramIcon"
tooltip = "${res:XML.MainMenu.RunMenu.Run.Description}"
class = "ICSharpCode.SharpDevelop.Project.Commands.Execute" />
class = "ICSharpCode.SharpDevelop.Project.Commands.Execute"
/>
</Condition>
<Condition name="DebuggerSupports" debuggersupports = "StartWithoutDebugging">
<ToolbarItem id = "RunWithoutDebugger"
icon = "Icons.16x16.Debug.StartWithoutDebugging"
tooltip = "${res:XML.MainMenu.DebugMenu.RunWithoutDebug.Description}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger"/>
class = "ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger"
/>
</Condition>
</Condition>
</Condition>
@ -1488,7 +1504,7 @@ @@ -1488,7 +1504,7 @@
/>
<MenuItem id = "Rebuild"
label = "${res:XML.MainMenu.BuildMenu.RebuildSolution}"
shortcut = "Alt|F8"
shortcut = "Alt+F8"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"
command = "SDBuildCommands.RebuildSolution" />
<MenuItem id = "Clean"
@ -1505,7 +1521,7 @@ @@ -1505,7 +1521,7 @@
command = "SDBuildCommands.BuildProject" />
<MenuItem id = "Rebuild project"
label = "${res:XML.MainMenu.BuildMenu.RebuildProject}"
shortcut = "Alt|F9"
shortcut = "Alt+F9"
class = "ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"
command = "SDBuildCommands.RebuildProject" />
<MenuItem id = "Clean project"
@ -1689,7 +1705,7 @@ @@ -1689,7 +1705,7 @@
<Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider" action="Disable">
<MenuItem id = "GenerateCodeAction"
label = "${res:XML.MainMenu.ToolMenu.GenerateCode}"
shortcut = "Alt|Insert"
shortcut = "Alt+Insert"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.GenerateCodeAction"/>
<MenuItem id = "ShowQuickHelp"
label = "${res:XML.MainMenu.ToolMenu.QuickXmlDoc}"
@ -1934,42 +1950,49 @@ @@ -1934,42 +1950,49 @@
<MenuItem id = "SearchIncremental"
label = "${res:XML.MainMenu.SearchMenu.IncrementalSearch}"
shortcut = "Ctrl+E"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.RunIncrementalSearch"/>
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.RunIncrementalSearch"
/>
<MenuItem id = "SearchReverseIncremental"
label = "${res:XML.MainMenu.SearchMenu.ReverseIncrementalSearch}"
shortcut = "Ctrl+Shift+E"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.RunReverseIncrementalSearch"/>
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.RunReverseIncrementalSearch" />
<MenuItem id = "SearchInFilesSeparator" type = "Separator" />
<!-- <Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider" action="Disable"> -->
<MenuItem id = "ToggleBookmark"
label = "${res:XML.MainMenu.SearchMenu.ToggleBookmark}"
shortcut = "Ctrl+F2"
icon = "Bookmarks.ToggleMark"
class = "ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark"
command="SDSearchCommands.ToggleBookmark" />
<MenuItem id = "PrevBookmark"
label = "${res:XML.MainMenu.SearchMenu.PrevBookmark}"
shortcut = "Alt|F2"
shortcut = "Alt+F2"
icon = "Bookmarks.GotoPrevInFile"
class = "ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark"
command="SDSearchCommands.PrevBookmark" />
<MenuItem id = "NextBookmark"
label = "${res:XML.MainMenu.SearchMenu.NextBookmark}"
shortcut = "F2"
icon = "Bookmarks.GotoNextInFile"
class = "ICSharpCode.SharpDevelop.Bookmarks.NextBookmark"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.NextBookmark"
command="SDSearchCommands.NextBookmark" />
<MenuItem id = "ClearBookmarks"
label = "${res:XML.MainMenu.SearchMenu.ClrBookmark}"
icon = "Bookmarks.ClearAll"
class = "ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks"
command="SDSearchCommands.ClearBookmarks" />
<MenuItem id = "Separator2" type = "Separator" />
<MenuItem id = "GotoLineNr"
label = "${res:XML.MainMenu.SearchMenu.GotoLineNr}"
shortcut = "Ctrl+G"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoLineNumber"/>
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoLineNumber"
command="SDSearchCommands.GotoLineNumber" />
<MenuItem id = "Separator3" type = "Separator" />
<MenuItem id = "GotoBrace"
label = "${res:XML.MainMenu.SearchMenu.GotoBrace}"
shortcut = "Ctrl+B"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoMatchingBrace"/>
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoMatchingBrace"
command="SDSearchCommands.GotoBrace" />
<!-- </Condition> -->
</MenuItem>
</Path>

2
src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.addin

@ -109,7 +109,7 @@ @@ -109,7 +109,7 @@
<Condition name = "ProjectActive" activeproject="F#">
<MenuItem id = "SendToFSharpInteractive"
label = "Send To F# Interactive"
shortcut = "Alt|Return"
shortcut = "Alt+Return"
class= "FSharpBinding.SentToFSharpInteractive"/>
</Condition>
</Path>

2
src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.addin

@ -84,7 +84,7 @@ @@ -84,7 +84,7 @@
<MenuItem id = "IndexResultsPadCommand"
label = "${res:AddIns.HtmlHelp2.IndexResults}"
icon = "HtmlHelp2.16x16.IndexResults"
shortcut = "Shift|Alt|F2"
shortcut = "Shift+Alt+F2"
class = "HtmlHelp2.ShowIndexResultsMenuCommand"
insertafter = "SearchPadCommand"
insertbefore = "Separator1"/>

18
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs

@ -87,8 +87,16 @@ namespace SearchAndReplace @@ -87,8 +87,16 @@ namespace SearchAndReplace
SetSearchAndReplaceMode();
FormLocationHelper.Apply(this, "ICSharpCode.SharpDevelop.Gui.SearchAndReplaceDialog.Location", false);
searchKeyboardShortcut = GetKeyboardShortcut(SearchMenuAddInPath, "Find");
replaceKeyboardShortcut = GetKeyboardShortcut(SearchMenuAddInPath, "Replace");
// Register shortcuts in "search & replace" dialog
GesturePlaceHolderRegistry.RegisterUpdateHandler("SDSearchAndReplace.Find", delegate {
searchKeyboardShortcut = GesturePlaceHolderRegistry.GetGestures("SDSearchAndReplace.Find")[0];
});
GesturePlaceHolderRegistry.RegisterUpdateHandler("SDSearchAndReplace.Replace", delegate {
replaceKeyboardShortcut = GesturePlaceHolderRegistry.GetGestures("SDSearchAndReplace.Find")[0];
});
GesturePlaceHolderRegistry.InvokeUpdateHandlers("SDSearchAndReplace.Find");
GesturePlaceHolderRegistry.InvokeUpdateHandlers("SDSearchAndReplace.FindReplace");
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
@ -144,17 +152,17 @@ namespace SearchAndReplace @@ -144,17 +152,17 @@ namespace SearchAndReplace
/// Gets the keyboard shortcut for the menu item with the given addin tree
/// path and given codon id.
/// </summary>
Keys GetKeyboardShortcut(string path, string id)
Keys[] GetKeyboardShortcut(string path, string id)
{
AddInTreeNode node = AddInTree.GetTreeNode(path);
if (node != null) {
foreach (Codon codon in node.Codons) {
if (codon.Id == id) {
return MenuCommand.ParseShortcut(codon.Properties["shortcut"]);
return (Keys[])new KeysCollectionConverter().ConvertFromInvariantString(codon.Properties["shortcut"]);
}
}
}
return Keys.None;
return new Keys[] { Keys.None };
}
}
}

33
src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin

@ -11,8 +11,6 @@ @@ -11,8 +11,6 @@
<Import assembly = "SearchAndReplace.dll"/>
</Runtime>
<!-- Commands registry test -->
<Path name="/SharpDevelop/Workbench/RoutedUICommands">
<RoutedUICommand name="SDSearchAndReplace.Find" text="${res:XML.MainMenu.SearchMenu.Find}" />
@ -22,44 +20,47 @@ @@ -22,44 +20,47 @@
</Path>
<Path name="/SharpDevelop/Workbench/CommandBindings">
<CommandBinding command="SDSearchAndReplace.Find" class="SearchAndReplace.Find" />
<CommandBinding command="SDSearchAndReplace.FindNext" class="SearchAndReplace.FindNext" />
<CommandBinding command="SDSearchAndReplace.FindNextSelected" class="SearchAndReplace.FindNextSelected" />
<CommandBinding command="SDSearchAndReplace.Replace" class="SearchAndReplace.Replace" />
<CommandBinding command="SDSearchAndReplace.Find" class="SearchAndReplace.Find" lazy="true" gestures="Ctrl+F" />
<CommandBinding command="SDSearchAndReplace.FindNext" class="SearchAndReplace.FindNext" lazy="true" gestures="F3" />
<CommandBinding command="SDSearchAndReplace.FindNextSelected" class="SearchAndReplace.FindNextSelected" lazy="true" gestures="Ctrl+F3" />
<CommandBinding command="SDSearchAndReplace.Replace" class="SearchAndReplace.Replace" lazy="true" gestures="Ctrl+R" />
</Path>
<!-- Commands registry test -->
<Path name="/SharpDevelop/Workbench/InputBindings">
<InputBinding command="SDSearchAndReplace.Find" gesture="Ctrl+F" />
<InputBinding command="SDSearchAndReplace.FindNext" gesture="F3" />
<InputBinding command="SDSearchAndReplace.FindNextSelected" gesture="Ctrl+F3" />
<InputBinding command="SDSearchAndReplace.Replace" gesture="Ctrl+R" />
<Path name="/SharpDevelop/Workbench/GesturePlaceHolder">
<GesturesPlaceHolder name="SDSearchAndReplace.Find" text="Find next" gestures="Ctrl+F" />
<GesturesPlaceHolder name="SDSearchAndReplace.Replace" text="Find next" gestures="F3" />
</Path>
<!-- Commands registry test -->
<Path name = "/SharpDevelop/Workbench/MainMenu/Search">
<MenuItem id = "Find"
label = "${res:XML.MainMenu.SearchMenu.Find}"
icon = "Icons.16x16.FindIcon"
shortcut = "Ctrl+F"
class = "SearchAndReplace.Find" />
class = "SearchAndReplace.Find"
command="SDSearchAndReplace.Find" />
<MenuItem id = "FindNext"
insertafter = "Find"
label = "${res:XML.MainMenu.SearchMenu.FindNext}"
icon = "Icons.16x16.FindNextIcon"
shortcut = "F3"
class = "SearchAndReplace.FindNext" />
class = "SearchAndReplace.FindNext"
command="SDSearchAndReplace.FindNext" />
<MenuItem id = "FindNextSelected"
insertafter = "FindNext"
label = "${res:XML.MainMenu.SearchMenu.FindNextSelected}"
shortcut = "Ctrl+F3"
class = "SearchAndReplace.FindNextSelected" />
class = "SearchAndReplace.FindNextSelected"
command="SDSearchAndReplace.FindNextSelected" />
<MenuItem id = "Replace"
insertbefore = "SearchIncremental"
insertafter = "FindNextSelected"
label = "${res:XML.MainMenu.SearchMenu.Replace}"
icon = "Icons.16x16.ReplaceIcon"
shortcut = "Ctrl+R"
class = "SearchAndReplace.Replace" />
class = "SearchAndReplace.Replace"
command="SDSearchAndReplace.Replace" />
</Path>
<Path name = "/SharpDevelop/DefaultEditor/SearchAndReplace/WildcardHelpPath">

15
src/Main/Base/Project/Src/Commands/AutostartCommands.cs

@ -125,14 +125,25 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -125,14 +125,25 @@ namespace ICSharpCode.SharpDevelop.Commands
//WorkbenchSingleton.MainForm.Focus(); // windows.forms focus workaround
ParserService.StartParserThread();
// Register gesture place holders
var placeHolderDescriptors = AddInTree.BuildItems<GesturesPlaceHolderDescriptor>("/SharpDevelop/Workbench/GesturePlaceHolder", this, false);
foreach(var desc in placeHolderDescriptors) {
BaseGesturesPlaceHolderRegistry.RegisterPlaceHolder(desc.Name, desc.Text);
if(!string.IsNullOrEmpty(desc.Gestures)) {
BaseGesturesPlaceHolderRegistry.AddGestures(desc.Name, desc.Gestures.Split(new []{'|'}));
}
}
// finally run the workbench window ...
//Application.AddMessageFilter(new FormKeyHandler());
//Application.Run(WorkbenchSingleton.MainForm);
App application = new App();
System.Windows.Forms.Integration.WindowsFormsHost.EnableWindowsFormsInterop();
application.Run(WorkbenchSingleton.MainWindow);
// save the workbench memento in the ide properties
try {
PropertyService.Set(workbenchMemento, WorkbenchSingleton.Workbench.CreateMemento());

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

@ -467,26 +467,34 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -467,26 +467,34 @@ namespace ICSharpCode.SharpDevelop.Commands
item.Icon = PresentationResourceService.GetPixelSnappedImage(padContent.Icon);
}
// Dynamicaly create routed UI command for loaded pad
var routedCommandName = "SDViewCommands.ShowView_" + padContent.Class;
var routedCommandText = "Show view " + ICSharpCode.Core.Presentation.MenuService.ConvertLabel(StringParser.Parse(padContent.Title));
var routedCommandText = "Show view " + MenuService.ConvertLabel(StringParser.Parse(padContent.Title));
CommandsRegistry.RegisterRoutedUICommand(routedCommandName, routedCommandText);
// Register command which will activate loaded tab
CommandsRegistry.LoadCommand(routedCommandName, new BringPadToFrontCommand(padContent));
// Register command binding in workbench
CommandsRegistry.RegisterCommandBinding(CommandsRegistry.DefaultContext, routedCommandName, routedCommandName, null, false);
CommandsRegistry.InvokeCommandBindingUpdateHandlers(CommandsRegistry.DefaultContext);
CommandsRegistry.LoadCommand(routedCommandName, new BringPadToFrontCommand(padContent));
item.Command = CommandsRegistry.GetRoutedUICommand(routedCommandName);
// If pad have shortcut specified add input binding
if (!string.IsNullOrEmpty(padContent.Shortcut)) {
var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(padContent.Shortcut);
foreach(InputGesture gesture in gestures) {
CommandsRegistry.RegisterInputBinding(CommandsRegistry.DefaultContext, routedCommandName, gesture);
}
CommandsRegistry.InvokeInputBindingUpdateHandlers(CommandsRegistry.DefaultContext);
item.InputGestureText = "M: " + padContent.Shortcut;
} else {
item.InputGestureText = "M: ";
}
CommandsRegistry.InvokeInputBindingUpdateHandlers(CommandsRegistry.DefaultContext);
// item.Command = new BringPadToFrontCommand(padContent);
// if (!string.IsNullOrEmpty(padContent.Shortcut)) {
// var kg = Core.Presentation.MenuService.ParseShortcut(padContent.Shortcut);

8
src/Main/Base/Project/Src/Commands/ToolsCommands.cs

@ -16,10 +16,16 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -16,10 +16,16 @@ namespace ICSharpCode.SharpDevelop.Commands
{
public class TestCommand : System.Windows.Input.ICommand
{
public event EventHandler CanExecuteChanged;
public event EventHandler CanExecuteChanged
{
add {}
remove {}
}
public void Execute(object parameter)
{
CommandsRegistry.GetRoutedUICommand("SDBuildCommands.BuildSolution").Execute(parameter, WorkbenchSingleton.MainWindow);
System.Windows.MessageBox.Show("test");
}

4
src/Main/Core/Project/ICSharpCode.Core.csproj

@ -62,6 +62,8 @@ @@ -62,6 +62,8 @@
<Compile Include="Src\AddInTree\AddIn\Condition.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\CommandBindingDescriptor.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\CommandBindingDoozer.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\GesturesPlaceHolderDescriptor.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\GesturesPlaceHolderDoozer.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\InputBindingDescriptor.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\InputBindingDoozer.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\RoutedUICommandDescriptor.cs" />
@ -92,6 +94,7 @@ @@ -92,6 +94,7 @@
<Compile Include="Src\AddInTree\TreePathNotFoundException.cs" />
<Compile Include="Src\CoreException.cs" />
<Compile Include="Src\Services\ApplicationStateInfoService.cs" />
<Compile Include="Src\Services\CommandsService\BaseGesturesPlaceHolderRegistry.cs" />
<Compile Include="Src\Services\FileUtility\FileNameEventHandler.cs" />
<Compile Include="Src\Services\FileUtility\FileUtility.cs" />
<Compile Include="Src\Services\FileUtility\FileUtility.Minimal.cs" />
@ -130,6 +133,7 @@ @@ -130,6 +133,7 @@
<ItemGroup>
<Folder Include="Src\AddInTree\AddIn\DefaultDoozers\Command" />
<Folder Include="Src\Services\LoggingService" />
<Folder Include="Src\Services\CommandsService" />
<Folder Include="Src\Services\ResourceService" />
<Content Include="..\..\..\..\data\schemas\AddIn.xsd">
<Link>Src\AddInTree\AddIn\AddIn.xsd</Link>

7
src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs

@ -54,6 +54,13 @@ namespace ICSharpCode.Core @@ -54,6 +54,13 @@ namespace ICSharpCode.Core
}
bool dependenciesLoaded;
/// <summary>
/// Specifies whether all add-in dependencies and referenced assemblies are loaded
/// </summary>
public bool DependenciesLoaded {
get { return dependenciesLoaded; }
}
void LoadDependencies()
{

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

@ -19,18 +19,14 @@ namespace ICSharpCode.Core @@ -19,18 +19,14 @@ namespace ICSharpCode.Core
/// binding is triggered
/// </summary>
public string Class {
get {
return Codon.Properties["class"];
}
get; private set;
}
/// <summary>
/// Full name of routed UI command which will trigger this binding
/// </summary>
public string Command {
get {
return Codon.Properties["command"];
}
get; private set;
}
/// <summary>
@ -39,9 +35,16 @@ namespace ICSharpCode.Core @@ -39,9 +35,16 @@ namespace ICSharpCode.Core
/// UI element in which this binding will be valid
/// </summary>
public string Context {
get {
return Codon.Properties["context"];
}
get; private set;
}
/// <summary>
/// Gestures.
///
/// Optional, if provided input bindings in the same context will be created
/// </summary>
public string Gestures {
get; private set;
}
/// <summary>
@ -63,6 +66,10 @@ namespace ICSharpCode.Core @@ -63,6 +66,10 @@ namespace ICSharpCode.Core
public CommandBindingDescriptor(Codon codon)
{
Codon = codon;
Class = Codon.Properties["class"];
Command = Codon.Properties["command"];
Context = Codon.Properties["context"];
Gestures = Codon.Properties["gestures"];
}
}
}

15
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDoozer.cs

@ -3,16 +3,27 @@ using System; @@ -3,16 +3,27 @@ using System;
namespace ICSharpCode.Core
{
/// <attribute name="command" use="required">
/// Name of routed UI command which triggers this binding
/// Name of routed UI command which triggers this binding.
///
/// Routed UI command details are specified in path '/SharpDevelop/Workbench/RoutedUICommands'
/// </attribute>
/// <attribute name="class" use="required">
/// Class implementing System.Window.Input.ICommand or
/// ICSharpCode.Core class. CanExecute and Executed methods
/// are used to handle raised event
/// </attribute>
/// <attribute name="context" use="optional">
/// Specified binding owner
///
/// If context is not specified binding is applied to default context
/// </attribute>
/// <attribute name="lazy" use="optional" enum="1;0;true;false">
/// Use lazy loading. If addin containing binded command is
/// not loaded yet load asseblies referenced in add-in
/// not loaded yet, load asseblies referenced in add-in and then
/// invoke command
/// </attribute>
/// <attribute name="gestures" use="optional">
/// Create input bindings in the same context which will trigger specified routed UI command
/// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/CommandBindings</usage>
/// <returns>

26
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/GesturesPlaceHolderDescriptor.cs

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
using System;
namespace ICSharpCode.Core
{
public class GesturesPlaceHolderDescriptor
{
public string Name {
get; private set;
}
public string Text {
get; private set;
}
public string Gestures {
get; private set;
}
public GesturesPlaceHolderDescriptor(Codon codon)
{
Name = codon.Properties["name"];
Text = codon.Properties["text"];
Gestures = codon.Properties["gestures"];
}
}
}

43
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/GesturesPlaceHolderDoozer.cs

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
using System;
namespace ICSharpCode.Core
{
/// <attribute name="name" use="required">
/// Place holder name. This name should be unique application wide
/// </attribute>
/// <attribute name="text" use="required">
/// Text displayed to use
/// </attribute>
/// <attribute name="lazy" use="optional" enum="1;0;true;false">
/// Use lazy loading. If addin containing binded command is
/// not loaded yet, load asseblies referenced in add-in and then
/// invoke command
/// </attribute>
/// <attribute name="gestures" use="optional">
/// Keys which will invoke command
/// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/CommandBindings</usage>
/// <returns>
/// GesturesPlaceHolder object
/// </returns>
/// <summary>
/// Creates descriptor containing information about command binding
/// </summary>
public class GesturesPlaceHolderDoozer : IDoozer
{
/// <see cref="IDoozer.HandleConditions" />
public bool HandleConditions {
get {
return false;
}
}
/// <see cref="IDoozer.BuildItem(object, Codon, System.Collections.ArrayList)">
/// Builds GesturesPlaceHolderDoozer
/// </see>
public object BuildItem(object caller, Codon codon, System.Collections.ArrayList subItems)
{
return new GesturesPlaceHolderDescriptor(codon);
}
}
}

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

@ -7,15 +7,11 @@ namespace ICSharpCode.Core @@ -7,15 +7,11 @@ namespace ICSharpCode.Core
/// </summary>
public class InputBindingDescriptor
{
private Codon codon;
/// <summary>
/// Full name of routed UI command which will be invoked when this binding is triggered
/// </summary>
public string Command {
get {
return codon.Properties["command"];
}
get; private set;
}
/// <summary>
@ -24,18 +20,14 @@ namespace ICSharpCode.Core @@ -24,18 +20,14 @@ namespace ICSharpCode.Core
/// UI element in which this binding will be valid
/// </summary>
public string Context {
get {
return codon.Properties["context"];
}
get; private set;
}
/// <summary>
/// Description of gesture which will trigger this bindin
/// </summary>
public string Gesture {
get {
return codon.Properties["gesture"];
}
get; private set;
}
/// <summary>
@ -44,7 +36,9 @@ namespace ICSharpCode.Core @@ -44,7 +36,9 @@ namespace ICSharpCode.Core
/// <param name="codon">Reference to codon used to create this descriptor</param>
public InputBindingDescriptor(Codon codon)
{
this.codon = codon;
Command = codon.Properties["command"];
Context = codon.Properties["context"];
Gesture = codon.Properties["gesture"];
}
}
}

4
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs

@ -67,10 +67,6 @@ namespace ICSharpCode.Core @@ -67,10 +67,6 @@ namespace ICSharpCode.Core
public object BuildItem(object caller, Codon codon, ArrayList subItems)
{
if(codon.Properties["command"] == "BuildCommands.Rebuild")
{
}
return new MenuItemDescriptor(caller, codon, subItems);
}
}

1
src/Main/Core/Project/Src/AddInTree/AddInTree.cs

@ -36,6 +36,7 @@ namespace ICSharpCode.Core @@ -36,6 +36,7 @@ namespace ICSharpCode.Core
doozers.Add("InputBinding", new InputBindingDoozer());
doozers.Add("CommandBinding", new CommandBindingDoozer());
doozers.Add("RoutedUICommand", new RoutedUICommandDoozer());
doozers.Add("GesturesPlaceHolder", new GesturesPlaceHolderDoozer());
conditionEvaluators.Add("Compare", new CompareConditionEvaluator());
conditionEvaluators.Add("Ownerstate", new OwnerStateConditionEvaluator());

174
src/Main/Core/Project/Src/Services/CommandsService/BaseGesturesPlaceHolderRegistry.cs

@ -0,0 +1,174 @@ @@ -0,0 +1,174 @@
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.Core
{
public delegate void GesturesPlaceHolderUpdate();
/// <summary>
/// Stores gestures place holders
///
/// Through this class one can register a handler which which would be
/// called when gestures associated with place holder name are updated
/// </summary>
public static class BaseGesturesPlaceHolderRegistry
{
private static Dictionary<string, GesturesPlaceHolderInfo> gesturePlaceHolders = new Dictionary<string, GesturesPlaceHolderInfo>();
private static Dictionary<string, string> commandTexts = new Dictionary<string, string>();
private static Dictionary<string, List<string>> registeredKeys = new Dictionary<string, List<string>>();
private static Dictionary<string, List<WeakReference>> commandKeysUpdateHandlers = new Dictionary<string, List<WeakReference>>();
/// <summary>
/// Register a place holder
/// </summary>
/// <param name="placeHolderName">Place holder name. Unique application wide</param>
/// <param name="placeHolderText">Place holder text visible to user</param>
public static void RegisterPlaceHolder(string placeHolderName, string placeHolderText) {
gesturePlaceHolders.Add(placeHolderName, new GesturesPlaceHolderInfo(placeHolderName, placeHolderText));
}
/// <summary>
/// Get gestures assigned to place holder
///
/// Use KeysCollectionConverter or InputGestureCollectionConverter
/// to convert returned value representation to required format
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <returns>Array of gestures</returns>
public static string[] GetGestures(string placeHolderName) {
if(!gesturePlaceHolders.ContainsKey(placeHolderName) || gesturePlaceHolders[placeHolderName].Gestures.Count == 0) {
return new string[] { };
}
return gesturePlaceHolders[placeHolderName].Gestures.ToArray();
}
/// <summary>
/// Add gestures to place holder
///
/// Use KeysCollectionConverter or InputGestureCollectionConverter
/// to convert gestures to string representation
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="gestures">Added gestures</param>
public static void AddGestures(string placeHolderName, IEnumerable<string> gestures) {
if(!gesturePlaceHolders.ContainsKey(placeHolderName)) {
throw new ApplicationException("No gestures place holder with name '" + placeHolderName + "' is registered");
}
foreach(string gesture in gestures) {
if(!gesturePlaceHolders[placeHolderName].Gestures.Contains(gesture)) {
gesturePlaceHolders[placeHolderName].Gestures.Add(gesture);
}
}
}
/// <summary>
/// Remove gestures from place holder
///
/// Use KeysCollectionConverter or InputGestureCollectionConverter
/// to convert gestures to string representation
///
/// Null argumens are igonred and all gestures which specify
/// provided parameters are removed
/// </summary>
/// <param name="placeHolderName"></param>
/// <param name="gestures"></param>
public static void RemoveGestures(string placeHolderName, IEnumerable<string> gestures) {
if(gesturePlaceHolders.ContainsKey(placeHolderName)) {
if(gestures == null) {
gesturePlaceHolders[placeHolderName].Gestures.Clear();
} else {
for(int i = gesturePlaceHolders[placeHolderName].Gestures.Count - 1; i >= 0; i--) {
foreach(string gesture in gestures) {
if(gesturePlaceHolders[placeHolderName].Gestures[i] == gesture) {
gesturePlaceHolders[placeHolderName].Gestures.RemoveAt(i);
}
}
}
}
}
}
/// <summary>
/// Register update handler which will trigger when gestures in
/// place holder are updated
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="handler">Handler which handles place holder gestures update</param>
public static void RegisterUpdateHandler(string placeHolderName, GesturesPlaceHolderUpdate handler) {
if(!commandKeysUpdateHandlers.ContainsKey(placeHolderName)) {
commandKeysUpdateHandlers.Add(placeHolderName, new List<WeakReference>());
}
commandKeysUpdateHandlers[placeHolderName].Add(new WeakReference(handler));
}
/// <summary>
/// Invoke delegates which handle gestures update in place holder
///
/// If place holder is not provided all registered handlers are invoked
/// </summary>
/// <param name="placeHolderName"></param>
public static void InvokeUpdateHandlers(string placeHolderName) {
if(placeHolderName == null) {
foreach(var handlers in commandKeysUpdateHandlers) {
foreach(var handler in handlers.Value) {
if(handler != null && handler.Target != null) {
((GesturesPlaceHolderUpdate)handler.Target).Invoke();
}
}
}
} else {
if(commandKeysUpdateHandlers.ContainsKey(placeHolderName)) {
foreach(var handler in commandKeysUpdateHandlers[placeHolderName]) {
if(handler != null && handler.Target != null) {
((GesturesPlaceHolderUpdate)handler.Target).Invoke();
}
}
}
}
}
/// <summary>
/// Intername representation of place holders
/// </summary>
class GesturesPlaceHolderInfo
{
/// <summary>
/// Place hollder name
/// </summary>
public string Name {
get; private set;
}
/// <summary>
/// Place holder text visible to user
/// </summary>
public string Text {
get; private set;
}
/// <summary>
/// Collection of gestures assigned to this place holder
/// </summary>
public List<string> Gestures {
get; private set;
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="name">Place holder name</param>
/// <param name="text">Place holder text visible to user</param>
public GesturesPlaceHolderInfo(string name, string text) {
Name = name;
Text = text;
Gestures = new List<string>();
}
}
}
}

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

@ -4,115 +4,119 @@ using System.Windows.Input; @@ -4,115 +4,119 @@ using System.Windows.Input;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Stores details about command binding
/// </summary>
public class CommandBindingInfo
{
/// <summary>
/// Stores details about command binding
/// Constructor
/// </summary>
public class CommandBindingInfo
{
/// <summary>
/// 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;
}
/// <summary>
/// Routed command name
///
/// Described binding is triggered by this routed command
/// </summary>
/// <seealso cref="RoutedCommand"></seealso>
public string RoutedCommandName {
get; private set;
}
/// <summary>
/// Routed command instance
///
/// Described binding is triggered by this routed command
/// </summary>
/// <seealso cref="RoutedCommandName"></seealso>
public RoutedUICommand RoutedCommand {
get {
return CommandsRegistry.GetRoutedUICommand(RoutedCommandName);
}
}
/// <summary>
/// Add-in to which binded command belongs
/// </summary>
public AddIn AddIn {
get; private set;
}
/// <summary>
/// Binded command full name
///
/// This command is invoke when this binding is triggered
/// </summary>
/// <seealso cref="Class"></seealso>
public string ClassName {
get; private set;
/// <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;
}
/// <summary>
/// Routed command name
///
/// Described binding is triggered by this routed command
/// </summary>
/// <seealso cref="RoutedCommand"></seealso>
public string RoutedCommandName {
get; private set;
}
/// <summary>
/// Routed command instance
///
/// Described binding is triggered by this routed command
/// </summary>
/// <seealso cref="RoutedCommandName"></seealso>
public RoutedUICommand RoutedCommand {
get {
return CommandsRegistry.GetRoutedUICommand(RoutedCommandName);
}
/// <summary>
/// Binded command instance
///
/// This command is invoke when this binding is triggered. If this value is equal
/// to null then add-in is not loaded yet, see <see cref="IsLazy">IsLazy</see> attribute
/// for details
/// </summary>
/// <seealso cref="ClassName"></seealso>
public System.Windows.Input.ICommand Class {
get {
System.Windows.Input.ICommand command;
CommandsRegistry.commands.TryGetValue(ClassName, out command);
return command;
}
/// <summary>
/// Add-in to which binded command belongs
/// </summary>
public AddIn AddIn {
get; private set;
}
/// <summary>
/// Binded command full name
///
/// This command is invoke when this binding is triggered
/// </summary>
/// <seealso cref="Class"></seealso>
public string ClassName {
get; private set;
}
/// <summary>
/// Binded command instance
///
/// This command is invoke when this binding is triggered. If this value is equal
/// to null then add-in is not loaded yet, see <see cref="IsLazy">IsLazy</see> attribute
/// for details
/// </summary>
/// <seealso cref="ClassName"></seealso>
public System.Windows.Input.ICommand Class {
get {
if(AddIn != null && (AddIn.DependenciesLoaded || IsLazy)) {
CommandsRegistry.LoadAddinCommands(AddIn);
}
System.Windows.Input.ICommand command;
CommandsRegistry.commands.TryGetValue(ClassName, out command);
return command;
}
/// <summary>
/// Context class full name
///
/// Described binding will be valid in this context
/// </summary>
public string ContextName{
get; private set;
}
/// <summary>
/// Context class instance
///
/// Described binding will be valid in this context
/// </summary>
public UIElement Context {
get {
UIElement context;
CommandsRegistry.contexts.TryGetValue(ContextName, out context);
}
/// <summary>
/// Context class full name
///
/// Described binding will be valid in this context
/// </summary>
public string ContextName{
get; private set;
}
return context;
}
}
/// <summary>
/// Lazy load
///
/// If lazy load is enabled then all add-in references are loaded when this
/// command is invoked. Otherwice if add-in is not loaded and IsLazy is set
/// to false then this binding can't be triggered until add-in is loaded.
/// </summary>
public bool IsLazy{
get; private set;
/// <summary>
/// Context class instance
///
/// Described binding will be valid in this context
/// </summary>
public UIElement Context {
get {
UIElement context;
CommandsRegistry.contexts.TryGetValue(ContextName, out context);
return context;
}
}
/// <summary>
/// Lazy load
///
/// If lazy load is enabled then all add-in references are loaded when this
/// command is invoked. Otherwice if add-in is not loaded and IsLazy is set
/// to false then this binding can't be triggered until add-in is loaded.
/// </summary>
public bool IsLazy{
get; private set;
}
}
}

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

@ -41,9 +41,9 @@ namespace ICSharpCode.Core.Presentation @@ -41,9 +41,9 @@ namespace ICSharpCode.Core.Presentation
public static RoutedUICommand GetRoutedUICommand(string routedCommandName) {
if(routedCommands.ContainsKey(routedCommandName)) {
return routedCommands[routedCommandName];
} else {
throw new IndexOutOfRangeException("Routed UI command with name " + routedCommandName + " was not found");
}
return null;
}
/// <summary>
@ -277,7 +277,15 @@ namespace ICSharpCode.Core.Presentation @@ -277,7 +277,15 @@ namespace ICSharpCode.Core.Presentation
foreach(var binding in commandBindings) {
if(binding.AddIn != addIn) continue;
LoadCommand(binding.ClassName, addIn.CreateObject(binding.ClassName));
if(!commands.ContainsKey(binding.ClassName)){
var command = addIn.CreateObject(binding.ClassName);
var wpfCommand = command as System.Windows.Input.ICommand;
if(wpfCommand == null) {
wpfCommand = new WpfCommandWrapper((ICSharpCode.Core.ICommand)command);
}
commands.Add(binding.ClassName, wpfCommand);
}
}
}
@ -292,9 +300,12 @@ namespace ICSharpCode.Core.Presentation @@ -292,9 +300,12 @@ namespace ICSharpCode.Core.Presentation
wpfCommand = new WpfCommandWrapper((ICSharpCode.Core.ICommand)command);
}
commands.Add(commandName, wpfCommand);
if(!commands.ContainsKey(commandName)) {
commands.Add(commandName, wpfCommand);
}
}
/// <summary>
/// Load context
/// </summary>

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

@ -41,7 +41,20 @@ namespace ICSharpCode.Core.Presentation @@ -41,7 +41,20 @@ namespace ICSharpCode.Core.Presentation
foreach(var desc in descriptors) {
var contextName = !string.IsNullOrEmpty(desc.Context) ? desc.Context : CommandsRegistry.DefaultContext;
// If routed with such name is not registered register routed command with text same as name
if(CommandsRegistry.GetRoutedUICommand(desc.Command) == null) {
CommandsRegistry.RegisterRoutedUICommand(desc.Command, desc.Command);
}
CommandsRegistry.RegisterCommandBinding(contextName, desc.Command, desc.Class, desc.Codon.AddIn, desc.Lazy);
// If gestures are provided register input binding in the same context
if(!string.IsNullOrEmpty(desc.Gestures)) {
var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFromString(desc.Gestures);
foreach(InputGesture gesture in gestures) {
CommandsRegistry.RegisterInputBinding(contextName, desc.Command, gesture);
}
}
}
}

82
src/Main/ICSharpCode.Core.Presentation/CommandsService/GesturePlaceHolderRegistry.cs

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
using System;
using System.Windows.Input;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Stores gestures place holders
///
/// Through this class one can register a handler which which would be
/// called when gestures associated with place holder name are updated
/// </summary>
public static class GesturePlaceHolderRegistry
{
/// <summary>
/// Register a place holder
/// </summary>
/// <param name="placeHolderName">Place holder name. Unique application wide</param>
/// <param name="placeHolderText">Place holder text visible to user</param>
public static void RegisterPlaceHolder(string placeHolderName, string placeHolderText) {
BaseGesturesPlaceHolderRegistry.RegisterPlaceHolder(placeHolderName, placeHolderText);
}
/// <summary>
/// Get gestures assigned to place holder
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <returns>Collection of gestures</returns>
public static InputGestureCollection GetGestures(string placeHolderName) {
var serializesGesturesColection = BaseGesturesPlaceHolderRegistry.GetGestures(placeHolderName);
var gestures = (InputGestureCollection)new InputGestureCollectionConverter().ConvertFrom(serializesGesturesColection);
return gestures;
}
/// <summary>
/// Add gestures to place holder
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="gestures">Added gestures</param>
public static void AddGestures(string placeHolderName, InputGestureCollection gestures) {
var serializedGestures = (string[])new InputGestureCollectionConverter().ConvertTo(gestures, typeof(string[]));
BaseGesturesPlaceHolderRegistry.AddGestures(placeHolderName, serializedGestures);
}
/// <summary>
/// Remove gestures from place holder
///
/// Null argumens are igonred and all gestures which specify
/// provided parameters are removed
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="gestures">Removed gestures</param>
public static void RemoveGestures(string placeHolderName, InputGestureCollection gestures) {
var serializedGestures = (string[])new InputGestureCollectionConverter().ConvertTo(gestures, typeof(string[]));
BaseGesturesPlaceHolderRegistry.RemoveGestures(placeHolderName, serializedGestures);
}
/// <summary>
/// Register update handler which will trigger when gestures in
/// place holder are updated
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="handler">Handler which handles place holder gestures update</param>
public static void RegisterUpdateHandler(string placeHolderName, GesturesPlaceHolderUpdate handler) {
BaseGesturesPlaceHolderRegistry.RegisterUpdateHandler(placeHolderName, handler);
}
/// <summary>
/// Invoke delegates which handle gestures update in place holder
///
/// If place holder is not provided all registered handlers are invoked
/// </summary>
/// <param name="placeHolderName"></param>
public static void InvokeUpdateHandler(string placeHolderName) {
BaseGesturesPlaceHolderRegistry.InvokeUpdateHandlers(placeHolderName);
}
}
}

32
src/Main/ICSharpCode.Core.Presentation/CommandsService/InputGestureCollectionConverter.cs

@ -15,6 +15,13 @@ namespace ICSharpCode.Core.Presentation @@ -15,6 +15,13 @@ namespace ICSharpCode.Core.Presentation
/// </summary>
public class InputGestureCollectionConverter : TypeConverter
{
/// <summary>
/// Returns a value indicating whether this converter can convert an object in the
/// specified source type to the native type of the converter.
/// </summary>
/// <param name="context">Type descriptor context</param>
/// <param name="sourceType">Source type</param>
/// <returns>Array of keys</returns>
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
if (sourceType == typeof(string)) {
return true;
@ -23,6 +30,13 @@ namespace ICSharpCode.Core.Presentation @@ -23,6 +30,13 @@ namespace ICSharpCode.Core.Presentation
return base.CanConvertFrom(context, sourceType);
}
/// <summary>
/// Returns a value indicating whether this converter can convert a
/// specified object to the specified destination type.
/// </summary>
/// <param name="context">An ITypeDescriptorContext that provides a format context, which can be used to extract additional information about the environment this converter is being invoked from. This parameter or properties of this parameter can be a null reference</param>
/// <param name="destinationType">Convertion destination type</param>
/// <returns>Destination object</returns>
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
if (destinationType == typeof(string)) {
return true;
@ -31,11 +45,17 @@ namespace ICSharpCode.Core.Presentation @@ -31,11 +45,17 @@ namespace ICSharpCode.Core.Presentation
return base.CanConvertTo(context, destinationType);
}
/// <summary>
/// Convert from object to input gesture collection
/// </summary>
/// <param name="context">An ITypeDescriptorContext that provides a format context, which can be used to extract additional information about the environment this converter is being invoked from. This parameter or properties of this parameter can be a null reference </param>
/// <param name="culture">Locale information which can influence convertion</param>
/// <param name="value">Input gesture collection</param>
/// <returns></returns>
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
if (value is string) {
var gestures = new InputGestureCollection();
var serializedGestures = Regex.Split((string)value, " +| +");
var serializedGestures = Regex.Split((string)value, @"\s*\|\s*");
foreach(var serializedGesture in serializedGestures) {
if(string.IsNullOrEmpty(serializedGesture)) continue;
@ -49,6 +69,14 @@ namespace ICSharpCode.Core.Presentation @@ -49,6 +69,14 @@ namespace ICSharpCode.Core.Presentation
return base.ConvertFrom(context, culture, value);
}
/// <summary>
/// Converts the input gesture collection to the specified destination type
/// </summary>
/// <param name="context">An ITypeDescriptorContext that provides a format context, which can be used to extract additional information about the environment this converter is being invoked from. This parameter or properties of this parameter can be a null reference </param>
/// <param name="culture">Locale information which can influence convertion</param>
/// <param name="value">Input gesture collection</param>
/// <param name="destinationType">Convertion destination type</param>
/// <returns></returns>
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
if(destinationType == typeof(string)) {
var sb = new StringBuilder();

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

@ -67,6 +67,7 @@ @@ -67,6 +67,7 @@
<Compile Include="CommandsService\CommandBindingInfo.cs" />
<Compile Include="CommandsService\CommandsService.cs" />
<Compile Include="CommandsService\CommandsRegistry.cs" />
<Compile Include="CommandsService\GesturePlaceHolderRegistry.cs" />
<Compile Include="CommandsService\InputBindingInfo.cs" />
<Compile Include="CommandsService\InputGestureCollectionConverter.cs" />
<Compile Include="CommandsService\ManagedCommandBinding.cs" />

18
src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs

@ -119,12 +119,18 @@ namespace ICSharpCode.Core.Presentation @@ -119,12 +119,18 @@ namespace ICSharpCode.Core.Presentation
public MenuCommand(UIElement inputBindingOwner, Codon codon, object caller, bool createCommand) : base(codon, caller)
{
if(!string.IsNullOrEmpty(codon.Properties["command"])) {
var routedCommand = CommandsRegistry.GetRoutedUICommand(codon.Properties["command"]);
this.Command = routedCommand;
var gestures = CommandsRegistry.GetInputGestures(CommandsRegistry.DefaultContext, routedCommand.Name, null);
var gesturesString = (string)new InputGestureCollectionConverter().ConvertToInvariantString(gestures);
this.InputGestureText = "M: " + gesturesString;
var routedCommandName = codon.Properties["command"];
var routedCommand = CommandsRegistry.GetRoutedUICommand(routedCommandName);
if(routedCommand == null) {
MessageService.ShowError("Routed command with name '" + routedCommandName + "' not registered");
} else {
this.Command = routedCommand;
var gestures = CommandsRegistry.GetInputGestures(CommandsRegistry.DefaultContext, routedCommand.Name, null);
var gesturesString = (string)new InputGestureCollectionConverter().ConvertToInvariantString(gestures);
this.InputGestureText = "M: " + gesturesString;
}
} else {
this.Command = CommandWrapper.GetCommand(codon, caller, createCommand);
if (!string.IsNullOrEmpty(codon.Properties["shortcut"])) {

7
src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs

@ -26,7 +26,12 @@ namespace ICSharpCode.Core.Presentation @@ -26,7 +26,12 @@ namespace ICSharpCode.Core.Presentation
this.codon = codon;
this.caller = caller;
this.Command = CommandWrapper.GetCommand(codon, caller, createCommand);
if(!string.IsNullOrEmpty(codon.Properties["command"])) {
this.Command = CommandsRegistry.GetRoutedUICommand(codon.Properties["command"]);
} else {
this.Command = CommandWrapper.GetCommand(codon, caller, createCommand);
}
if (codon.Properties.Contains("icon")) {
var image = PresentationResourceService.GetImage(StringParser.Parse(codon.Properties["icon"]));

82
src/Main/ICSharpCode.Core.WinForms/CommandsService/GesturePlaceHolderRegistry.cs

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.Core.WinForms
{
/// <summary>
/// Stores gestures place holders
///
/// Through this class one can register a handler which which would be
/// called when gestures associated with place holder name are updated
/// </summary>
public static class GesturePlaceHolderRegistry
{
/// <summary>
/// Register a place holder
/// </summary>
/// <param name="placeHolderName">Place holder name. Unique application wide</param>
/// <param name="placeHolderText">Place holder text visible to user</param>
public static void RegisterPlaceHolder(string placeHolderName, string placeHolderText) {
BaseGesturesPlaceHolderRegistry.RegisterPlaceHolder(placeHolderName, placeHolderText);
}
/// <summary>
/// Get gestures assigned to place holder
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <returns>Array of keys</returns>
public static Keys[] GetGestures(string placeHolderName) {
var serializesGesturesColection = BaseGesturesPlaceHolderRegistry.GetGestures(placeHolderName);
var gestures = (Keys[])new KeysCollectionConverter().ConvertFrom(serializesGesturesColection);
return gestures;
}
/// <summary>
/// Add gestures to place holder
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="gestures">Added gestures</param>
public static void AddGestures(string placeHolderName, IEnumerable<Keys> gestures) {
var serializedGestures = (string[])new KeysCollectionConverter().ConvertTo(gestures, typeof(string[]));
BaseGesturesPlaceHolderRegistry.AddGestures(placeHolderName, serializedGestures);
}
/// <summary>
/// Remove gestures from place holder
///
/// Null argumens are igonred and all gestures which specify
/// provided parameters are removed
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="gestures">Gestures</param>
public static void RemoveGestures(string placeHolderName, IEnumerable<Keys> gestures) {
var serializedGestures = (string[])new KeysCollectionConverter().ConvertTo(gestures, typeof(string[]));
BaseGesturesPlaceHolderRegistry.RemoveGestures(placeHolderName, serializedGestures);
}
/// <summary>
/// Register update handler which will trigger when gestures in
/// place holder are updated
/// </summary>
/// <param name="placeHolderName">Place holder name</param>
/// <param name="handler">Handler which handles place holder gestures update</param>
public static void RegisterUpdateHandler(string placeHolderName, GesturesPlaceHolderUpdate handler) {
BaseGesturesPlaceHolderRegistry.RegisterUpdateHandler(placeHolderName, handler);
}
/// <summary>
/// Invoke delegates which handle gestures update in place holder
///
/// If place holder is not provided all registered handlers are invoked
/// </summary>
/// <param name="placeHolderName"></param>
public static void InvokeUpdateHandlers(string placeHolderName) {
BaseGesturesPlaceHolderRegistry.InvokeUpdateHandlers(placeHolderName);
}
}
}

114
src/Main/ICSharpCode.Core.WinForms/CommandsService/KeysCollectionConverter.cs

@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
namespace ICSharpCode.Core.WinForms
{
/// <summary>
/// Converts objects of different types to array of keys and
/// convert enumerable back to objects of different type
/// </summary>
public class KeysCollectionConverter : TypeConverter
{
/// <summary>
/// Returns a value indicating whether this converter can convert an object in the
/// specified source type to the native type of the converter.
/// </summary>
/// <param name="context">Type descriptor context</param>
/// <param name="sourceType">Source type</param>
/// <returns>Array of keys</returns>
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
if (sourceType == typeof(string)) {
return true;
} if (sourceType == typeof(string[])) {
return true;
}
return base.CanConvertFrom(context, sourceType);
}
/// <summary>
/// Returns a value indicating whether this converter can convert a
/// specified object to the specified destination type.
/// </summary>
/// <param name="context">An ITypeDescriptorContext that provides a format context, which can be used to extract additional information about the environment this converter is being invoked from. This parameter or properties of this parameter can be a null reference</param>
/// <param name="destinationType">Convertion destination type</param>
/// <returns>Destination object</returns>
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
if (destinationType == typeof(string) || destinationType == typeof(string[])) {
return true;
}
return base.CanConvertTo(context, destinationType);
}
/// <summary>
/// Convert from source object to array of keys
/// </summary>
/// <param name="context">An ITypeDescriptorContext that provides a format context, which can be used to extract additional information about the environment this converter is being invoked from. This parameter or properties of this parameter can be a null reference </param>
/// <param name="culture">Locale information which can influence convertion</param>
/// <param name="value">Array of Keys</param>
/// <returns></returns>
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
if(value is string || value is string[]) {
var gestures = new List<Keys>();
string[] serializedGestures;
if(value is string) {
serializedGestures = Regex.Split((string)value, @"\s*\|\s*");
} else {
serializedGestures = (string[])value;
}
foreach(var serializedGesture in serializedGestures) {
if(string.IsNullOrEmpty(serializedGesture)) continue;
gestures.Add((Keys)new KeysConverter().ConvertFromInvariantString(serializedGesture));
}
return gestures.ToArray();
}
return base.ConvertFrom(context, culture, value);
}
/// <summary>
/// Converts array of keys to the specified destination type
/// </summary>
/// <param name="context">An ITypeDescriptorContext that provides a format context, which can be used to extract additional information about the environment this converter is being invoked from. This parameter or properties of this parameter can be a null reference </param>
/// <param name="culture">Locale information which can influence convertion</param>
/// <param name="value">Array of keys</param>
/// <param name="destinationType">Convertion destination type</param>
/// <returns></returns>
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
if(destinationType == typeof(string) || destinationType == typeof(string[]))
{
if(value == null) return null;
var keysCollection = (IEnumerable<Keys>)value;
var serializedKeysCollection = new List<string>();
foreach(var gesture in keysCollection) {
var serializedGesture = new KeysConverter().ConvertToInvariantString(gesture);
serializedKeysCollection.Add(serializedGesture);
}
if(destinationType == typeof(string[])) {
return serializedKeysCollection.ToArray();
} else if(destinationType == typeof(string)) {
var sb = new StringBuilder();
foreach(var serializedGesture in serializedKeysCollection) {
sb.AppendFormat("{0} | ", serializedGesture);
}
return sb.Length >= 3 ? sb.ToString(0, sb.Length - 3) : sb.ToString();
}
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
}

3
src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj

@ -50,6 +50,8 @@ @@ -50,6 +50,8 @@
<Compile Include="..\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="CommandsService\GesturePlaceHolderRegistry.cs" />
<Compile Include="CommandsService\KeysCollectionConverter.cs" />
<Compile Include="Menu\IStatusUpdate.cs" />
<Compile Include="Menu\ISubmenuBuilder.cs" />
<Compile Include="Menu\Menu.cs" />
@ -85,6 +87,7 @@ @@ -85,6 +87,7 @@
</ProjectReference>
<Folder Include="Menu" />
<Folder Include="MessageService" />
<Folder Include="CommandsService" />
<Folder Include="ToolBar" />
<Folder Include="Util" />
</ItemGroup>

28
src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs

@ -64,25 +64,6 @@ namespace ICSharpCode.Core.WinForms @@ -64,25 +64,6 @@ namespace ICSharpCode.Core.WinForms
}
public static Keys ParseShortcut(string shortcutString)
{
Keys shortCut = Keys.None;
if (shortcutString.Length > 0) {
try {
foreach (string key in Regex.Split(shortcutString, @"\s*\+\s*")) {
string winKey = key;
if(key.ToLower() == "ctrl") winKey = "Control";
shortCut |= (System.Windows.Forms.Keys)Enum.Parse(typeof(System.Windows.Forms.Keys), winKey);
}
} catch (Exception ex) {
MessageService.ShowError(ex);
return System.Windows.Forms.Keys.None;
}
}
return shortCut;
}
public MenuCommand(Codon codon, object caller, bool createCommand)
{
this.RightToLeft = RightToLeft.Inherit;
@ -94,8 +75,15 @@ namespace ICSharpCode.Core.WinForms @@ -94,8 +75,15 @@ namespace ICSharpCode.Core.WinForms
}
UpdateText();
GesturePlaceHolderRegistry.RegisterPlaceHolder(codon.Properties["class"], StringParser.Parse(codon.Properties["label"]));
GesturePlaceHolderRegistry.RegisterUpdateHandler(codon.Properties["class"], delegate {
ShortcutKeys = GesturePlaceHolderRegistry.GetGestures(codon.Properties["class"])[0];
});
GesturePlaceHolderRegistry.InvokeUpdateHandlers(codon.Properties["class"]);
if (codon.Properties.Contains("shortcut")) {
ShortcutKeys = ParseShortcut(codon.Properties["shortcut"]);
GesturePlaceHolderRegistry.InvokeUpdateHandlers(codon.Properties["class"]);
}
}

280
src/SharpDevelop.sln

@ -1,172 +1,172 @@ @@ -1,172 +1,172 @@

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

Loading…
Cancel
Save