Browse Source

Revert shortcut handling (reverse-merge of all changes from Sergej - r4173,4154,4149-4143,4128,4127).

The new shortcut handling has moved to branches/shortcuts/

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4181 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts^2
Daniel Grunwald 16 years ago
parent
commit
6249b7bef7
  1. 319
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 516
      data/schemas/AddIn.xsd
  3. 33
      doc/technotes/ConditionList.html
  4. 264
      doc/technotes/DoozerList.html
  5. 2
      src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
  6. 2
      src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.addin
  7. 12
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  8. 2
      src/AddIns/DisplayBindings/HexEditor/Project/HexEditor.addin
  9. 24
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
  10. 2
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
  11. 14
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin
  12. 10
      src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.addin
  13. 18
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs
  14. 40
      src/AddIns/Misc/SearchAndReplace/Project/SearchAndReplace.addin
  15. 2
      src/AddIns/Misc/UnitTesting/UnitTesting.addin
  16. 15
      src/Main/Base/Project/Src/Commands/AutostartCommands.cs
  17. 45
      src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs
  18. 23
      src/Main/Base/Project/Src/Commands/ToolsCommands.cs
  19. 10
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs
  20. 12
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs
  21. 17
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs
  22. 2
      src/Main/Base/Project/Src/Internal/Doozers/PadDoozer.cs
  23. 11
      src/Main/Core/Project/ICSharpCode.Core.csproj
  24. 8
      src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs
  25. 75
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDescriptor.cs
  26. 52
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/CommandBindingDoozer.cs
  27. 26
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/GesturesPlaceHolderDescriptor.cs
  28. 43
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/GesturesPlaceHolderDoozer.cs
  29. 44
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/InputBindingDescriptor.cs
  30. 35
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/InputBindingDoozer.cs
  31. 39
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/RoutedUICommandDescriptor.cs
  32. 35
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/RoutedUICommandDoozer.cs
  33. 2
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
  34. 4
      src/Main/Core/Project/Src/AddInTree/AddInTree.cs
  35. 174
      src/Main/Core/Project/Src/Services/CommandsService/BaseGesturesPlaceHolderRegistry.cs
  36. 185
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs
  37. 568
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsRegistry.cs
  38. 72
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandsService.cs
  39. 82
      src/Main/ICSharpCode.Core.Presentation/CommandsService/GesturePlaceHolderRegistry.cs
  40. 90
      src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs
  41. 103
      src/Main/ICSharpCode.Core.Presentation/CommandsService/InputGestureCollectionConverter.cs
  42. 35
      src/Main/ICSharpCode.Core.Presentation/CommandsService/ManagedCommandBinding.cs
  43. 24
      src/Main/ICSharpCode.Core.Presentation/CommandsService/ManagedInputBinding.cs
  44. 44
      src/Main/ICSharpCode.Core.Presentation/CommandsService/WpfCommandWrapper.cs
  45. 10
      src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj
  46. 28
      src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs
  47. 7
      src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs
  48. 82
      src/Main/ICSharpCode.Core.WinForms/CommandsService/GesturePlaceHolderRegistry.cs
  49. 114
      src/Main/ICSharpCode.Core.WinForms/CommandsService/KeysCollectionConverter.cs
  50. 3
      src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj
  51. 26
      src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs
  52. 280
      src/SharpDevelop.sln

319
AddIns/ICSharpCode.SharpDevelop.addin

@ -51,95 +51,6 @@ @@ -51,95 +51,6 @@
<Import assembly=":ICSharpCode.TextEditor"/>
</Runtime>
<Path name="/SharpDevelop/Workbench/RoutedUICommands">
<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}" />
<RoutedUICommand name="SDBuildCommands.CleanSolution" text="${res:XML.MainMenu.BuildMenu.CleanSolution}" />
<RoutedUICommand name="SDBuildCommands.BuildProject" text="${res:XML.MainMenu.BuildMenu.BuildProject}" />
<RoutedUICommand name="SDBuildCommands.RebuildProject" text="${res:XML.MainMenu.BuildMenu.RebuildProject}" />
<RoutedUICommand name="SDBuildCommands.CleanProject" text="${res:XML.MainMenu.BuildMenu.CleanProject}" />
<RoutedUICommand name="SDBuildCommands.AbortBuild" text="${res:XML.MainMenu.BuildMenu.AbortBuild}" />
<RoutedUICommand name="SDBuildCommands.EditConfigurationsCommand" text="${res:XML.MainMenu.BuildMenu.EditConfigurationsPlatforms}" />
<RoutedUICommand name="SDProjectCommands.AddNewProjectToSolution" text="${res:ProjectComponent.ContextMenu.NewProject}" />
<RoutedUICommand name="SDProjectCommands.AddExitingProjectToSolution" text="${res:ProjectComponent.ContextMenu.ExistingProject}" />
<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}" />
<RoutedUICommand name="SDDebugCommands.AttachToProcess" text="${res:XML.MainMenu.DebugMenu.Attach}" />
<RoutedUICommand name="SDDebugCommands.DetachFromProcess" text="${res:XML.MainMenu.DebugMenu.Detach}" />
<RoutedUICommand name="SDDebugCommands.BreakDebugging" text="${res:XML.MainMenu.DebugMenu.Break}" />
<RoutedUICommand name="SDDebugCommands.ContinueDebugging" text="${res:XML.MainMenu.DebugMenu.Continue}" />
<RoutedUICommand name="SDDebugCommands.StepOver" text="${res:XML.MainMenu.DebugMenu.StepOver}" />
<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}" />
<RoutedUICommand name="SDWindowCommands.SplitView" text="Split view" />
</Path>
<Path name="/SharpDevelop/Workbench/CommandBindings">
<CommandBinding command="SDTestCommands.Test" class="ICSharpCode.SharpDevelop.Commands.TestCommand" gestures="Ctrl+M" />
<CommandBinding command="SDBuildCommands.BuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Build" gestures="F8" />
<CommandBinding command="SDBuildCommands.RebuildSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Rebuild" gestures="Alt+F8" />
<CommandBinding command="SDBuildCommands.CleanSolution" class="ICSharpCode.SharpDevelop.Project.Commands.Clean" />
<CommandBinding command="SDBuildCommands.BuildProject" class="ICSharpCode.SharpDevelop.Project.Commands.BuildProject" gestures="F9" />
<CommandBinding command="SDBuildCommands.RebuildProject" class="ICSharpCode.SharpDevelop.Project.Commands.RebuildProject" gestures="Alt+F9" />
<CommandBinding command="SDBuildCommands.CleanProject" class="ICSharpCode.SharpDevelop.Project.Commands.CleanProject" />
<CommandBinding command="SDBuildCommands.AbortBuild" class="ICSharpCode.SharpDevelop.Project.Commands.AbortBuild" />
<CommandBinding command="SDBuildCommands.EditConfigurationsCommand" class="ICSharpCode.SharpDevelop.Project.Commands.EditConfigurationsCommand" />
<CommandBinding command="SDProjectCommands.AddNewProjectToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddNewProjectToSolution" />
<CommandBinding command="SDProjectCommands.AddExitingProjectToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddExitingProjectToSolution" />
<CommandBinding command="SDProjectCommands.AddExistingItemToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemToSolution" />
<CommandBinding command="SDProjectCommands.AddNewSolutionFolderToSolution" class="ICSharpCode.SharpDevelop.Project.Commands.AddNewSolutionFolderToSolution" />
<CommandBinding command="SDDebugCommands.Execute" class="ICSharpCode.SharpDevelop.Project.Commands.Execute" gestures="F5" />
<CommandBinding command="SDDebugCommands.ExecuteWithoutDebugger" class="ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger" gestures="Ctrl+F5" />
<CommandBinding command="SDDebugCommands.StopDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand" />
<CommandBinding command="SDDebugCommands.AttachToProcess" class="ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand" />
<CommandBinding command="SDDebugCommands.DetachFromProcess" class="ICSharpCode.SharpDevelop.Project.Commands.DetachFromProcessCommand" />
<CommandBinding command="SDDebugCommands.BreakDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.BreakDebuggingCommand" gestures="Ctrl+Alt+B" />
<CommandBinding command="SDDebugCommands.ContinueDebugging" class="ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand" gestures="Ctrl+Alt+B" />
<CommandBinding command="SDDebugCommands.StepOver" class="ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand" gestures="F10" />
<CommandBinding command="SDDebugCommands.StepInto" class="ICSharpCode.SharpDevelop.Project.Commands.StepIntoDebuggingCommand" gestures="F11" />
<CommandBinding command="SDDebugCommands.StepOut" class="ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand" gestures="Shift+F11" />
<CommandBinding command="SDDebugCommands.ToggleBreakpoint" class="ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand" gestures="F7" />
<CommandBinding command="SDSearchCommands.ToggleBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark" gestures="Ctrl+F2" />
<CommandBinding command="SDSearchCommands.PrevBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark" gestures="Alt+F2" />
<CommandBinding command="SDSearchCommands.NextBookmark" class="ICSharpCode.SharpDevelop.Bookmarks.NextBookmark" gestures="F2" />
<CommandBinding command="SDSearchCommands.ClearBookmarks" class="ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks" />
<CommandBinding command="SDSearchCommands.GotoLineNumber" class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoLineNumber" gestures="Ctrl+G" />
<CommandBinding command="SDSearchCommands.GotoBrace" class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.GotoMatchingBrace" gestures="Ctrl+B" />
</Path>
<Path name="/SharpDevelop/Workbench/InputBindings">
</Path>
<Path name = "/SharpDevelop/Workbench/Ambiences">
<Class id = ".NET"
class = "ICSharpCode.SharpDevelop.NetAmbience"/>
@ -162,7 +73,7 @@ @@ -162,7 +73,7 @@
category = "Main"
title = "${res:MainWindow.Windows.ProjectScoutLabel}"
icon = "PadIcons.ProjectBrowser"
shortcut = "Ctrl+Alt+L"
shortcut = "Control|Alt|L"
class = "ICSharpCode.SharpDevelop.Project.ProjectBrowserPad"
defaultPosition = "Left" />
@ -170,7 +81,7 @@ @@ -170,7 +81,7 @@
category = "Main"
title = "${res:MainWindow.Windows.ClassScoutLabel}"
icon = "PadIcons.ClassBrowser"
shortcut = "Ctrl+Shift+C"
shortcut = "Control|Shift|C"
class = "ICSharpCode.SharpDevelop.Gui.ClassBrowser.ClassBrowserPad"
defaultPosition = "Right" />
@ -178,14 +89,14 @@ @@ -178,14 +89,14 @@
category = "Main"
title = "${res:MainWindow.Windows.ToolbarLabel}"
icon = "PadIcons.Toolbar"
shortcut = "Ctrl+Alt+X"
shortcut = "Control|Alt|X"
class = "ICSharpCode.SharpDevelop.Gui.ToolsPad"
defaultPosition = "Left" />
<Pad id = "ErrorList"
category = "Main"
title = "${res:MainWindow.Windows.ErrorList}"
shortcut = "Ctrl+Alt+K"
shortcut = "Control|Alt|K"
icon = "PadIcons.ErrorList"
class = "ICSharpCode.SharpDevelop.Gui.ErrorListPad"
defaultPosition = "Bottom" />
@ -201,7 +112,7 @@ @@ -201,7 +112,7 @@
category = "Main"
title = "${res:MainWindow.Windows.OutputWindow}"
icon = "PadIcons.Output"
shortcut = "Ctrl+Alt+O"
shortcut = "Control|Alt|O"
class = "ICSharpCode.SharpDevelop.Gui.CompilerMessageView"
defaultPosition = "Bottom" />
@ -217,7 +128,7 @@ @@ -217,7 +128,7 @@
category = "Tools"
title = "${res:MainWindow.Windows.FileScoutLabel}"
icon = "PadIcons.FileBrowser"
shortcut = "Ctrl+Alt+F"
shortcut = "Control|Alt|F"
class = "ICSharpCode.SharpDevelop.Gui.FileScout"
defaultPosition = "Left, Hidden" />
@ -270,20 +181,17 @@ @@ -270,20 +181,17 @@
<ToolbarItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
tooltip = "${res:MainWindow.Windows.PropertiesScoutLabel}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
<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"
command = "SDProjectCommands.ShowHiddenFilesInProjectBrowser" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ToggleShowAll"/>
<ToolbarItem id = "Refresh"
icon = "ProjectBrowser.Toolbar.Refresh"
tooltip = "${res:AddIns.HtmlHelp2.Refresh}"
class = "ICSharpCode.SharpDevelop.Project.Commands.RefreshProjectBrowser"
command = "SDProjectCommands.RefreshProjectBrowser" />
class = "ICSharpCode.SharpDevelop.Project.Commands.RefreshProjectBrowser"/>
</Condition>
</Path>
@ -299,41 +207,33 @@ @@ -299,41 +207,33 @@
label = "${res:XML.MainMenu.BuildMenu.BuildSolution}"
shortcut = "F8"
icon = "Icons.16x16.BuildCombine"
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"
command = "SDBuildCommands.Build" />
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"/>
<MenuItem id = "Rebuild"
label = "${res:XML.MainMenu.BuildMenu.RebuildSolution}"
shortcut = "Alt+F8"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"
command = "SDBuildCommands.Rebuild" />
shortcut = "Alt|F8"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"/>
<MenuItem id = "Clean"
label = "${res:XML.MainMenu.BuildMenu.CleanSolution}"
class = "ICSharpCode.SharpDevelop.Project.Commands.Clean"
command = "SDBuildCommands.Clean" />
class = "ICSharpCode.SharpDevelop.Project.Commands.Clean"/>
<MenuItem id = "CombineBuildGroupSeparator" type = "Separator"/>
<Condition name="WriteableSolution" action="Disable">
<MenuItem id = "CombineAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu">
<MenuItem id = "AddNewProjectToSolution"
label = "${res:ProjectComponent.ContextMenu.NewProject}"
icon = "Icons.16x16.NewProjectIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewProjectToSolution"
command = "SDProjectCommands.AddNewProjectToSolution" />
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewProjectToSolution"/>
<MenuItem id = "AddExitingProjectToSolution"
label = "${res:ProjectComponent.ContextMenu.ExistingProject}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExitingProjectToSolution"
command = "SDProjectCommands.AddExitingProjectToSolution" />
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExitingProjectToSolution"/>
<MenuItem id = "Separator1" type = "Separator" />
<MenuItem id = "AddItem"
label = "${res:ProjectComponent.ContextMenu.AddItem}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemToSolution"
command = "SDProjectCommands.AddExistingItemToSolution" />
class = "ICSharpCode.SharpDevelop.Project.Commands.AddExistingItemToSolution"/>
<MenuItem id = "AddNewSolutionFolderToSolution"
icon = "ProjectBrowser.SolutionFolder.CreateNew"
label = "${res:ProjectComponent.ContextMenu.NewSolutionFolder}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewSolutionFolderToSolution"
command = "SDProjectCommands.AddNewSolutionFolderToSolution" />
class = "ICSharpCode.SharpDevelop.Project.Commands.AddNewSolutionFolderToSolution"/>
</MenuItem>
</Condition>
@ -342,8 +242,7 @@ @@ -342,8 +242,7 @@
label = "${res:XML.MainMenu.EditMenu.Paste}"
icon = "Icons.16x16.PasteIcon"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"
command = "" />
class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"/>
<MenuItem id = "Rename"
label = "${res:ProjectComponent.ContextMenu.Rename}"
shortcut = "F2"
@ -352,8 +251,7 @@ @@ -352,8 +251,7 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
</Path>
<Path path = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/SolutionFolderNode">
@ -380,16 +278,13 @@ @@ -380,16 +278,13 @@
<MenuItem id = "Build project"
label = "${res:ProjectComponent.ContextMenu.Build}"
icon = "Icons.16x16.BuildCurrentSelectedProject"
class = "ICSharpCode.SharpDevelop.Project.Commands.BuildProject"
command = "SDBuildCommands.BuildProject" />
class = "ICSharpCode.SharpDevelop.Project.Commands.BuildProject"/>
<MenuItem id = "Rebuild project"
label = "${res:ProjectComponent.ContextMenu.Rebuild}"
class = "ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"
command = "SDBuildCommands.RebuildProject" />
class = "ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"/>
<MenuItem id = "Clean project"
label = "${res:ProjectComponent.ContextMenu.Clean}"
class = "ICSharpCode.SharpDevelop.Project.Commands.CleanProject"
command = "SDBuildCommands.CleanProject" />
class = "ICSharpCode.SharpDevelop.Project.Commands.CleanProject"/>
<!--<MenuItem id = "Publish project"
label = "${res:XML.MainMenu.BuildMenu.PublishProject}"
class = "ICSharpCode.SharpDevelop.Project.Commands.PublishProject"/>-->
@ -420,8 +315,7 @@ @@ -420,8 +315,7 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
</Path>
<Path name="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/MissingProjectNode">
@ -542,8 +436,7 @@ @@ -542,8 +436,7 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
</ComplexCondition>
</Path>
@ -584,8 +477,7 @@ @@ -584,8 +477,7 @@
type = "Item"
icon = "Icons.16x16.PasteIcon"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"
/>
class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"/>
<MenuItem id = "Remove"
label = "${res:Global.RemoveButtonText}"
type = "Item"
@ -746,8 +638,7 @@ @@ -746,8 +638,7 @@
<MenuItem id = "Properties"
icon = "Icons.16x16.PropertiesIcon"
label = "${res:XML.MainMenu.FormatMenu.ShowProperties}"
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"
command = "SDProjectCommands.ShowSelectedProjectBrowserNodeProperties" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ShowPropertiesForNode"/>
</ComplexCondition>
</Path>
@ -926,40 +817,40 @@ @@ -926,40 +817,40 @@
<ToolbarItem id = "Cut"
icon = "Icons.16x16.CutIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Cut.Description}"
command = "ApplicationCommands.Cut"/>
command = "Cut"/>
<ToolbarItem id = "Copy"
icon = "Icons.16x16.CopyIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Copy.Description}"
command = "ApplicationCommands.Copy"/>
command = "Copy"/>
<ToolbarItem id = "Paste"
icon = "Icons.16x16.PasteIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Paste.Description}"
command = "ApplicationCommands.Paste"/>
command = "Paste"/>
<ToolbarItem id = "Delete"
icon = "Icons.16x16.DeleteIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Delete.Description}"
command = "ApplicationCommands.Delete"/>
command = "Delete"/>
<ToolbarItem id = "UndoRedoSeparator" type = "Separator"/>
<ToolbarItem id = "Undo"
icon = "Icons.16x16.UndoIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Undo.Description}"
command = "ApplicationCommands.Undo"/>
command = "Undo"/>
<ToolbarItem id = "Redo"
icon = "Icons.16x16.RedoIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Redo.Description}"
command = "ApplicationCommands.Redo"/>
command = "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" />
@ -976,16 +867,14 @@ @@ -976,16 +867,14 @@
<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>
@ -1245,13 +1134,13 @@ @@ -1245,13 +1134,13 @@
<MenuItem id = "File"
label = "${res:XML.MainMenu.FileMenu.New.File}"
icon = "Icons.16x16.NewDocumentIcon"
shortcut = "Ctrl+N"
shortcut = "Control|N"
class = "ICSharpCode.SharpDevelop.Commands.CreateNewFile"/>
<MenuItem id = "Project"
label = "${res:XML.MainMenu.FileMenu.New.Project}"
icon = "Icons.16x16.NewProjectIcon"
shortcut = "Ctrl+Shift+N"
shortcut = "Control|Shift|N"
class = "ICSharpCode.SharpDevelop.Project.Commands.CreateNewSolution"/>
</MenuItem>
@ -1260,13 +1149,13 @@ @@ -1260,13 +1149,13 @@
<MenuItem id = "File"
label = "${res:XML.MainMenu.FileMenu.Open.File}"
icon = "Icons.16x16.OpenFileIcon"
shortcut = "Ctrl+O"
shortcut = "Control|O"
class = "ICSharpCode.SharpDevelop.Commands.OpenFile"/>
<MenuItem id = "Project"
label = "${res:XML.MainMenu.FileMenu.Open.Project}"
icon = "Icons.16x16.OpenProjectIcon"
shortcut = "Ctrl+Shift+O"
shortcut = "Control|Shift|O"
class = "ICSharpCode.SharpDevelop.Project.Commands.LoadSolution"/>
</MenuItem>
@ -1275,13 +1164,13 @@ @@ -1275,13 +1164,13 @@
<MenuItem id = "CloseFile"
label = "${res:XML.MainMenu.FileMenu.Close.File}"
icon = "Icons.16x16.CloseFileIcon"
shortcut = "Ctrl+F4"
shortcut = "Control|F4"
class ="ICSharpCode.SharpDevelop.Commands.CloseFile"/>
</Condition>
<Condition name = "SolutionOpen" action="Disable">
<MenuItem id = "CloseCombine"
label = "${res:XML.MainMenu.FileMenu.Close.Project}"
shortcut = "Ctrl+Shift+F4"
shortcut = "Control|Shift|F4"
class = "ICSharpCode.SharpDevelop.Project.Commands.CloseSolution"/>
</Condition>
</MenuItem>
@ -1300,7 +1189,7 @@ @@ -1300,7 +1189,7 @@
<MenuItem id = "Save"
label = "${res:XML.MainMenu.FileMenu.Save}"
icon = "Icons.16x16.SaveIcon"
shortcut = "Ctrl+S"
shortcut = "Control|S"
class = "ICSharpCode.SharpDevelop.Commands.SaveFile"/>
</Condition>
@ -1314,7 +1203,7 @@ @@ -1314,7 +1203,7 @@
<MenuItem id = "SaveAll"
label = "${res:XML.MainMenu.FileMenu.SaveAll}"
icon = "Icons.16x16.SaveAllIcon"
shortcut = "Ctrl+Shift+S"
shortcut = "Control|Shift|S"
class = "ICSharpCode.SharpDevelop.Commands.SaveAllFiles"/>
</Condition>
@ -1323,7 +1212,7 @@ @@ -1323,7 +1212,7 @@
<MenuItem id = "Print"
label = "${res:XML.MainMenu.FileMenu.Print}"
icon = "Icons.16x16.Print"
shortcut = "Ctrl+P"
shortcut = "Control|P"
class = "ICSharpCode.SharpDevelop.Commands.Print"/>
<MenuItem id = "PrintPreview"
label = "${res:XML.MainMenu.FileMenu.PrintPreview}"
@ -1360,38 +1249,38 @@ @@ -1360,38 +1249,38 @@
label = "${res:XML.MainMenu.EditMenu.Undo}"
icon = "Icons.16x16.UndoIcon"
type = "Item"
shortcut = "Ctrl+Z"
command = "ApplicationCommands.Undo"/>
shortcut = "Control|Z"
command = "Undo"/>
<MenuItem id = "Redo"
label = "${res:XML.MainMenu.EditMenu.Redo}"
icon = "Icons.16x16.RedoIcon"
type = "Item"
shortcut = "Ctrl+Y"
command = "ApplicationCommands.Redo"/>
shortcut = "Control|Y"
command = "Redo"/>
<MenuItem id = "Separator1" type = "Separator" />
<MenuItem id = "Cut"
label = "${res:XML.MainMenu.EditMenu.Cut}"
icon = "Icons.16x16.CutIcon"
type = "Item"
shortcut = "Ctrl+X"
command = "ApplicationCommands.Cut"/>
shortcut = "Control|X"
command = "Cut"/>
<MenuItem id = "Copy"
label = "${res:XML.MainMenu.EditMenu.Copy}"
icon = "Icons.16x16.CopyIcon"
type = "Item"
shortcut = "Ctrl+C"
command = "ApplicationCommands.Copy"/>
shortcut = "Control|C"
command = "Copy"/>
<MenuItem id = "Paste"
label = "${res:XML.MainMenu.EditMenu.Paste}"
icon = "Icons.16x16.PasteIcon"
type = "Item"
shortcut = "Ctrl+V"
command = "ApplicationCommands.Paste"/>
shortcut = "Control|V"
command = "Paste"/>
<MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}"
icon = "Icons.16x16.DeleteIcon"
type = "Item"
command = "ApplicationCommands.Delete"/>
command = "Delete"/>
<MenuItem id = "Separator2" type = "Separator" />
<Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider" action="Disable">
<MenuItem id = "Insert" label = "${res:XML.MainMenu.EditMenu.Insert}" type="Menu">
@ -1408,7 +1297,7 @@ @@ -1408,7 +1297,7 @@
label = "${res:XML.MainMenu.ToolMenu.InsColor}"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.ShowColorDialog"/>
<MenuItem id = "InsertGuid"
shortcut = "Ctrl+Shift+G"
shortcut = "Control|Shift|G"
label = "${res:XML.MainMenu.ToolMenu.InsGUID}"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.InsertGuidCommand"/>
</MenuItem>
@ -1416,8 +1305,8 @@ @@ -1416,8 +1305,8 @@
<MenuItem id = "SelectAll"
label = "${res:XML.MainMenu.EditMenu.SelectAll}"
type = "Item"
shortcut = "Ctrl+A"
command = "ApplicationCommands.SelectAll"/>
shortcut = "Control|A"
command = "SelectAll"/>
<MenuItem id = "Separator4" type = "Separator" />
<ComplexCondition action="Disable">
<Or>
@ -1497,35 +1386,28 @@ @@ -1497,35 +1386,28 @@
label = "${res:XML.MainMenu.BuildMenu.BuildSolution}"
shortcut = "F8"
icon = "Icons.16x16.BuildCombine"
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"
command = "SDBuildCommands.BuildSolution"
/>
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"/>
<MenuItem id = "Rebuild"
label = "${res:XML.MainMenu.BuildMenu.RebuildSolution}"
shortcut = "Alt+F8"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"
command = "SDBuildCommands.RebuildSolution" />
shortcut = "Alt|F8"
class = "ICSharpCode.SharpDevelop.Project.Commands.Rebuild"/>
<MenuItem id = "Clean"
label = "${res:XML.MainMenu.BuildMenu.CleanSolution}"
class = "ICSharpCode.SharpDevelop.Project.Commands.Clean"
command = "SDBuildCommands.CleanSolution" />
class = "ICSharpCode.SharpDevelop.Project.Commands.Clean"/>
<Condition name = "ProjectActive" activeproject="*">
<MenuItem id = "Separator1" type = "Separator" />
<MenuItem id = "Build project"
label = "${res:XML.MainMenu.BuildMenu.BuildProject}"
shortcut = "F9"
icon = "Icons.16x16.BuildCurrentSelectedProject"
class = "ICSharpCode.SharpDevelop.Project.Commands.BuildProject"
command = "SDBuildCommands.BuildProject" />
class = "ICSharpCode.SharpDevelop.Project.Commands.BuildProject"/>
<MenuItem id = "Rebuild project"
label = "${res:XML.MainMenu.BuildMenu.RebuildProject}"
shortcut = "Alt+F9"
class = "ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"
command = "SDBuildCommands.RebuildProject" />
shortcut = "Alt|F9"
class = "ICSharpCode.SharpDevelop.Project.Commands.RebuildProject"/>
<MenuItem id = "Clean project"
label = "${res:XML.MainMenu.BuildMenu.CleanProject}"
class = "ICSharpCode.SharpDevelop.Project.Commands.CleanProject"
command = "SDBuildCommands.CleanProject" />
class = "ICSharpCode.SharpDevelop.Project.Commands.CleanProject"/>
<!--<MenuItem id = "Publish project"
label = "${res:XML.MainMenu.BuildMenu.PublishProject}"
class = "ICSharpCode.SharpDevelop.Project.Commands.PublishProject"/>-->
@ -1535,28 +1417,21 @@ @@ -1535,28 +1417,21 @@
label="${res:XML.MainMenu.BuildMenu.AbortBuild}"
shortcut="Pause"
class="ICSharpCode.SharpDevelop.Project.Commands.AbortBuild"
loadclasslazy="false"
command="SDBuildCommands.AbortBuild" />
loadclasslazy="false"/>
<MenuItem id = "Separator3" type = "Separator" />
<MenuItem id = "SetConfiguration"
label = "${res:XML.MainMenu.BuildMenu.SetConfiguration}"
type = "Menu">
<MenuItem id = "ConfigurationBuilder"
type = "Builder"
class = "ICSharpCode.SharpDevelop.Project.Commands.SetConfigurationMenuBuilder" />
<MenuItem id = "ConfigurationBuilder" type = "Builder" class = "ICSharpCode.SharpDevelop.Project.Commands.SetConfigurationMenuBuilder"/>
</MenuItem>
<MenuItem id = "SetPlatform"
label = "${res:XML.MainMenu.BuildMenu.SetPlatform}"
type = "Menu">
<MenuItem
id = "PlatformBuilder"
type = "Builder"
class = "ICSharpCode.SharpDevelop.Project.Commands.SetPlatformMenuBuilder" />
<MenuItem id = "PlatformBuilder" type = "Builder" class = "ICSharpCode.SharpDevelop.Project.Commands.SetPlatformMenuBuilder"/>
</MenuItem>
<MenuItem id = "EditConfigurations"
label = "${res:XML.MainMenu.BuildMenu.EditConfigurationsPlatforms}"
class = "ICSharpCode.SharpDevelop.Project.Commands.EditConfigurationsCommand"
command = "SDBuildCommands.EditConfigurationsCommand" />
class = "ICSharpCode.SharpDevelop.Project.Commands.EditConfigurationsCommand"/>
</ComplexCondition>
</MenuItem> <!-- end BUILD menu -->
@ -1568,9 +1443,7 @@ @@ -1568,9 +1443,7 @@
label = "${res:XML.MainMenu.RunMenu.Run}"
icon = "Icons.16x16.RunProgramIcon"
shortcut = "F5"
class = "ICSharpCode.SharpDevelop.Project.Commands.Execute"
command = "SDDebugCommands.Execute"
/>
class = "ICSharpCode.SharpDevelop.Project.Commands.Execute"/>
</Condition>
</Condition>
</Condition>
@ -1581,9 +1454,8 @@ @@ -1581,9 +1454,8 @@
<MenuItem id = "RunWithoutDebugger"
label = "${res:XML.MainMenu.DebugMenu.RunWithoutDebug}"
icon = "Icons.16x16.Debug.StartWithoutDebugging"
shortcut = "Ctrl+F5"
class = "ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger"
command = "SDDebugCommands.ExecuteWithoutDebugger" />
shortcut = "Control|F5"
class = "ICSharpCode.SharpDevelop.Project.Commands.ExecuteWithoutDebugger"/>
</Condition>
</Condition>
</Condition>
@ -1593,8 +1465,7 @@ @@ -1593,8 +1465,7 @@
<MenuItem id = "Stop"
label = "${res:XML.MainMenu.DebugMenu.Stop}"
icon = "Icons.16x16.StopProcess"
class = "ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand"
command = "SDDebugCommands.StopDebugging" />
class = "ICSharpCode.SharpDevelop.Project.Commands.StopDebuggingCommand"/>
</Condition>
</Condition>
@ -1602,8 +1473,7 @@ @@ -1602,8 +1473,7 @@
<Condition name="IsProcessRunning" isprocessrunning="False" isdebugging="False" action="Disable">
<MenuItem id = "Attach"
label = "${res:XML.MainMenu.DebugMenu.Attach}"
class = "ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand"
command = "SDDebugCommands.AttachToProcess" />
class = "ICSharpCode.SharpDevelop.Project.Commands.AttachToProcessCommand"/>
</Condition>
</Condition>
@ -1611,8 +1481,7 @@ @@ -1611,8 +1481,7 @@
<Condition name="IsProcessRunning" isdebugging="True" action="Disable">
<MenuItem id = "Detach"
label = "${res:XML.MainMenu.DebugMenu.Detach}"
class = "ICSharpCode.SharpDevelop.Project.Commands.DetachFromProcessCommand"
command = "SDDebugCommands.DetachFromProcess" />
class = "ICSharpCode.SharpDevelop.Project.Commands.DetachFromProcessCommand"/>
</Condition>
</Condition>
@ -1622,17 +1491,15 @@ @@ -1622,17 +1491,15 @@
<MenuItem id = "Break"
label = "${res:XML.MainMenu.DebugMenu.Break}"
icon = "Icons.16x16.Debug.Break"
shortcut = "Ctrl+Alt+B"
class = "ICSharpCode.SharpDevelop.Project.Commands.BreakDebuggingCommand"
command = "SDDebugCommands.BreakDebugging" />
shortcut = "Control|Alt|B"
class = "ICSharpCode.SharpDevelop.Project.Commands.BreakDebuggingCommand"/>
</Condition>
<Condition name="IsProcessRunning" isprocessrunning = "False" isdebugging = "True" action = "Disable">
<MenuItem id = "Continue"
label = "${res:XML.MainMenu.DebugMenu.Continue}"
icon = "Icons.16x16.Debug.Continue"
shortcut = "F6"
class = "ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand"
command = "SDDebugCommands.ContinueDebugging" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ContinueDebuggingCommand"/>
</Condition>
</Condition>
@ -1643,20 +1510,17 @@ @@ -1643,20 +1510,17 @@
label = "${res:XML.MainMenu.DebugMenu.StepOver}"
icon = "Icons.16x16.Debug.StepOver"
shortcut = "F10"
class = "ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand"
command = "SDDebugCommands.StepOver" />
class = "ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand"/>
<MenuItem id = "Step into"
label = "${res:XML.MainMenu.DebugMenu.StepInto}"
icon = "Icons.16x16.Debug.StepInto"
shortcut = "F11"
class = "ICSharpCode.SharpDevelop.Project.Commands.StepDebuggingCommand"
command = "SDDebugCommands.StepInto" />
class = "ICSharpCode.SharpDevelop.Project.Commands.StepIntoDebuggingCommand"/>
<MenuItem id = "Step out"
label = "${res:XML.MainMenu.DebugMenu.StepOut}"
icon = "Icons.16x16.Debug.StepOut"
shortcut = "Shift|F11"
class = "ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand"
command = "SDDebugCommands.StepOut" />
class = "ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand"/>
</Condition>
</Condition>
@ -1670,8 +1534,7 @@ @@ -1670,8 +1534,7 @@
label = "${res:XML.MainMenu.DebugMenu.ToggleBreakpoint}"
shortcut = "F7"
icon = "Bookmarks.Breakpoint"
class = "ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand"
command = "SDDebugCommands.ToggleBreakpoint" />
class = "ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand"/>
</ComplexCondition>
</MenuItem> <!-- end DEBUG menu -->
@ -1750,11 +1613,11 @@ @@ -1750,11 +1613,11 @@
<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}"
shortcut = "Ctrl+Q"
shortcut = "Control|Q"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.QuickDocumentation"/>
</Condition>
@ -1771,7 +1634,7 @@ @@ -1771,7 +1634,7 @@
<MenuItem id = "NextWindow"
label = "${res:XML.MainMenu.WindowMenu.NxtWindow}"
icon = "Icons.16x16.NextWindowIcon"
shortcut = "Ctrl+Tab"
shortcut = "Control|Tab"
class = "ICSharpCode.SharpDevelop.Commands.SelectNextWindow" />
<MenuItem id = "PrevWindow"
label = "${res:XML.MainMenu.WindowMenu.PrvWindow}"
@ -1782,7 +1645,7 @@ @@ -1782,7 +1645,7 @@
<MenuItem id = "SplitView"
label = "${res:XML.MainMenu.WindowMenu.Split}"
icon = "Icons.16x16.SplitWindow"
command = "SDWindowCommands.SplitView"/>
command = "SplitView"/>
<MenuItem id = "CloseAll"
label = "${res:XML.MainMenu.FileMenu.CloseAll}"
icon = "Icons.16x16.CloseAllDocuments"
@ -1920,7 +1783,7 @@ @@ -1920,7 +1783,7 @@
<MenuItem id = "Save"
label = "${res:XML.MainMenu.FileMenu.Save}"
icon = "Icons.16x16.SaveIcon"
shortcut = "Ctrl+S"
shortcut = "Control|S"
class = "ICSharpCode.SharpDevelop.Commands.SaveFile"/>
<MenuItem id = "SaveAs"
label = "${res:XML.MainMenu.FileMenu.SaveAs}"
@ -1941,7 +1804,7 @@ @@ -1941,7 +1804,7 @@
class= "ICSharpCode.SharpDevelop.DefaultEditor.Commands.CommentRegion"/>
<MenuItem id = "Indent"
label = "${res:XML.TextAreaContextMenu.Indent}"
shortcut = "Ctrl+I"
shortcut = "Control|I"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.IndentSelection" />
<MenuItem id = "FileMode" label = "${res:XML.TextAreaContextMenu.FileMode}" type="Menu">
@ -2041,7 +1904,7 @@ @@ -2041,7 +1904,7 @@
class= "ICSharpCode.SharpDevelop.DefaultEditor.Commands.CommentRegion"/>
<MenuItem id = "Indent"
label = "${res:XML.TextAreaContextMenu.Indent}"
shortcut = "Ctrl+I"
shortcut = "Control|I"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.IndentSelection" />
</Condition>
</MenuItem>

516
data/schemas/AddIn.xsd

@ -114,27 +114,24 @@ @@ -114,27 +114,24 @@
<!-- !!! INSERT DOOZER LIST !!! -->
<xs:element ref="Class" />
<xs:element ref="CodeCompletionBinding" />
<xs:element ref="CommandBinding" />
<xs:element ref="CustomProperty" />
<xs:element ref="CustomTool" />
<xs:element ref="Debugger" />
<xs:element ref="DialogPanel" />
<xs:element ref="Directory" />
<xs:element ref="DisplayBinding" />
<xs:element ref="EditAction" />
<xs:element ref="FileFilter" />
<xs:element ref="Icon" />
<xs:element ref="Include" />
<xs:element ref="InputBinding" />
<xs:element ref="LanguageBinding" />
<xs:element ref="MenuItem" />
<xs:element ref="OptionPanel" />
<xs:element ref="Pad" />
<xs:element ref="Parser" />
<xs:element ref="ProjectContentRegistry" />
<xs:element ref="RoutedUICommand" />
<xs:element ref="SchemeExtension" />
<xs:element ref="SyntaxMode" />
<xs:element ref="String" />
<xs:element ref="SyntaxMode" />
<xs:element ref="TaskBoundAdditionalLogger" />
<xs:element ref="ToolbarItem" />
</xs:choice>
@ -187,27 +184,24 @@ @@ -187,27 +184,24 @@
<!-- !!! INSERT DOOZER LIST !!! -->
<xs:element ref="Class" />
<xs:element ref="CodeCompletionBinding" />
<xs:element ref="CommandBinding" />
<xs:element ref="CustomProperty" />
<xs:element ref="CustomTool" />
<xs:element ref="Debugger" />
<xs:element ref="DialogPanel" />
<xs:element ref="Directory" />
<xs:element ref="DisplayBinding" />
<xs:element ref="EditAction" />
<xs:element ref="FileFilter" />
<xs:element ref="Icon" />
<xs:element ref="Include" />
<xs:element ref="InputBinding" />
<xs:element ref="LanguageBinding" />
<xs:element ref="MenuItem" />
<xs:element ref="OptionPanel" />
<xs:element ref="Pad" />
<xs:element ref="Parser" />
<xs:element ref="ProjectContentRegistry" />
<xs:element ref="RoutedUICommand" />
<xs:element ref="SchemeExtension" />
<xs:element ref="SyntaxMode" />
<xs:element ref="String" />
<xs:element ref="SyntaxMode" />
<xs:element ref="TaskBoundAdditionalLogger" />
<xs:element ref="ToolbarItem" />
</xs:choice>
@ -270,8 +264,8 @@ @@ -270,8 +264,8 @@
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
The fully qualified type name of the class to create an instace of.
</xs:documentation>
The fully qualified type name of the class to create an instace of.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -291,16 +285,16 @@ @@ -291,16 +285,16 @@
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the ICodeCompletionBinding class (normally deriving from DefaultCodeCompletionBinding).
</xs:documentation>
Name of the ICodeCompletionBinding class (normally deriving from DefaultCodeCompletionBinding).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="extensions" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
List of semicolon-separated entries of the file extensions handled by the binding.
If no extensions attribute is specified, the binding is activated in all files.
</xs:documentation>
List of semicolon-separated entries of the file extensions handled by the binding.
If no extensions attribute is specified, the binding is activated in all files.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -313,81 +307,36 @@ @@ -313,81 +307,36 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="CommandBinding">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="command" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of routed UI command which triggers this binding
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Class implementing System.Window.Input.ICommand or
ICSharpCode.Core class. CanExecute and Executed methods
are used to handle raised event
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="lazy" use="optional">
<xs:annotation>
<xs:documentation>
Use lazy loading. If addin containing binded command is
not loaded yet load asseblies referenced in add-in
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="1" />
<xs:enumeration value="0" />
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CommandBinding" type="CommandBinding">
<xs:annotation>
<xs:documentation>
Creates descriptor containing information about command binding
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="CustomProperty">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="name" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
The name of the MSBuild meta data.
</xs:documentation>
The name of the MSBuild meta data.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="displayName" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
The display name of the property.
</xs:documentation>
The display name of the property.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="description" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
The description text for the property.
</xs:documentation>
The description text for the property.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="runCustomTool" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Boolean property specifying whether the custom tool should be run when the property value is changed
by the user. Default: false.
</xs:documentation>
Boolean property specifying whether the custom tool should be run when the property value is changed
by the user. Default: false.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -406,23 +355,23 @@ @@ -406,23 +355,23 @@
<xs:attribute name="id" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
ID used to identify the custom tool.
</xs:documentation>
ID used to identify the custom tool.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the ICustomTool class.
</xs:documentation>
Name of the ICustomTool class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="fileNamePattern" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Regular expression that specifies the file names for which the custom tool
can be used. Example: "\.res(x|ources)$"
</xs:documentation>
Regular expression that specifies the file names for which the custom tool
can be used. Example: "\.res(x|ources)$"
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -441,43 +390,43 @@ @@ -441,43 +390,43 @@
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IDebugger class.
</xs:documentation>
Name of the IDebugger class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="supportsStart" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies if the debugger supports the 'Start' command. Default: true
</xs:documentation>
Specifies if the debugger supports the 'Start' command. Default: true
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="supportsStartWithoutDebugger" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies if the debugger supports the 'StartWithoutDebugger' command. Default: true
</xs:documentation>
Specifies if the debugger supports the 'StartWithoutDebugger' command. Default: true
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="supportsStop" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies if the debugger supports the 'Stop' (kill running process) command. Default: true
</xs:documentation>
Specifies if the debugger supports the 'Stop' (kill running process) command. Default: true
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="supportsStepping" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies if the debugger supports stepping. Default: false
</xs:documentation>
Specifies if the debugger supports stepping. Default: false
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="supportsExecutionControl" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies if the debugger supports execution control (break, resume). Default: false
</xs:documentation>
Specifies if the debugger supports execution control (break, resume). Default: false
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -490,14 +439,47 @@ @@ -490,14 +439,47 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="DialogPanel">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ComplexCondition" />
<xs:element ref="Condition" />
<xs:element ref="DialogPanel" />
<xs:element ref="Include" />
</xs:choice>
<xs:attribute name="class" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IDialogPanel class. Optional if the page has subpages.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="label" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Caption of the dialog panel.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DialogPanel" type="DialogPanel">
<xs:annotation>
<xs:documentation>
Creates DefaultDialogPanelDescriptor objects that are used in option dialogs.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="Directory">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="path" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Path relative to the directory which contains the .addin file defining the codon.
</xs:documentation>
Path relative to the directory which contains the .addin file defining the codon.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -516,22 +498,22 @@ @@ -516,22 +498,22 @@
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IDisplayBinding or ISecondaryDisplayBinding class.
</xs:documentation>
Name of the IDisplayBinding or ISecondaryDisplayBinding class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="title" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Title of the display binding to use in the "Open With" dialog.
</xs:documentation>
Title of the display binding to use in the "Open With" dialog.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type" use="optional">
<xs:annotation>
<xs:documentation>
Type of the display binding (either "Primary" or "Secondary"). Default: "Primary".
</xs:documentation>
Type of the display binding (either "Primary" or "Secondary"). Default: "Primary".
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
@ -543,9 +525,9 @@ @@ -543,9 +525,9 @@
<xs:attribute name="fileNamePattern" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Regular expression that specifies the file names for which the display binding
will be used. Example: "\.res(x|ources)$"
</xs:documentation>
Regular expression that specifies the file names for which the display binding
will be used. Example: "\.res(x|ources)$"
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -567,16 +549,16 @@ @@ -567,16 +549,16 @@
<xs:attribute name="keys" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Comma-separated list of keyboard shortcuts that activate the edit action.
E.g. "Control|C,Control|Insert"
</xs:documentation>
Comma-separated list of keyboard shortcuts that activate the edit action.
E.g. "Control|C,Control|Insert"
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IEditAction class.
</xs:documentation>
Name of the IEditAction class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -595,15 +577,15 @@ @@ -595,15 +577,15 @@
<xs:attribute name="name" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
The name of the file filter entry.
</xs:documentation>
The name of the file filter entry.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="extensions" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
The extensions associated with this file filter entry.
</xs:documentation>
The extensions associated with this file filter entry.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -622,24 +604,24 @@ @@ -622,24 +604,24 @@
<xs:attribute name="resource" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
The name of a bitmap resource in the resource service.
</xs:documentation>
The name of a bitmap resource in the resource service.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="language" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
This attribute is specified when a project icon association should be created.
It specifies the language of the project types that use the icon.
</xs:documentation>
This attribute is specified when a project icon association should be created.
It specifies the language of the project types that use the icon.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="extensions" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
This attribute is specified when a file icon association should be created.
It specifies the semicolon-separated list of file types that use the icon.
</xs:documentation>
This attribute is specified when a file icon association should be created.
It specifies the semicolon-separated list of file types that use the icon.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -659,18 +641,18 @@ @@ -659,18 +641,18 @@
<xs:attribute name="item" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
When this attribute is used, the include doozer builds the item that is at the
addin tree location specified by this attribute.
</xs:documentation>
When this attribute is used, the include doozer builds the item that is at the
addin tree location specified by this attribute.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="path" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
When this attribute is used, the include doozer builds all items inside the
path addin tree location specified by this attribute and returns an
IBuildItemsModifier which includes all items in the output list.
</xs:documentation>
When this attribute is used, the include doozer builds all items inside the
path addin tree location specified by this attribute and returns an
IBuildItemsModifier which includes all items in the output list.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -685,62 +667,35 @@ @@ -685,62 +667,35 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="InputBinding">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="command" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of routed UI command which is triggered by this binding
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="gesture" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Gesture which triggers this binding
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="InputBinding" type="InputBinding">
<xs:annotation>
<xs:documentation>
Creates descriptor containing information about input binding
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="LanguageBinding">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="guid" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Project type GUID of the project used by MsBuild.
</xs:documentation>
Project type GUID of the project used by MsBuild.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="supportedextensions" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Semicolon-separated list of file extensions that are compilable files in the project. (e.g. ".boo")
</xs:documentation>
Semicolon-separated list of file extensions that are compilable files in the project. (e.g. ".boo")
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="projectfileextension" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
File extension of project files. (e.g. ".booproj")
</xs:documentation>
File extension of project files. (e.g. ".booproj")
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the ILanguageBinding class.
</xs:documentation>
Name of the ILanguageBinding class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -765,18 +720,18 @@ @@ -765,18 +720,18 @@
<xs:attribute name="label" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Label of the menu item.
</xs:documentation>
Label of the menu item.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type" use="optional">
<xs:annotation>
<xs:documentation>
This attribute must be one of these values:
Separator, CheckBox, Item=Command, Menu (=with subitems),
Builder (=class implementing ISubmenuBuilder).
Default: Command.
</xs:documentation>
This attribute must be one of these values:
Separator, CheckBox, Item=Command, Menu (=with subitems),
Builder (=class implementing ISubmenuBuilder).
Default: Command.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
@ -792,48 +747,39 @@ @@ -792,48 +747,39 @@
<xs:attribute name="loadclasslazy" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Only for the type "Item"/"Command".
When set to false, the command class is loaded
immediately instead of the usual lazy-loading.
</xs:documentation>
Only for the type "Item"/"Command".
When set to false, the command class is loaded
immediately instead of the usual lazy-loading.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="icon" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Icon of the menu item.
</xs:documentation>
Icon of the menu item.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Command class that is run when item is clicked.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="command" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
A WPF routed command that is executed when item is clicked.
Currently, this property is supported only for WPF Menus.
Only one of the "class" and "command" attributes can be used on a menu entry.
</xs:documentation>
Command class that is run when item is clicked.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="link" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Only for the type "Item"/"Command". Opens a webpage instead of running a command when
clicking the item.
</xs:documentation>
Only for the type "Item"/"Command". Opens a webpage instead of running a command when
clicking the item.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="shortcut" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Shortcut that activates the command (e.g. "Control|S").
</xs:documentation>
Shortcut that activates the command (e.g. "Control|S").
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -846,82 +792,49 @@ @@ -846,82 +792,49 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="OptionPanel">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ComplexCondition" />
<xs:element ref="Condition" />
<xs:element ref="IOptionPanel" />
<xs:element ref="Include" />
</xs:choice>
<xs:attribute name="class" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IOptionPanel class. Optional if the page has subpages.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="label" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Caption of the dialog panel.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="OptionPanel" type="OptionPanel">
<xs:annotation>
<xs:documentation>
Creates DefaultOptionPanelDescriptor objects that are used in option dialogs.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="Pad">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
IPadContent class that is loaded when the pad content is shown for the first time.
</xs:documentation>
IPadContent class that is loaded when the pad content is shown for the first time.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="title" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Title of the pad that is shown in the user interface.
Should be a resource string, e.g. "${res:AddIns.HtmlHelp2.Contents}"
</xs:documentation>
Title of the pad that is shown in the user interface.
Should be a resource string, e.g. "${res:AddIns.HtmlHelp2.Contents}"
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="icon" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies the name of the icon resource used for the pad.
Pad icon resources must be registered with the ResourceService before the
workbench is loaded!
</xs:documentation>
Specifies the name of the icon resource used for the pad.
Pad icon resources must be registered with the ResourceService before the
workbench is loaded!
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="category" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Category of the pad. It is possible to create menu items that automatically
contain show commands for all pads in a certain category.
Pads in the category "Main" will show up in the "View" menu, the category
"Tools" in the "View -&gt; Tools" menu, the category "Debugger" in the
"View -&gt; Debugger" menu.
</xs:documentation>
Category of the pad. It is possible to create menu items that automatically
contain show commands for all pads in a certain category.
Pads in the category "Main" will show up in the "View" menu, the category
"Tools" in the "View -&gt; Tools" menu, the category "Debugger" in the
"View -&gt; Debugger" menu.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="shortcut" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Shortcut that activates the 'Show pad' command (e.g. "Control|Alt|T").
</xs:documentation>
Shortcut that activates the 'Show pad' command (e.g. "Control|Alt|T").
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -940,22 +853,22 @@ @@ -940,22 +853,22 @@
<xs:attribute name="supportedextensions" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Semicolon-separated list of file extensions for which the parser is used. (e.g. ".boo")
</xs:documentation>
Semicolon-separated list of file extensions for which the parser is used. (e.g. ".boo")
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="projectfileextension" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
File extension of project files. (e.g. ".booproj")
</xs:documentation>
File extension of project files. (e.g. ".booproj")
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IParser class.
</xs:documentation>
Name of the IParser class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -974,8 +887,8 @@ @@ -974,8 +887,8 @@
<xs:attribute name="class" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the ProjectContentRegistry class.
</xs:documentation>
Name of the ProjectContentRegistry class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -988,57 +901,50 @@ @@ -988,57 +901,50 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="RoutedUICommand">
<xs:complexType name="SchemeExtension">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="name" use="required" type="xs:string">
<xs:attribute name="scheme" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Routed UI command name
</xs:documentation>
Specifies the name of the protocol the extension handles. (e.g. 'ms-help' or 'startpage')
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="text" use="required" type="xs:string">
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Routed UI command displayed name
</xs:documentation>
Name of the ISchemeExtension class (normally deriving from DefaultSchemeExtension).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="RoutedUICommand" type="RoutedUICommand">
<xs:element name="SchemeExtension" type="SchemeExtension">
<xs:annotation>
<xs:documentation>
Creates descriptor containing information about routed UI command
Creates browser scheme extensions that can intercept calls on one protocol.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="SchemeExtension">
<xs:complexType name="String">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="scheme" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies the name of the protocol the extension handles. (e.g. 'ms-help' or 'startpage')
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="required" type="xs:string">
<xs:attribute name="text" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the ISchemeExtension class (normally deriving from DefaultSchemeExtension).
</xs:documentation>
The string to return.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SchemeExtension" type="SchemeExtension">
<xs:element name="String" type="String">
<xs:annotation>
<xs:documentation>
Creates browser scheme extensions that can intercept calls on one protocol.
Creates a string.
</xs:documentation>
</xs:annotation>
</xs:element>
@ -1048,22 +954,22 @@ @@ -1048,22 +954,22 @@
<xs:attribute name="name" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the language for which the syntax mode is used.
</xs:documentation>
Name of the language for which the syntax mode is used.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="extensions" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Semicolon-separated list of file extensions for which the syntax mode is used.
</xs:documentation>
Semicolon-separated list of file extensions for which the syntax mode is used.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="resource" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Fully qualified name of the resource file.
</xs:documentation>
Fully qualified name of the resource file.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -1077,42 +983,22 @@ @@ -1077,42 +983,22 @@
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="String">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="text" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
The string to return.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="String" type="String">
<xs:annotation>
<xs:documentation>
Creates a string.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="TaskBoundAdditionalLogger">
<xs:complexContent>
<xs:extension base="AbstractCodon">
<xs:attribute name="class" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Name of the IMSBuildAdditionalLogger class.
</xs:documentation>
Name of the IMSBuildAdditionalLogger class.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="taskname" use="required" type="xs:string">
<xs:annotation>
<xs:documentation>
Specifies the name of the MSBuild task that must be running for
this logger to be active.
</xs:documentation>
Specifies the name of the MSBuild task that must be running for
this logger to be active.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
@ -1138,23 +1024,23 @@ @@ -1138,23 +1024,23 @@
<xs:attribute name="label" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Label of the tool bar item.
</xs:documentation>
Label of the tool bar item.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="icon" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Icon of the tool bar item.
</xs:documentation>
Icon of the tool bar item.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type" use="optional">
<xs:annotation>
<xs:documentation>
This attribute must be one of these values:
Separator, CheckBox, Item, ComboBox, DropDownButton
</xs:documentation>
This attribute must be one of these values:
Separator, CheckBox, Item, ComboBox, DropDownButton
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
@ -1169,24 +1055,24 @@ @@ -1169,24 +1055,24 @@
<xs:attribute name="loadclasslazy" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Only for the type "Item". When set to false, the command class is loaded
immediately instead of the usual lazy-loading.
</xs:documentation>
Only for the type "Item". When set to false, the command class is loaded
immediately instead of the usual lazy-loading.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="tooltip" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Tooltip of the tool bar item.
</xs:documentation>
Tooltip of the tool bar item.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation>
Command class that is run when item is clicked; or class that manages
the ComboBox/DropDownButton. Required for everything except "Separator".
</xs:documentation>
Command class that is run when item is clicked; or class that manages
the ComboBox/DropDownButton. Required for everything except "Separator".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>

33
doc/technotes/ConditionList.html

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
</head><body>
<h1>Condition List</h1>
<p class="notice">This file was generated by the tool 'BuildAddinDocumentation'.
It is based on SharpDevelop 4.0.0.4126.</p>
It is based on SharpDevelop 3.0.0.3062.</p>
<ul>
<li><a href="#ActiveContentExtension">ActiveContentExtension</a>
<li><a href="#ActiveViewContentUntitled">ActiveViewContentUntitled</a>
@ -26,8 +26,6 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -26,8 +26,6 @@ It is based on SharpDevelop 4.0.0.4126.</p>
<li><a href="#TextContent">TextContent</a>
<li><a href="#WindowActive">WindowActive</a>
<li><a href="#WindowOpen">WindowOpen</a>
<li><a href="#WriteableProject">WriteableProject</a>
<li><a href="#WriteableSolution">WriteableSolution</a>
</ul>
<div>
<h2><a name="ActiveContentExtension">ActiveContentExtension</a></h2>
@ -178,7 +176,7 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -178,7 +176,7 @@ It is based on SharpDevelop 4.0.0.4126.</p>
<th colspan=2>comparisonType:</td>
<td>
The mode of the comparison: a field of the System.StringComparison enumeration. The default is
'OrdinalIgnoreCase'.
'InvariantCultureIgnoreCase'.
</td>
</tr>
</table>
@ -215,7 +213,7 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -215,7 +213,7 @@ It is based on SharpDevelop 4.0.0.4126.</p>
<th colspan=2>comparisonType:</td>
<td>
The mode of the comparison: a field of the System.StringComparison enumeration. The default is
'OrdinalIgnoreCase'.
'InvariantCultureIgnoreCase'.
</td>
</tr>
</table>
@ -494,29 +492,4 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -494,29 +492,4 @@ It is based on SharpDevelop 4.0.0.4126.</p>
<br><pre>
&lt;Condition name="WindowOpen" openwindow="*"&gt;</pre></p>
</div>
<div>
<h2><a name="WriteableProject">WriteableProject</a></h2>
<p>
Tests if the caller project is writable. If caller is not an IProject it tests
Project.CurrentProject.
</p>
<table>
<tr>
<th colspan=2>Condition name:</td>
<td>ICSharpCode.SharpDevelop.WriteableProjectConditionEvaluator</td>
</tr>
</table>
</div>
<div>
<h2><a name="WriteableSolution">WriteableSolution</a></h2>
<p>
Description of WriteableSolutionEvaluator.
</p>
<table>
<tr>
<th colspan=2>Condition name:</td>
<td>ICSharpCode.SharpDevelop.WriteableSolutionConditionEvaluator</td>
</tr>
</table>
</div>
</body></html>

264
doc/technotes/DoozerList.html

@ -5,31 +5,28 @@ @@ -5,31 +5,28 @@
</head><body>
<h1>Doozer List</h1>
<p class="notice">This file was generated by the tool 'BuildAddinDocumentation'.
It is based on SharpDevelop 4.0.0.4126.</p>
It is based on SharpDevelop 3.0.0.3062.</p>
<ul>
<li><a href="#Class">Class</a>
<li><a href="#CodeCompletionBinding">CodeCompletionBinding</a>
<li><a href="#CommandBinding">CommandBinding</a>
<li><a href="#CustomProperty">CustomProperty</a>
<li><a href="#CustomTool">CustomTool</a>
<li><a href="#Debugger">Debugger</a>
<li><a href="#DialogPanel">DialogPanel</a>
<li><a href="#Directory">Directory</a>
<li><a href="#DisplayBinding">DisplayBinding</a>
<li><a href="#EditAction">EditAction</a>
<li><a href="#FileFilter">FileFilter</a>
<li><a href="#Icon">Icon</a>
<li><a href="#Include">Include</a>
<li><a href="#InputBinding">InputBinding</a>
<li><a href="#LanguageBinding">LanguageBinding</a>
<li><a href="#MenuItem">MenuItem</a>
<li><a href="#OptionPanel">OptionPanel</a>
<li><a href="#Pad">Pad</a>
<li><a href="#Parser">Parser</a>
<li><a href="#ProjectContentRegistry">ProjectContentRegistry</a>
<li><a href="#RoutedUICommand">RoutedUICommand</a>
<li><a href="#SchemeExtension">SchemeExtension</a>
<li><a href="#SyntaxMode">SyntaxMode</a>
<li><a href="#String">String</a>
<li><a href="#SyntaxMode">SyntaxMode</a>
<li><a href="#TaskBoundAdditionalLogger">TaskBoundAdditionalLogger</a>
<li><a href="#ToolbarItem">ToolbarItem</a>
</ul>
@ -73,7 +70,7 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -73,7 +70,7 @@ It is based on SharpDevelop 4.0.0.4126.</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.SharpDevelop.Editor.CodeCompletionBindingDoozer</td>
<td>ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.CodeCompletionBindingDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
@ -106,54 +103,6 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -106,54 +103,6 @@ It is based on SharpDevelop 4.0.0.4126.</p>
</tr>
</table>
</div>
<div>
<h2><a name="CommandBinding">CommandBinding</a></h2>
<p>
Creates descriptor containing information about command binding
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.Core.CommandBindingDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th>command:</td>
<td class="userequired">required</td>
<td>
Name of routed UI command which triggers this binding
</td>
</tr>
<tr>
<th>class:</td>
<td class="userequired">required</td>
<td>
Class implementing System.Window.Input.ICommand or
ICSharpCode.Core class. CanExecute and Executed methods
are used to handle raised event
</td>
</tr>
<tr>
<th>lazy:</td>
<td class="userequired">optional</td>
<td>
Use lazy loading. If addin containing binded command is
not loaded yet load asseblies referenced in add-in
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Usage:</td>
<td>Only in /SharpDevelop/Workbench/CommandBindings</td>
</tr>
<tr>
<th colspan=2>Returns:</td>
<td>
CommandBindingDescriptor object
</td>
</tr>
</table>
</div>
<div>
<h2><a name="CustomProperty">CustomProperty</a></h2>
<p>
@ -326,6 +275,50 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -326,6 +275,50 @@ It is based on SharpDevelop 4.0.0.4126.</p>
</tr>
</table>
</div>
<div>
<h2><a name="DialogPanel">DialogPanel</a></h2>
<p>
Creates DefaultDialogPanelDescriptor objects that are used in option dialogs.
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.SharpDevelop.DialogPanelDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th colspan=2>class:</td>
<td>
Name of the IDialogPanel class. Optional if the page has subpages.
</td>
</tr>
<tr>
<th>label:</td>
<td class="userequired">required</td>
<td>
Caption of the dialog panel.
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Children:</td>
<td>
In the SharpDevelop options, option pages can have subpages by specifying them
as children in the AddInTree.
</td>
</tr>
<tr>
<th colspan=2>Usage:</td>
<td>In /SharpDevelop/BackendBindings/ProjectOptions/ and /SharpDevelop/Dialogs/OptionsDialog</td>
</tr>
<tr>
<th colspan=2>Returns:</td>
<td>
A DefaultDialogPanelDescriptor object.
</td>
</tr>
</table>
</div>
<div>
<h2><a name="Directory">Directory</a></h2>
<p>
@ -597,44 +590,6 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -597,44 +590,6 @@ It is based on SharpDevelop 4.0.0.4126.</p>
</tr>
</table>
</div>
<div>
<h2><a name="InputBinding">InputBinding</a></h2>
<p>
Creates descriptor containing information about input binding
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.Core.InputBindingDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th>command:</td>
<td class="userequired">required</td>
<td>
Name of routed UI command which is triggered by this binding
</td>
</tr>
<tr>
<th>gesture:</td>
<td class="userequired">required</td>
<td>
Gesture which triggers this binding
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Usage:</td>
<td>Only in /SharpDevelop/Workbench/InputBindings</td>
</tr>
<tr>
<th colspan=2>Returns:</td>
<td>
InputBindingDescriptor object
</td>
</tr>
</table>
</div>
<div>
<h2><a name="LanguageBinding">LanguageBinding</a></h2>
<p>
@ -738,15 +693,6 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -738,15 +693,6 @@ It is based on SharpDevelop 4.0.0.4126.</p>
Command class that is run when item is clicked.
</td>
</tr>
<tr>
<th>command:</td>
<td class="userequired">optional</td>
<td>
A WPF routed command that is executed when item is clicked.
Currently, this property is supported only for WPF Menus.
Only one of the "class" and "command" attributes can be used on a menu entry.
</td>
</tr>
<tr>
<th>link:</td>
<td class="userequired">optional</td>
@ -776,7 +722,7 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -776,7 +722,7 @@ It is based on SharpDevelop 4.0.0.4126.</p>
<tr>
<th colspan=2>Returns:</td>
<td>
A MenuItemDescriptor object.
Any ToolStrip* object, depending on the type attribute.
</td>
</tr>
<tr>
@ -785,50 +731,6 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -785,50 +731,6 @@ It is based on SharpDevelop 4.0.0.4126.</p>
</tr>
</table>
</div>
<div>
<h2><a name="OptionPanel">OptionPanel</a></h2>
<p>
Creates DefaultOptionPanelDescriptor objects that are used in option dialogs.
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.SharpDevelop.OptionPanelDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th colspan=2>class:</td>
<td>
Name of the IOptionPanel class. Optional if the page has subpages.
</td>
</tr>
<tr>
<th>label:</td>
<td class="userequired">required</td>
<td>
Caption of the dialog panel.
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Children:</td>
<td>
In the SharpDevelop options, option pages can have subpages by specifying them
as children in the AddInTree.
</td>
</tr>
<tr>
<th colspan=2>Usage:</td>
<td>In /SharpDevelop/BackendBindings/ProjectOptions/ and /SharpDevelop/Dialogs/OptionsDialog</td>
</tr>
<tr>
<th colspan=2>Returns:</td>
<td>
A DefaultOptionPanelDescriptor object.
</td>
</tr>
</table>
</div>
<div>
<h2><a name="Pad">Pad</a></h2>
<p>
@ -976,77 +878,66 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -976,77 +878,66 @@ It is based on SharpDevelop 4.0.0.4126.</p>
</table>
</div>
<div>
<h2><a name="RoutedUICommand">RoutedUICommand</a></h2>
<h2><a name="SchemeExtension">SchemeExtension</a></h2>
<p>
Creates descriptor containing information about routed UI command
Creates browser scheme extensions that can intercept calls on one protocol.
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.Core.RoutedUICommandDoozer</td>
<td>ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th>name:</td>
<th>scheme:</td>
<td class="userequired">required</td>
<td>
Routed UI command name
Specifies the name of the protocol the extension handles. (e.g. 'ms-help' or 'startpage')
</td>
</tr>
<tr>
<th>text:</td>
<th>class:</td>
<td class="userequired">required</td>
<td>
Routed UI command displayed name
Name of the ISchemeExtension class (normally deriving from DefaultSchemeExtension).
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Usage:</td>
<td>Only in /SharpDevelop/Workbench/CommandBindings</td>
<td>Only in /SharpDevelop/Views/Browser/SchemeExtensions</td>
</tr>
<tr>
<th colspan=2>Returns:</td>
<td>
RoutedUICommandDescriptor object
An SchemeExtensionDescriptor object that exposes the protocol name and ISchemeExtension object (lazy-loading).
</td>
</tr>
</table>
</div>
<div>
<h2><a name="SchemeExtension">SchemeExtension</a></h2>
<h2><a name="String">String</a></h2>
<p>
Creates browser scheme extensions that can intercept calls on one protocol.
Creates a string.
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer</td>
<td>ICSharpCode.Core.StringDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th>scheme:</td>
<td class="userequired">required</td>
<td>
Specifies the name of the protocol the extension handles. (e.g. 'ms-help' or 'startpage')
</td>
</tr>
<tr>
<th>class:</td>
<th>text:</td>
<td class="userequired">required</td>
<td>
Name of the ISchemeExtension class (normally deriving from DefaultSchemeExtension).
The string to return.
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Usage:</td>
<td>Only in /SharpDevelop/Views/Browser/SchemeExtensions</td>
</tr>
<tr>
<th colspan=2>Returns:</td>
<td>
An SchemeExtensionDescriptor object that exposes the protocol name and ISchemeExtension object (lazy-loading).
The string specified by 'text', passed through the StringParser.
</td>
</tr>
</table>
@ -1098,33 +989,6 @@ It is based on SharpDevelop 4.0.0.4126.</p> @@ -1098,33 +989,6 @@ It is based on SharpDevelop 4.0.0.4126.</p>
</tr>
</table>
</div>
<div>
<h2><a name="String">String</a></h2>
<p>
Creates a string.
</p>
<table>
<tr>
<th colspan=2>Doozer name:</td>
<td>ICSharpCode.Core.StringDoozer</td>
</tr>
<tr><td colspan=3><hr><h3>Attributes:</h3></td></tr>
<tr>
<th>text:</td>
<td class="userequired">required</td>
<td>
The string to return.
</td>
</tr>
<tr><td colspan=3><hr></td></tr>
<tr>
<th colspan=2>Returns:</td>
<td>
The string specified by 'text', passed through the StringParser.
</td>
</tr>
</table>
</div>
<div>
<h2><a name="TaskBoundAdditionalLogger">TaskBoundAdditionalLogger</a></h2>
<p>

2
src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin

@ -164,7 +164,7 @@ @@ -164,7 +164,7 @@
category = "Main"
title = "${res:ICSharpCode.BooInterpreter}"
icon = "Boo.ProjectIcon"
shortcut = "Ctrl+Shift+B"
shortcut = "Control|Shift|B"
class = "Grunwald.BooBinding.InteractiveInterpreterPad"
defaultPosition = "Bottom, Hidden" />
</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>

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

@ -117,13 +117,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -117,13 +117,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
public CodeEditor()
{
var contextName = this.GetType().FullName;
CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, this, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, contextName, this));
CommandsRegistry.RegisterInputBindingUpdateHandler(contextName, this, CommandsRegistry.CreateInputBindingUpdateHandler(InputBindings, contextName, this));
CommandsRegistry.RegisterCommandBinding(contextName, this, "SDWindowCommands.SplitView", OnSplitView, OnCanSplitView);
CommandsRegistry.InvokeCommandBindingUpdateHandlers(contextName, this);
CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName, this);
this.CommandBindings.Add(new CommandBinding(SharpDevelopRoutedCommands.SplitView, OnSplitView));
textMarkerService = new TextMarkerService(this);
iconBarManager = new IconBarManager();
@ -204,10 +198,6 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -204,10 +198,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
primaryTextEditor.Save(stream);
}
void OnCanSplitView(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
void OnSplitView(object sender, ExecutedRoutedEventArgs e)
{
if (secondaryTextEditor == null) {

2
src/AddIns/DisplayBindings/HexEditor/Project/HexEditor.addin

@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
<MenuItem id = "Save"
label = "${res:XML.MainMenu.FileMenu.Save}"
icon = "Icons.16x16.SaveIcon"
shortcut = "Ctrl+S"
shortcut = "Control|S"
class = "ICSharpCode.SharpDevelop.Commands.SaveFile"/>
<MenuItem id = "SaveAs"
label = "${res:XML.MainMenu.FileMenu.SaveAs}"

24
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin

@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
<MenuItem id = "ValidateXml"
label = "${res:ICSharpCode.XmlEditor.ValidateXmlMenuLabel}"
class = "ICSharpCode.XmlEditor.ValidateXmlCommand"
shortcut = "Ctrl+Shift+V" />
shortcut = "Control|Shift|V" />
<MenuItem id = "Separator1" type = "Separator"/>
<ComplexCondition action="Disable">
<Not>
@ -81,7 +81,7 @@ @@ -81,7 +81,7 @@
<MenuItem id="RunTransform"
label="${res:ICSharpCode.XmlEditor.RunXSLT}"
class="ICSharpCode.XmlEditor.RunXslTransformCommand"
shortcut="Ctrl+Shift+T"/>
shortcut="Control|Shift|T"/>
</ComplexCondition>
<MenuItem id = "Separator2" type = "Separator"/>
<MenuItem id = "Format"
@ -96,17 +96,17 @@ @@ -96,17 +96,17 @@
<MenuItem id = "Cut"
label = "${res:XML.TextAreaContextMenu.Cut}"
icon = "Icons.16x16.CutIcon"
shortcut = "Ctrl+X"
shortcut = "Control|X"
class = "ICSharpCode.SharpDevelop.Commands.Cut"/>
<MenuItem id = "Copy"
label = "${res:XML.TextAreaContextMenu.Copy}"
icon = "Icons.16x16.CopyIcon"
shortcut = "Ctrl+C"
shortcut = "Control|C"
class = "ICSharpCode.SharpDevelop.Commands.Copy"/>
<MenuItem id = "Paste"
label = "${res:XML.TextAreaContextMenu.Paste}"
icon = "Icons.16x16.PasteIcon"
shortcut = "Ctrl+V"
shortcut = "Control|V"
class = "ICSharpCode.SharpDevelop.Commands.Paste"/>
<MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}"
@ -116,7 +116,7 @@ @@ -116,7 +116,7 @@
<MenuItem id = "Save"
label = "${res:XML.MainMenu.FileMenu.Save}"
icon = "Icons.16x16.SaveIcon"
shortcut = "Ctrl+S"
shortcut = "Control|S"
class = "ICSharpCode.SharpDevelop.Commands.SaveFile"/>
<MenuItem id = "SaveAs"
label = "${res:XML.MainMenu.FileMenu.SaveAs}"
@ -127,7 +127,7 @@ @@ -127,7 +127,7 @@
<MenuItem id = "Separator2" type = "Separator"/>
<MenuItem id = "Indent"
label = "${res:XML.TextAreaContextMenu.Indent}"
shortcut = "Ctrl+I"
shortcut = "Control|I"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.IndentSelection" />
<MenuItem id = "HideXPathResults"
label = "${res:ICSharpCode.XmlEditor.HideXPathResults}"
@ -159,8 +159,8 @@ @@ -159,8 +159,8 @@
</Path>
<Path path = "/AddIns/XmlEditor/EditActions">
<EditAction id = "XmlCompletionPopup" class = "ICSharpCode.XmlEditor.CodeCompletionPopupCommand" keys = "Ctrl+Space"/>
<EditAction id = "GoToDefinition" class = "ICSharpCode.XmlEditor.GoToSchemaDefinitionEditAction" keys = "Ctrl+Enter"/>
<EditAction id = "XmlCompletionPopup" class = "ICSharpCode.XmlEditor.CodeCompletionPopupCommand" keys = "Control|Space"/>
<EditAction id = "GoToDefinition" class = "ICSharpCode.XmlEditor.GoToSchemaDefinitionEditAction" keys = "Control|Enter"/>
</Path>
<!-- XPath Query pad -->
@ -203,17 +203,17 @@ @@ -203,17 +203,17 @@
<MenuItem id = "Cut"
label = "${res:XML.TextAreaContextMenu.Cut}"
icon = "Icons.16x16.CutIcon"
shortcut = "Ctrl+X"
shortcut = "Control|X"
class = "ICSharpCode.SharpDevelop.Commands.Cut"/>
<MenuItem id = "Copy"
label = "${res:XML.TextAreaContextMenu.Copy}"
icon = "Icons.16x16.CopyIcon"
shortcut = "Ctrl+C"
shortcut = "Control|C"
class = "ICSharpCode.SharpDevelop.Commands.Copy"/>
<MenuItem id = "Paste"
label = "${res:XML.TextAreaContextMenu.Paste}"
icon = "Icons.16x16.PasteIcon"
shortcut = "Ctrl+V"
shortcut = "Control|V"
class = "ICSharpCode.SharpDevelop.Commands.Paste"/>
<MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}"

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

@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
insertafter = "Bookmarks"
insertbefore = "DefinitionView"
icon = "CodeCoverage.Icons.16x16.Pad"
shortcut = "Ctrl+Alt+G"
shortcut = "Control|Alt|G"
class = "ICSharpCode.CodeCoverage.CodeCoveragePad"
defaultPosition = "Bottom, Hidden" />
</Path>

14
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin

@ -73,7 +73,7 @@ @@ -73,7 +73,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.Breakpoints}"
icon = "PadIcons.BreakPoints"
shortcut = "Ctrl+Alt+P"
shortcut = "Control|Alt|P"
class = "ICSharpCode.SharpDevelop.Gui.Pads.BreakPointsPad"
defaultPosition = "Bottom, Hidden" />
@ -81,7 +81,7 @@ @@ -81,7 +81,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.CallStack}"
icon = "PadIcons.CallStack"
shortcut = "Ctrl+Alt+C"
shortcut = "Control|Alt|C"
class = "ICSharpCode.SharpDevelop.Gui.Pads.CallStackPad"
defaultPosition = "Bottom, Hidden" />
@ -89,7 +89,7 @@ @@ -89,7 +89,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.Modules}"
icon = "PadIcons.LoadedModules"
shortcut = "Ctrl+Alt+U"
shortcut = "Control|Alt|U"
class = "ICSharpCode.SharpDevelop.Gui.Pads.LoadedModulesPad"
defaultPosition = "Bottom, Hidden" />
@ -97,7 +97,7 @@ @@ -97,7 +97,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.Threads}"
icon = "PadIcons.Threads"
shortcut = "Ctrl+Alt+H"
shortcut = "Control|Alt|H"
class = "ICSharpCode.SharpDevelop.Gui.Pads.RunningThreadsPad"
defaultPosition = "Bottom, Hidden" />
@ -105,7 +105,7 @@ @@ -105,7 +105,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.LocalVariables}"
icon = "PadIcons.LocalVariables"
shortcut = "Ctrl+Alt+V"
shortcut = "Control|Alt|V"
class = "ICSharpCode.SharpDevelop.Gui.Pads.LocalVarPad"
defaultPosition = "Bottom, Hidden" />
@ -113,7 +113,7 @@ @@ -113,7 +113,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.Console}"
icon = "PadIcons.Output"
shortcut = "Ctrl+Alt+N"
shortcut = "Control|Alt|N"
class = "ICSharpCode.SharpDevelop.Gui.Pads.ConsolePad"
defaultPosition = "Bottom, Hidden" />
@ -121,7 +121,7 @@ @@ -121,7 +121,7 @@
category = "Debugger"
title = "${res:MainWindow.Windows.Debug.Watch}"
icon = "PadIcons.LocalVariables"
shortcut = "Ctrl+Alt+W"
shortcut = "Control|Alt|W"
class = "ICSharpCode.SharpDevelop.Gui.Pads.WatchPad"
defaultPosition = "Bottom, Hidden" />
</Path>

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

@ -67,24 +67,24 @@ @@ -67,24 +67,24 @@
insertafter = "HtmlHelp2Separator2"
label = "${res:AddIns.HtmlHelp2.Contents}"
icon = "HtmlHelp2.16x16.Toc"
shortcut = "Ctrl+Alt+F1"
shortcut = "Control|Alt|F1"
class = "HtmlHelp2.ShowTocMenuCommand"/>
<MenuItem id = "IndexPadCommand"
label = "${res:AddIns.HtmlHelp2.Index}"
icon = "HtmlHelp2.16x16.Index"
shortcut = "Ctrl+Alt+F2"
shortcut = "Control|Alt|F2"
class = "HtmlHelp2.ShowIndexMenuCommand"
insertafter = "TocPadCommand"/>
<MenuItem id = "SearchPadCommand"
label = "${res:AddIns.HtmlHelp2.SearchCommand}"
icon = "HtmlHelp2.16x16.Search"
shortcut = "Ctrl+Alt+F3"
shortcut = "Control|Alt|F3"
class = "HtmlHelp2.ShowSearchMenuCommand"
insertafter = "IndexPadCommand"/>
<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"/>
@ -92,7 +92,7 @@ @@ -92,7 +92,7 @@
insertbefore = "TocPadCommand"
label = "${res:AddIns.HtmlHelp2.DynamicHelp}"
icon = "HtmlHelp2.16x16.DynamicHelp"
shortcut = "Ctrl+F1"
shortcut = "Control|F1"
class = "HtmlHelp2.ShowDynamicHelpMenuCommand"/>
</Path>

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

@ -87,16 +87,8 @@ namespace SearchAndReplace @@ -87,16 +87,8 @@ namespace SearchAndReplace
SetSearchAndReplaceMode();
FormLocationHelper.Apply(this, "ICSharpCode.SharpDevelop.Gui.SearchAndReplaceDialog.Location", false);
// 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");
searchKeyboardShortcut = GetKeyboardShortcut(SearchMenuAddInPath, "Find");
replaceKeyboardShortcut = GetKeyboardShortcut(SearchMenuAddInPath, "Replace");
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
@ -152,17 +144,17 @@ namespace SearchAndReplace @@ -152,17 +144,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 (Keys[])new KeysCollectionConverter().ConvertFromInvariantString(codon.Properties["shortcut"]);
return MenuCommand.ParseShortcut(codon.Properties["shortcut"]);
}
}
}
return new Keys[] { Keys.None };
return Keys.None;
}
}
}

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

@ -11,56 +11,30 @@ @@ -11,56 +11,30 @@
<Import assembly = "SearchAndReplace.dll"/>
</Runtime>
<!-- Commands registry test -->
<Path name="/SharpDevelop/Workbench/RoutedUICommands">
<RoutedUICommand name="SDSearchAndReplace.Find" text="${res:XML.MainMenu.SearchMenu.Find}" />
<RoutedUICommand name="SDSearchAndReplace.FindNext" text="${res:XML.MainMenu.SearchMenu.FindNext}" />
<RoutedUICommand name="SDSearchAndReplace.FindNextSelected" text="${res:XML.MainMenu.SearchMenu.FindNextSelected}" />
<RoutedUICommand name="SDSearchAndReplace.Replace" text="${res:XML.MainMenu.SearchMenu.Replace}" />
</Path>
<Path name="/SharpDevelop/Workbench/CommandBindings">
<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/GesturePlaceHolder">
<GesturesPlaceHolder name="SDSearchAndReplace.Find" text="Find next" gestures="Ctrl+F" />
<GesturesPlaceHolder name="SDSearchAndReplace.Replace" text="Find next" gestures="F3" />
</Path>
<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"
command="SDSearchAndReplace.Find" />
shortcut = "Control|F"
class = "SearchAndReplace.Find"/>
<MenuItem id = "FindNext"
insertafter = "Find"
label = "${res:XML.MainMenu.SearchMenu.FindNext}"
icon = "Icons.16x16.FindNextIcon"
shortcut = "F3"
class = "SearchAndReplace.FindNext"
command="SDSearchAndReplace.FindNext" />
class = "SearchAndReplace.FindNext"/>
<MenuItem id = "FindNextSelected"
insertafter = "FindNext"
label = "${res:XML.MainMenu.SearchMenu.FindNextSelected}"
shortcut = "Ctrl+F3"
class = "SearchAndReplace.FindNextSelected"
command="SDSearchAndReplace.FindNextSelected" />
shortcut = "Control|F3"
class = "SearchAndReplace.FindNextSelected"/>
<MenuItem id = "Replace"
insertbefore = "SearchIncremental"
insertafter = "FindNextSelected"
label = "${res:XML.MainMenu.SearchMenu.Replace}"
icon = "Icons.16x16.ReplaceIcon"
shortcut = "Ctrl+R"
class = "SearchAndReplace.Replace"
command="SDSearchAndReplace.Replace" />
shortcut = "Control|R"
class = "SearchAndReplace.Replace"/>
</Path>
<Path name = "/SharpDevelop/DefaultEditor/SearchAndReplace/WildcardHelpPath">

2
src/AddIns/Misc/UnitTesting/UnitTesting.addin

@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
category = "Tools"
title = "${res:ICSharpCode.NUnitPad.NUnitPadContent.PadName}"
icon = "PadIcons.NUnitTest"
shortcut = "Ctrl+Alt+T"
shortcut = "Control|Alt|T"
class = "ICSharpCode.UnitTesting.UnitTestsPad"
defaultPosition = "Right, Hidden" />
</Path>

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

@ -125,25 +125,14 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -125,25 +125,14 @@ 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());

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

@ -11,7 +11,6 @@ using System.Collections.Generic; @@ -11,7 +11,6 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using ICSharpCode.Core;
@ -456,8 +455,6 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -456,8 +455,6 @@ namespace ICSharpCode.SharpDevelop.Commands
get;
}
public List<string> bindingsAssigned = new List<string>();
public ICollection BuildItems(Codon codon, object owner)
{
ArrayList list = new ArrayList();
@ -468,43 +465,15 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -468,43 +465,15 @@ namespace ICSharpCode.SharpDevelop.Commands
if (!string.IsNullOrEmpty(padContent.Icon)) {
item.Icon = PresentationResourceService.GetPixelSnappedImage(padContent.Icon);
}
var routedCommandName = "SDViewCommands.ShowView_" + padContent.Class;
var routedCommandText = "Show view " + MenuService.ConvertLabel(StringParser.Parse(padContent.Title));
// TODO: fix this hack
if(!bindingsAssigned.Contains(routedCommandName)) {
// Dynamicaly create routed UI command to loaded pad and bindings for it
CommandsRegistry.RegisterRoutedUICommand(routedCommandName, routedCommandText);
CommandsRegistry.LoadCommand(routedCommandName, new BringPadToFrontCommand(padContent));
CommandsRegistry.RegisterCommandBinding(CommandsRegistry.DefaultContext, null, routedCommandName, routedCommandName, null, false);
// 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, null, routedCommandName, gesture);
}
}
bindingsAssigned.Add(routedCommandName);
item.Command = new BringPadToFrontCommand(padContent);
if (!string.IsNullOrEmpty(padContent.Shortcut)) {
var kg = Core.Presentation.MenuService.ParseShortcut(padContent.Shortcut);
WorkbenchSingleton.MainWindow.InputBindings.Add(
new System.Windows.Input.InputBinding(item.Command, kg)
);
item.InputGestureText = kg.GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture);
}
CommandsRegistry.InvokeCommandBindingUpdateHandlers(CommandsRegistry.DefaultContext, null);
CommandsRegistry.InvokeInputBindingUpdateHandlers(CommandsRegistry.DefaultContext, null);
item.InputGestureText = padContent.Shortcut;
item.Command = CommandsRegistry.GetRoutedUICommand(routedCommandName);
// item.Command = new BringPadToFrontCommand(padContent);
// if (!string.IsNullOrEmpty(padContent.Shortcut)) {
// var kg = Core.Presentation.MenuService.ParseShortcut(padContent.Shortcut);
// WorkbenchSingleton.MainWindow.InputBindings.Add(
// new System.Windows.Input.InputBinding(item.Command, kg)
// );
// item.InputGestureText = kg.GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture);
// }
list.Add(item);
}
}

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

@ -8,33 +8,10 @@ @@ -8,33 +8,10 @@
using System;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.Gui;
using System.Windows.Input;
namespace ICSharpCode.SharpDevelop.Commands
{
public class TestCommand : System.Windows.Input.ICommand
{
public event EventHandler CanExecuteChanged
{
add {}
remove {}
}
public void Execute(object parameter)
{
CommandsRegistry.GetRoutedUICommand("SDBuildCommands.BuildSolution").Execute(parameter, WorkbenchSingleton.MainWindow);
System.Windows.MessageBox.Show("test");
}
public bool CanExecute(object parameter)
{
return true;
}
}
public class OptionsCommand : AbstractMenuCommand
{
public static bool? ShowTabbedOptions(string dialogTitle, AddInTreeNode node)

10
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs

@ -10,7 +10,6 @@ using System; @@ -10,7 +10,6 @@ using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
using System.Windows.Input;
using AvalonDock;
using ICSharpCode.Core;
@ -86,15 +85,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -86,15 +85,6 @@ namespace ICSharpCode.SharpDevelop.Gui
if (padInstance != null) {
this.SetContent(padInstance.Control, padInstance);
placeholder = null;
var contextName = padInstance.GetType().FullName;
CommandsRegistry.LoadContext(contextName, (UIElement)Content);
CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, null, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, contextName, null));
CommandsRegistry.RegisterInputBindingUpdateHandler(contextName, null, CommandsRegistry.CreateInputBindingUpdateHandler(InputBindings, contextName, null));
CommandsRegistry.InvokeCommandBindingUpdateHandlers(contextName, null);
CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName, null);
}
}
}

12
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs

@ -91,18 +91,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -91,18 +91,6 @@ namespace ICSharpCode.SharpDevelop.Gui
}
oldActiveViewContent = newActiveViewContent;
CommandManager.InvalidateRequerySuggested();
if (newActiveViewContent != null) {
string contextName = newActiveViewContent.GetType().FullName;
CommandsRegistry.LoadContext(contextName, (UIElement)Content);
CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, null, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, contextName, null));
CommandsRegistry.RegisterInputBindingUpdateHandler(contextName, null, CommandsRegistry.CreateInputBindingUpdateHandler(InputBindings, contextName, null));
CommandsRegistry.InvokeCommandBindingUpdateHandlers(contextName, null);
CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName, null);
}
}
sealed class ViewContentCollection : Collection<IViewContent>

17
src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs

@ -80,23 +80,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -80,23 +80,6 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
CommandsRegistry.DefaultContext = this.GetType().Name;
CommandsService.RegisterBuiltInRoutedUICommands();
// Load all commands and and key bindings from addin tree
CommandsService.RegisterRoutedUICommands(this, "/SharpDevelop/Workbench/RoutedUICommands");
CommandsService.RegisterCommandBindings(this, "/SharpDevelop/Workbench/CommandBindings");
CommandsService.RegisterInputBindings(this, "/SharpDevelop/Workbench/InputBindings");
// Register context and load all commands from addin
CommandsRegistry.LoadAddinCommands(AddInTree.AddIns.FirstOrDefault(a => a.Name == "SharpDevelop"));
CommandsRegistry.RegisterCommandBindingsUpdateHandler(CommandsRegistry.DefaultContext, null, CommandsRegistry.CreateCommandBindingUpdateHandler(CommandBindings, CommandsRegistry.DefaultContext, null));
CommandsRegistry.RegisterInputBindingUpdateHandler(CommandsRegistry.DefaultContext, null, CommandsRegistry.CreateInputBindingUpdateHandler(InputBindings, CommandsRegistry.DefaultContext, null));
CommandsRegistry.InvokeCommandBindingUpdateHandlers(CommandsRegistry.DefaultContext, null);
CommandsRegistry.InvokeInputBindingUpdateHandlers(CommandsRegistry.DefaultContext, null);
mainMenu.ItemsSource = MenuService.CreateMenuItems(this, this, mainMenuPath);
toolBars = ToolBarService.CreateToolBars(this, "/SharpDevelop/Workbench/ToolBar");

2
src/Main/Base/Project/Src/Internal/Doozers/PadDoozer.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.SharpDevelop @@ -34,7 +34,7 @@ namespace ICSharpCode.SharpDevelop
/// "View -&gt; Debugger" menu.
/// </attribute>
/// <attribute name="shortcut" use="optional">
/// Shortcut that activates the 'Show pad' command (e.g. "Ctrl+Alt+T").
/// Shortcut that activates the 'Show pad' command (e.g. "Control|Alt|T").
/// </attribute>
/// <usage>Only in /Workspace/Parser</usage>
/// <returns>

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

@ -60,14 +60,6 @@ @@ -60,14 +60,6 @@
<Compile Include="Src\AddInTree\AddIn\Codon.cs" />
<Compile Include="Src\AddInTree\AddIn\ComplexCondition.cs" />
<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" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\Command\RoutedUICommandDoozer.cs" />
<Compile Include="Src\AddInTree\AddIn\ExtensionPath.cs" />
<Compile Include="Src\AddInTree\AddIn\IConditionEvaluator.cs" />
<Compile Include="Src\AddInTree\AddIn\ICondition.cs" />
@ -94,7 +86,6 @@ @@ -94,7 +86,6 @@
<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" />
@ -131,9 +122,7 @@ @@ -131,9 +122,7 @@
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\ToolBarItem\ITextBoxCommand.cs" />
</ItemGroup>
<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>

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

@ -54,13 +54,6 @@ namespace ICSharpCode.Core @@ -54,13 +54,6 @@ 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()
{
@ -243,7 +236,6 @@ namespace ICSharpCode.Core @@ -243,7 +236,6 @@ namespace ICSharpCode.Core
throw new AddInLoadException("Import node requires ONE attribute.");
}
string pathName = reader.GetAttribute(0);
ExtensionPath extensionPath = addIn.GetExtensionPath(pathName);
if (!reader.IsEmptyElement) {
ExtensionPath.SetUp(extensionPath, reader, "Path");

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

@ -1,75 +0,0 @@ @@ -1,75 +0,0 @@
using System;
namespace ICSharpCode.Core
{
/// <summary>
/// Stores information about command binding loaded from add-in tree
/// </summary>
public class CommandBindingDescriptor
{
/// <summary>
/// Codon used to create this descriptor
/// </summary>
public Codon Codon {
get; private set;
}
/// <summary>
/// Full name of the command class which will be executed when this
/// binding is triggered
/// </summary>
public string Class {
get; private set;
}
/// <summary>
/// Full name of routed UI command which will trigger this binding
/// </summary>
public string Command {
get; private set;
}
/// <summary>
/// Full name of context class.
///
/// UI element in which this binding will be valid
/// </summary>
public string 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>
/// Lazy loading
///
/// If true add-in referenced assemblies are loaded when command is invoked.
/// Otherwise command can't be invoked until addin is loaded
/// </summary>
public bool Lazy {
get {
return Codon.Properties["lazy"] == "1" || Codon.Properties["lazy"] == "true";
}
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="codon">Reference to codon used to create this descriptor</param>
public CommandBindingDescriptor(Codon codon)
{
Codon = codon;
Class = Codon.Properties["class"];
Command = Codon.Properties["command"];
Context = Codon.Properties["context"];
Gestures = Codon.Properties["gestures"];
}
}
}

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

@ -1,52 +0,0 @@ @@ -1,52 +0,0 @@
using System;
namespace ICSharpCode.Core
{
/// <attribute name="command" use="required">
/// 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 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>
/// CommandBindingDescriptor object
/// </returns>
/// <summary>
/// Creates descriptor containing information about command binding
/// </summary>
public class CommandBindingDoozer : IDoozer
{
/// <see cref="IDoozer.HandleConditions" />
public bool HandleConditions {
get {
return false;
}
}
/// <see cref="IDoozer.BuildItem(object, Codon, System.Collections.ArrayList)">
/// Builds CommandBindingDescriptor
/// </see>
public object BuildItem(object caller, Codon codon, System.Collections.ArrayList subItems)
{
return new CommandBindingDescriptor(codon);
}
}
}

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

@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
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

@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
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);
}
}
}

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

@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
using System;
namespace ICSharpCode.Core
{
/// <summary>
/// Stores information about input binding loaded from add-in tree
/// </summary>
public class InputBindingDescriptor
{
/// <summary>
/// Full name of routed UI command which will be invoked when this binding is triggered
/// </summary>
public string Command {
get; private set;
}
/// <summary>
/// Full name of context class.
///
/// UI element in which this binding will be valid
/// </summary>
public string Context {
get; private set;
}
/// <summary>
/// Description of gesture which will trigger this bindin
/// </summary>
public string Gesture {
get; private set;
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="codon">Reference to codon used to create this descriptor</param>
public InputBindingDescriptor(Codon codon)
{
Command = codon.Properties["command"];
Context = codon.Properties["context"];
Gesture = codon.Properties["gesture"];
}
}
}

35
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/InputBindingDoozer.cs

@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
using System;
namespace ICSharpCode.Core
{
/// <attribute name="command" use="required">
/// Name of routed UI command which is triggered by this binding
/// </attribute>
/// <attribute name="gesture" use="required">
/// Gesture which triggers this binding
/// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/InputBindings</usage>
/// <returns>
/// InputBindingDescriptor object
/// </returns>
/// <summary>
/// Creates descriptor containing information about input binding
/// </summary>
public class InputBindingDoozer : IDoozer
{
/// <see cref="IDoozer.HandleConditions" />
public bool HandleConditions {
get {
return true;
}
}
/// <see cref="IDoozer.BuildItem(object, Codon, System.Collections.ArrayList)">
/// Builds InputBindingDescriptor
/// </see>
public object BuildItem(object caller, Codon codon, System.Collections.ArrayList subItems)
{
return new InputBindingDescriptor(codon);
}
}
}

39
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/RoutedUICommandDescriptor.cs

@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
using System;
namespace ICSharpCode.Core
{
/// <summary>
/// Stores information about routed UI command loaded from add-in tree
/// </summary>
public class RoutedUICommandDescriptor
{
private Codon codon;
/// <summary>
/// Text presented to user
/// </summary>
public string Text {
get {
return codon.Properties["text"];
}
}
/// <summary>
/// Routed command name
/// </summary>
public string Name {
get {
return codon.Properties["name"];
}
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="codon">Reference to codon used to create this descriptor</param>
public RoutedUICommandDescriptor(Codon codon)
{
this.codon = codon;
}
}
}

35
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Command/RoutedUICommandDoozer.cs

@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
using System;
namespace ICSharpCode.Core
{
/// <attribute name="name" use="required">
/// Routed UI command name
/// </attribute>
/// <attribute name="text" use="required">
/// Routed UI command displayed name
/// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/CommandBindings</usage>
/// <returns>
/// RoutedUICommandDescriptor object
/// </returns>
/// <summary>
/// Creates descriptor containing information about routed UI command
/// </summary>
public class RoutedUICommandDoozer : IDoozer
{
/// <see cref="IDoozer.HandleConditions" />
public bool HandleConditions {
get {
return false;
}
}
/// <see cref="IDoozer.BuildItem(object, Codon, System.Collections.ArrayList)">
/// Builds RoutedUICommandDescriptor
/// </see>
public object BuildItem(object caller, Codon codon, System.Collections.ArrayList subItems)
{
return new RoutedUICommandDescriptor(codon);
}
}
}

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

@ -43,7 +43,7 @@ namespace ICSharpCode.Core @@ -43,7 +43,7 @@ namespace ICSharpCode.Core
/// clicking the item.
/// </attribute>
/// <attribute name="shortcut" use="optional">
/// Shortcut that activates the command (e.g. "Ctrl+S").
/// Shortcut that activates the command (e.g. "Control|S").
/// </attribute>
/// <children childTypes="MenuItem">
/// If "type" is "Menu", the item can have sub-menuitems.

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

@ -33,10 +33,6 @@ namespace ICSharpCode.Core @@ -33,10 +33,6 @@ namespace ICSharpCode.Core
doozers.Add("MenuItem", new MenuItemDoozer());
doozers.Add("ToolbarItem", new ToolbarItemDoozer());
doozers.Add("Include", new IncludeDoozer());
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

@ -1,174 +0,0 @@ @@ -1,174 +0,0 @@
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>();
}
}
}
}

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

@ -1,185 +0,0 @@ @@ -1,185 +0,0 @@
using System;
using System.Windows;
using System.Windows.Input;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Stores details about command binding
/// </summary>
public class CommandBindingInfo
{
private UIElement contextInstance;
/// <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;
}
public CommandBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, string className, AddIn addIn, bool isLazy) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
ClassName = className;
IsLazy = isLazy;
AddIn = addIn;
this.contextInstance = contextInstance;
}
public CommandBindingInfo(string contextName, string routedCommandName, ExecutedRoutedEventHandler executedHandler, CanExecuteRoutedEventHandler canExecuteHandler) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
this.executedEventHandler = executedHandler;
this.canExecutedEventHandler = canExecuteHandler;
}
public CommandBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, ExecutedRoutedEventHandler executedHandler, CanExecuteRoutedEventHandler canExecuteHandler) {
RoutedCommandName = routedCommandName;
ContextName = contextName;
this.executedEventHandler = executedHandler;
this.canExecutedEventHandler = canExecuteHandler;
this.contextInstance = contextInstance;
}
/// <summary>
/// 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;
}
/// <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 {
if(contextInstance != null) {
return contextInstance;
} else {
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;
}
private ExecutedRoutedEventHandler executedEventHandler;
public void ExecutedEventHandler(object sender, ExecutedRoutedEventArgs e) {
if(executedEventHandler != null) {
executedEventHandler.Invoke(sender, e);
} else {
if(IsLazy && Class == null) {
AddIn.LoadRuntimeAssemblies();
var command = (ICommand)AddIn.CreateObject(ClassName);
CommandsRegistry.LoadCommand(ClassName, command);
}
if(Class != null) {
Class.Execute(e.Parameter);
}
}
}
private CanExecuteRoutedEventHandler canExecutedEventHandler;
public void CanExecuteEventHandler(object sender, CanExecuteRoutedEventArgs e) {
if(canExecutedEventHandler != null) {
canExecutedEventHandler.Invoke(sender, e);
} else {
if(IsLazy && Class == null) {
e.CanExecute = true;
} else if(Class == null) {
e.CanExecute = false;
} else {
e.CanExecute = Class.CanExecute(e.Parameter);
}
}
}
}
}

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

@ -1,568 +0,0 @@ @@ -1,568 +0,0 @@
using System;
using System.Collections.Generic;
using System.Windows.Input;
using System.Windows;
using ICSharpCode.Core;
using System.Threading;
namespace ICSharpCode.Core.Presentation
{
public delegate void BindingsUpdatedHandler();
/// <summary>
/// Global registry to store and access commands, command bindings and input bindings
/// </summary>
public static class CommandsRegistry
{
/// <summary>
/// This element is used to represent null key in dictionary
/// </summary>
private static UIElement NullUIElement = new UIElement();
/// <summary>
/// Default application context.
///
/// This should be set to the root UI element
/// </summary>
public static string DefaultContext {
get; set;
}
private static List<CommandBindingInfo> commandBindings = new List<CommandBindingInfo>();
private static List<InputBindingInfo> inputBidnings = new List<InputBindingInfo>();
private static Dictionary<string, RoutedUICommand> routedCommands = new Dictionary<string, RoutedUICommand>();
internal static Dictionary<string, System.Windows.Input.ICommand> commands = new Dictionary<string, System.Windows.Input.ICommand>();
internal static Dictionary<string, UIElement> contexts = new Dictionary<string, UIElement>();
private static Dictionary<string, Dictionary<UIElement, List<BindingsUpdatedHandler>>> commandBindingsUpdateHandlers = new Dictionary<string, Dictionary<UIElement, List<BindingsUpdatedHandler>>>();
private static Dictionary<string, Dictionary<UIElement, List<BindingsUpdatedHandler>>> inputBindingsUpdateHandlers = new Dictionary<string, Dictionary<UIElement, List<BindingsUpdatedHandler>>>();
/// <summary>
/// Get reference to routed UI command by name
/// </summary>
/// <param name="routedCommandName">Routed command name</param>
/// <returns>Routed command instance</returns>
public static RoutedUICommand GetRoutedUICommand(string routedCommandName) {
if(routedCommands.ContainsKey(routedCommandName)) {
return routedCommands[routedCommandName];
}
return null;
}
/// <summary>
/// Checks whether routed UI command registered
/// </summary>
/// <param name="routedCommandName">Routed command name</param>
/// <returns>Returns value specifting whether routed UI command is registered</returns>
public static bool IsRoutedUICommandRegistered(string routedCommandName) {
return GetRoutedUICommand(routedCommandName) != null;
}
/// <summary>
/// Register new routed command in the global registry
///
/// Routed command name should be unique in SharpDevelop scope.
/// Use "." to organize commands into groups
/// </summary>
/// <param name="routedCommandName">Routed command name</param>
/// <param name="text">Short text describing command functionality</param>
public static void RegisterRoutedUICommand(string routedCommandName, string text) {
var routedCommand = new RoutedUICommand(text, routedCommandName, typeof(CommandsRegistry));
if(!routedCommands.ContainsKey(routedCommandName)) {
routedCommands.Add(routedCommandName, routedCommand);
} else {
var test = routedCommands[routedCommandName];
throw new IndexOutOfRangeException("Routed UI command with name " + routedCommandName + " is already registered");
}
}
/// <summary>
/// Register existing routed command in the global registry
///
/// Routed command then can be accessed
/// Routed command name should be uniq in SharpDevelop scope.
/// Use "." to organize commands into groups
/// </summary>
/// <param name="routedCommandName">Existing routed command</param>
public static void RegisterRoutedUICommand(RoutedUICommand existingRoutedUICommand) {
string routedCommandName = existingRoutedUICommand.OwnerType.Name + "." + existingRoutedUICommand.Name;
if(!routedCommands.ContainsKey(routedCommandName)) {
routedCommands.Add(existingRoutedUICommand.OwnerType.Name + "." + existingRoutedUICommand.Name, existingRoutedUICommand);
} else {
throw new IndexOutOfRangeException("Routed UI command with name " + routedCommandName + " is already registered");
}
}
/// <summary>
/// Remove routed command from global registry
/// </summary>
/// <param name="routedCommandName">Routed command name</param>
public static void UnregisterRoutedUICommand(string routedCommandName) {
if(routedCommands.ContainsKey(routedCommandName)) {
routedCommands.Remove(routedCommandName);
}
}
/// <summary>
/// Register input binding in context
///
/// Registering input binding means that when specified gesture is met in specified
/// context routed command is invoked
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Context class instance. If instance is provided this input binding only applies to provided UI element</param>
/// <param name="routedCommandName">Routed UI command invoked on gesture run</param>
/// <param name="gesture">Gesture</param>
public static void RegisterInputBinding(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
var inputBindingInfo = new InputBindingInfo(contextName, contextInstance, routedCommandName, gesture);
inputBidnings.Add(inputBindingInfo);
}
/// <summary>
/// Remove input bindings which satisfy provided arguments
///
/// Null arguments are ignored
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Unregister binding assigned to specific context instance</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="gesture">Gesture</param>
public static void UnregisterInputBindings(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
for(int i = inputBidnings.Count - 1; i >= 0; i--) {
if((contextName == null || inputBidnings[i].ContextName == contextName)
&& (contextInstance == null || inputBidnings[i].Context == null || inputBidnings[i].Context == contextInstance)
&& (routedCommandName == null || inputBidnings[i].RoutedCommandName == routedCommandName)
&& (gesture == null || inputBidnings[i].Gesture == gesture)) {
inputBidnings.RemoveAt(i);
}
}
}
/// <summary>
/// Register delegate which will be invoked on change in input bindings in specified context
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Register update handler which will trigger only if input bindings registered for this object where triggered</param>
/// <param name="handler">Update handler delegate</param>
public static void RegisterInputBindingUpdateHandler(string contextName, UIElement contextInstance, BindingsUpdatedHandler handler) {
if(contextInstance == null) {
contextInstance = NullUIElement;
}
if(!inputBindingsUpdateHandlers.ContainsKey(contextName)) {
inputBindingsUpdateHandlers.Add(contextName, new Dictionary<UIElement, List<BindingsUpdatedHandler>>());
}
if(!inputBindingsUpdateHandlers[contextName].ContainsKey(contextInstance)) {
inputBindingsUpdateHandlers[contextName].Add(contextInstance, new List<BindingsUpdatedHandler>());
}
inputBindingsUpdateHandlers[contextName][contextInstance].Add(handler);
}
/// <summary>
/// Remove input bindings update handler
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Unregister update handler which was triggered only if input bindings registered for specific instance where updated</param>
/// <param name="handler">Update handler delegate</param>
public static void UnregisterInputBindingUpdateHandler(string contextName, UIElement contextInstance, BindingsUpdatedHandler handler) {
if(contextInstance == null) {
contextInstance = NullUIElement;
}
if(!inputBindingsUpdateHandlers.ContainsKey(contextName)) {
if(!inputBindingsUpdateHandlers[contextName].ContainsKey(contextInstance)) {
for(int i = inputBindingsUpdateHandlers[contextName][contextInstance].Count - 1; i >= 0; i++) {
if(inputBindingsUpdateHandlers[contextName][contextInstance][i] == handler) {
inputBindingsUpdateHandlers[contextName][contextInstance].RemoveAt(i);
}
}
}
}
}
/// <summary>
/// Invoke registered input bindings update handlers registered in specified context
/// </summary>
/// <param name="contextName">Context class full name</param>
public static void InvokeInputBindingUpdateHandlers(string contextName, UIElement contextInstance) {
if(contextInstance == null) {
contextInstance = NullUIElement;
}
if(contextName != null) {
if(inputBindingsUpdateHandlers.ContainsKey(contextName)) {
if(contextInstance == NullUIElement) {
foreach(var instanceHandlers in inputBindingsUpdateHandlers[contextName]) {
foreach(var handler in instanceHandlers.Value) {
if(handler != null) {
((BindingsUpdatedHandler)handler).Invoke();
}
}
}
}
} else if(inputBindingsUpdateHandlers[contextName].ContainsKey(contextInstance)) {
foreach(var handler in inputBindingsUpdateHandlers[contextName][contextInstance]) {
if(handler != null) {
((BindingsUpdatedHandler)handler).Invoke();
}
}
}
} else {
foreach(var contextHandlers in inputBindingsUpdateHandlers) {
foreach(var instanceHandlers in contextHandlers.Value) {
foreach(var handler in instanceHandlers.Value) {
if(handler != null) {
((BindingsUpdatedHandler)handler).Invoke();
}
}
}
}
}
}
/// <summary>
/// Remove all managed input bindings from input bindings collection
/// </summary>
/// <param name="inputBindingCollection"></param>
public static void RemoveManagedInputBindings(InputBindingCollection inputBindingCollection) {
for(int i = inputBindingCollection.Count - 1; i >= 0; i--) {
if(inputBindingCollection[i] is ManagedInputBinding) {
inputBindingCollection.RemoveAt(i);
}
}
}
/// <summary>
/// Register command binding
///
/// Registering command binding means that when provided routed command is invoked
/// in specified context event is routed to specified command (implementing ICommand class)
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Register update handler which is triggered only if input bindings registered for specific instance are updated</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="className">Command full name to which invokation event is routed</param>
/// <param name="addIn">Add-in in which hosts the command</param>
/// <param name="isLazy">Load add-in referenced assemblies on command invocation</param>
public static void RegisterCommandBinding(string contextName, UIElement contextInstance, string routedCommandName, string className, AddIn addIn, bool isLazy) {
var commandBindingInfo = new CommandBindingInfo(contextName, contextInstance, routedCommandName, className, addIn, isLazy);
commandBindings.Add(commandBindingInfo);
}
/// <summary>
/// Register command binding which when triggered provided delegates are invoked
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Register update handler which is triggered only if input bindings registered for specific instance are updated</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="executedEventHandler">Delegate which is called when binding is triggered</param>
/// <param name="canExecuteEventHandler">Delegate which is called to check whether executedEventHandler can be invoked</param>
public static void RegisterCommandBinding(string contextName, UIElement contextInstance, string routedCommandName, ExecutedRoutedEventHandler executedEventHandler, CanExecuteRoutedEventHandler canExecuteEventHandler) {
var commandBindingInfo = new CommandBindingInfo(contextName, contextInstance, routedCommandName, executedEventHandler, canExecuteEventHandler);
commandBindings.Add(commandBindingInfo);
}
/// <summary>
/// Remove all command bindings which satisfy provided parameters
///
/// Null arguments are ignored
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Unregister update handler which was triggered only if command bindings registered for specific instance where updated</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="className">Command full name to which invokation event is routed</param>
public static void UnregisterCommandBindings(string contextName, UIElement contextInstance, string routedCommandName, string className) {
for(int i = commandBindings.Count - 1; i >= 0; i--) {
if((contextName == null || commandBindings[i].ContextName == contextName)
&& (contextInstance == null || commandBindings[i].Context == null || commandBindings[i].Context == contextInstance)
&& (routedCommandName == null || commandBindings[i].RoutedCommandName == routedCommandName)
&& (className == null || commandBindings[i].ClassName == className)) {
inputBidnings.RemoveAt(i);
}
}
}
/// <summary>
/// Register delegate which will be invoked on any chage in command bindings of specified context
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Register update handler which is triggered only if input bindings registered for specific instance are updated</param>
/// <param name="handler">Update handler delegate</param>
public static void RegisterCommandBindingsUpdateHandler(string contextName, UIElement contextInstance, BindingsUpdatedHandler handler) {
if(contextInstance == null) {
contextInstance = NullUIElement;
}
if(!commandBindingsUpdateHandlers.ContainsKey(contextName)) {
commandBindingsUpdateHandlers.Add(contextName, new Dictionary<UIElement, List<BindingsUpdatedHandler>>());
}
if(!commandBindingsUpdateHandlers[contextName].ContainsKey(contextInstance)) {
commandBindingsUpdateHandlers[contextName].Add(contextInstance, new List<BindingsUpdatedHandler>());
}
commandBindingsUpdateHandlers[contextName][contextInstance].Add(handler);
}
/// <summary>
/// Remove handler command bindings update handler
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Unregister update handler which was triggered only if input bindings registered for specific instance were updated</param>
/// <param name="handler">Update handler delegate</param>
public static void UnregisterCommandBindingsUpdateHandler(string contextName, UIElement contextInstance, BindingsUpdatedHandler handler) {
if(contextInstance == null) {
contextInstance = NullUIElement;
}
if(commandBindingsUpdateHandlers.ContainsKey(contextName)) {
if(commandBindingsUpdateHandlers[contextName].ContainsKey(contextInstance)) {
for(int i = commandBindingsUpdateHandlers[contextName][contextInstance].Count - 1; i >= 0; i--) {
if(commandBindingsUpdateHandlers[contextName][contextInstance][i] == handler) {
commandBindingsUpdateHandlers[contextName][contextInstance].RemoveAt(i);
}
}
}
}
}
/// <summary>
/// Invoke registered command bindings update handlers registered in specified context
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Invoke update handlers which handle update only in specifyc context</param>
public static void InvokeCommandBindingUpdateHandlers(string contextName, UIElement contextInstance) {
if(contextInstance == null) {
contextInstance = NullUIElement;
}
if(contextName != null) {
if(commandBindingsUpdateHandlers.ContainsKey(contextName)) {
if(contextInstance == NullUIElement) {
foreach(var instanceHandlers in commandBindingsUpdateHandlers[contextName]) {
foreach(var handler in instanceHandlers.Value) {
if(handler != null) {
((BindingsUpdatedHandler)handler).Invoke();
}
}
}
} else if(commandBindingsUpdateHandlers[contextName].ContainsKey(contextInstance)) {
foreach(var handler in commandBindingsUpdateHandlers[contextName][contextInstance]) {
if(handler != null) {
((BindingsUpdatedHandler)handler).Invoke();
}
}
}
}
} else {
foreach(var contextHandlers in commandBindingsUpdateHandlers) {
foreach(var instanceHandlers in contextHandlers.Value) {
foreach(var handler in instanceHandlers.Value) {
if(handler != null) {
((BindingsUpdatedHandler)handler).Invoke();
}
}
}
}
}
}
/// <summary>
/// Remove all managed command bindungs from command bindings collection
/// </summary>
/// <param name="commandBindingsCollection"></param>
public static void RemoveManagedCommandBindings(CommandBindingCollection commandBindingsCollection) {
for(int i = commandBindingsCollection.Count - 1; i >= 0; i--) {
if(commandBindingsCollection[i] is ManagedCommandBinding) {
commandBindingsCollection.RemoveAt(i);
}
}
}
/// <summary>
/// Load all registered commands in addin
/// </summary>
/// <param name="addIn">Addin</param>
public static void LoadAddinCommands(AddIn addIn) {
foreach(var binding in commandBindings) {
if(binding.AddIn != addIn) continue;
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);
}
}
}
/// <summary>
/// Load command
/// </summary>
/// <param name="commandName">Command name</param>
/// <param name="command">Command instance</param>
public static void LoadCommand(string commandName, object command) {
var wpfCommand = command as System.Windows.Input.ICommand;
if(wpfCommand == null) {
wpfCommand = new WpfCommandWrapper((ICSharpCode.Core.ICommand)command);
}
if(!commands.ContainsKey(commandName)) {
commands.Add(commandName, wpfCommand);
}
}
/// <summary>
/// Load context
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="context">Context class instance</param>
public static void LoadContext(string contextName, UIElement context) {
contexts[contextName] = context;
}
/// <summary>
/// Get list of all command bindings which satisfy provided parameters
///
/// Null arguments are ignored
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Get command bindings assigned only to specific context</param>
/// <param name="routedCommandName">Context class full name</param>
/// <param name="className">Context class full name</param>
/// <returns>Collection of managed command bindings</returns>
public static CommandBindingCollection GetCommandBindings(string contextName, UIElement contextInstance, string routedCommandName, string className) {
var bindings = new CommandBindingCollection();
foreach(var binding in commandBindings) {
if((contextName == null || binding.ContextName == contextName)
&& (contextInstance == null || binding.Context == null || binding.Context == contextInstance)
&& (routedCommandName == null || binding.RoutedCommandName == routedCommandName)
&& (className == null || binding.ClassName == className)) {
var managedCommandBinding = new ManagedCommandBinding(binding.RoutedCommand);
managedCommandBinding.CanExecute += binding.CanExecuteEventHandler;
managedCommandBinding.Executed += binding.ExecutedEventHandler;
bindings.Add(managedCommandBinding);
}
}
return bindings;
}
/// <summary>
/// Get list of all input bindings which satisfy provided parameters
///
/// Null arguments are ignored
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Get input bindings assigned only to specific context</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="gesture">Gesture</param>
public static InputBindingCollection GetInputBindings(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
var bindings = new InputBindingCollection();
foreach(var binding in inputBidnings) {
if((contextName == null || binding.ContextName == contextName)
&& (contextInstance == null || binding.Context == null || binding.Context == contextInstance)
&& (routedCommandName == null || binding.RoutedCommandName == routedCommandName)
&& (gesture == null || binding.Gesture == gesture)) {
bindings.Add(new ManagedInputBinding(binding.RoutedCommand, binding.Gesture));
}
}
return bindings;
}
/// <summary>
/// Get list of input gestures from all input bindings which satisfy provided parameters
///
/// Null arguments are ignored
/// </summary>
/// <param name="contextName">Context class full name</param>
/// <param name="contextInstance">Get gestures assigned only to specific context</param>
/// <param name="routedCommandName">Routed UI command name</param>
/// <param name="gesture">Gesture</param>
public static InputGestureCollection GetInputGestures(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
var bindings = GetInputBindings(contextName, contextInstance, routedCommandName, gesture);
var gestures = new InputGestureCollection();
foreach(InputBinding binding in bindings) {
gestures.Add(binding.Gesture);
}
return gestures;
}
/// <summary>
/// Create default BindingUpdateHandler which will update command bindings in specified context
/// </summary>
/// <param name="bindingsCollection">Collection which should be updated with latest bindings</param>
/// <param name="contextName">Context name which was used to register command bindings</param>
/// <param name="contextInstance">Reference to instance which is used to find command bindings registered in specific context instance</param>
/// <returns>Bindings updated handler</returns>
public static BindingsUpdatedHandler CreateCommandBindingUpdateHandler(CommandBindingCollection bindingsCollection, string contextName, UIElement contextInstance) {
return new CommonCommandBindingUpdateDelegate(bindingsCollection, contextName, contextInstance).UpdateCommandBinding;
}
/// <summary>
/// Create default BindingUpdateHandler which will update input bindings in specified context
/// </summary>
/// <param name="bindingsCollection">Collection which should be updated with latest bindings</param>
/// <param name="contextName">Context name which was used to register input bindings</param>
/// <param name="contextInstance">Reference to instance which is used to find command bindings registered in specific context instance</param>
/// <returns>Bindings updated handler</returns>
public static BindingsUpdatedHandler CreateInputBindingUpdateHandler(InputBindingCollection bindingsCollection, string contextName, UIElement contextInstance) {
return new CommonInputBindingUpdateDelegate(bindingsCollection, contextName, contextInstance).UpdateInputBinding;
}
class CommonCommandBindingUpdateDelegate
{
CommandBindingCollection bindingsCollection;
string contextName;
UIElement contextInstance;
public CommonCommandBindingUpdateDelegate(CommandBindingCollection bindingsCollection, string contextName, UIElement contextInstance) {
this.bindingsCollection = bindingsCollection;
this.contextName = contextName;
this.contextInstance = contextInstance;
}
public void UpdateCommandBinding() {
var newBindings = CommandsRegistry.GetCommandBindings(contextName, contextInstance, null, null);
CommandsRegistry.RemoveManagedCommandBindings(bindingsCollection);
bindingsCollection.AddRange(newBindings);
}
}
class CommonInputBindingUpdateDelegate
{
InputBindingCollection bindingsCollection;
string contextName;
UIElement contextInstance;
public CommonInputBindingUpdateDelegate(InputBindingCollection bindingsCollection, string contextName, UIElement contextInstance) {
this.bindingsCollection = bindingsCollection;
this.contextName = contextName;
this.contextInstance = contextInstance;
}
public void UpdateInputBinding() {
var newBindings = CommandsRegistry.GetInputBindings(contextName, contextInstance, null, null);
CommandsRegistry.RemoveManagedInputBindings(bindingsCollection);
bindingsCollection.AddRange(newBindings);
}
}
}
}

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

@ -1,72 +0,0 @@ @@ -1,72 +0,0 @@
using System;
using System.Reflection;
using System.Windows.Input;
using System.Windows.Documents;
using ICSharpCode.Core;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Description of CommandsService.
/// </summary>
public static class CommandsService
{
public static void RegisterRoutedCommands(Type type) {
var typeProperties = type.GetProperties(BindingFlags.Static | BindingFlags.Public);
foreach(var property in typeProperties) {
var command = (RoutedUICommand)property.GetValue(null, null);
CommandsRegistry.RegisterRoutedUICommand(command);
}
}
public static void RegisterBuiltInRoutedUICommands() {
RegisterRoutedCommands(typeof(ApplicationCommands));
RegisterRoutedCommands(typeof(ComponentCommands));
RegisterRoutedCommands(typeof(MediaCommands));
RegisterRoutedCommands(typeof(NavigationCommands));
RegisterRoutedCommands(typeof(EditingCommands));
}
public static void RegisterRoutedUICommands(object caller, string path)
{
var descriptors = AddInTree.BuildItems<RoutedUICommandDescriptor>(path, caller, false);
foreach(var desc in descriptors) {
CommandsRegistry.RegisterRoutedUICommand(desc.Name, desc.Text);
}
}
public static void RegisterCommandBindings(object caller, string path)
{
var descriptors = AddInTree.BuildItems<CommandBindingDescriptor>(path, caller, false);
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, null, 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, null, desc.Command, gesture);
}
}
}
}
public static void RegisterInputBindings(object caller, string path)
{
var descriptors = AddInTree.BuildItems<InputBindingDescriptor>(path, caller, false);
foreach(var desc in descriptors) {
var contextName = !string.IsNullOrEmpty(desc.Context) ? desc.Context : CommandsRegistry.DefaultContext;
var gesture = (KeyGesture)new KeyGestureConverter().ConvertFromInvariantString(desc.Gesture);
CommandsRegistry.RegisterInputBinding(contextName, null, desc.Command, gesture);
}
}
}
}

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

@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
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);
}
}
}

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

@ -1,90 +0,0 @@ @@ -1,90 +0,0 @@
using System;
using System.Windows;
using System.Windows.Input;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Stores details about input binding
/// </summary>
public class InputBindingInfo
{
private UIElement contextInstance;
/// <summary>
/// Constructor
/// </summary>
/// <param name="contextName">Context full name</param>
/// <param name="routedCommandName">Name of routed UI command which is triggered by this binding</param>
/// <param name="gesture">Gesture which triggers this binding</param>
public InputBindingInfo(string contextName, string routedCommandName, InputGesture gesture) {
ContextName = contextName;
RoutedCommandName = routedCommandName;
Gesture = gesture;
}
public InputBindingInfo(string contextName, UIElement contextInstance, string routedCommandName, InputGesture gesture) {
ContextName = contextName;
RoutedCommandName = routedCommandName;
Gesture = gesture;
this.contextInstance = contextInstance;
}
/// <summary>
/// Context class full name
///
/// Described binding will be valid in this context
/// </summary>
public string ContextName {
get; set;
}
/// <summary>
/// Context class instance
///
/// Described binding will be valid in this context
/// </summary>
public UIElement Context {
get {
if(contextInstance != null) {
return contextInstance;
} else {
UIElement context;
CommandsRegistry.contexts.TryGetValue(ContextName, out context);
return context;
}
}
}
/// <summary>
/// Routed command name
///
/// Described binding triggers this routed command
/// </summary>
/// <seealso cref="RoutedCommand"></seealso>
public string RoutedCommandName {
get; set;
}
/// <summary>
/// Routed command instance
///
/// Described binding triggers this routed command
/// </summary>
/// <seealso cref="RoutedCommandName"></seealso>
public RoutedUICommand RoutedCommand {
get {
return CommandsRegistry.GetRoutedUICommand(RoutedCommandName);
}
}
/// <summary>
/// Gesture which triggers this binding
/// </summary>
public InputGesture Gesture {
get; set;
}
}
}

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

@ -1,103 +0,0 @@ @@ -1,103 +0,0 @@
using System;
using System.Windows.Input;
using System.ComponentModel;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Converts input gesture from text representation to object and vice versa
///
/// Will be able to convert mouse and key gestures and handle gestures collections
/// </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;
}
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;
}
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, @"\s*\|\s*");
foreach(var serializedGesture in serializedGestures) {
if(string.IsNullOrEmpty(serializedGesture)) continue;
gestures.Add((InputGesture)new KeyGestureConverter().ConvertFromString(context, culture, serializedGesture));
}
return gestures;
}
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();
var gesturesCollection = (InputGestureCollection)value;
foreach(var gesture in gesturesCollection) {
string serializedGesture;
if (gesture is KeyGesture) {
serializedGesture = (string)new KeyGestureConverter().ConvertTo(context, culture, gesture, typeof(string));
} else if (gesture is MouseGesture) {
serializedGesture = (string)new KeyGestureConverter().ConvertTo(context, culture, gesture, typeof(string));
} else {
continue;
}
sb.AppendFormat("{0} | ", serializedGesture);
}
return sb.Length >= 3 ? sb.ToString(0, sb.Length - 3) : sb.ToString();
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
}

35
src/Main/ICSharpCode.Core.Presentation/CommandsService/ManagedCommandBinding.cs

@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
using System;
using System.Windows.Input;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// ManagedCommandBinding is used to distinguish command bindings managed
/// by CommandsRegistry from other command bindings not managed by CommandsRegistry
///
/// If command binding is not managed then CommandsRegistry ignores it when
/// performing any action
/// </summary>
public class ManagedCommandBinding : System.Windows.Input.CommandBinding
{
/// <see cref="System.Windows.Input.CommandBinding()" />
public ManagedCommandBinding()
: base()
{ }
/// <see cref="System.Windows.Input.CommandBinding(System.Windows.Input.ICommand)" />
public ManagedCommandBinding(System.Windows.Input.ICommand command)
: base(command)
{ }
/// <see cref="System.Windows.Input.CommandBinding(System.Windows.Input.ICommand, System.Windows.Input.ExecutedRoutedEventHandler)" />
public ManagedCommandBinding(System.Windows.Input.ICommand command, System.Windows.Input.ExecutedRoutedEventHandler executed)
: base(command, executed)
{ }
/// <see cref="System.Windows.Input.CommandBinding(System.Windows.Input.ICommand, System.Windows.Input.ExecutedRoutedEventHandler, System.Windows.Input.CanExecuteRoutedEventHandler)" />
public ManagedCommandBinding(System.Windows.Input.ICommand command, System.Windows.Input.ExecutedRoutedEventHandler executed, System.Windows.Input.CanExecuteRoutedEventHandler canExecute)
: base(command, executed, canExecute)
{ }
}
}

24
src/Main/ICSharpCode.Core.Presentation/CommandsService/ManagedInputBinding.cs

@ -1,24 +0,0 @@ @@ -1,24 +0,0 @@
using System;
using System.Windows.Input;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// ManagedKeyBinding is used to distinguish input bindings managed
/// by CommandsRegistry from other input bindings not managed by CommandsRegistry.
///
/// If input binding is not managed then CommansRegistry ignores it when
/// performing any action
/// </summary>
public class ManagedInputBinding : System.Windows.Input.InputBinding
{
/// <see cref="System.Windows.Input.InputBinding()"></see>
public ManagedInputBinding() : base()
{ }
/// <see cref="System.Windows.Input.InputBinding(System.Windows.Input.ICommand, System.Windows.Input.InputGesture)"></see>
public ManagedInputBinding(System.Windows.Input.ICommand command, System.Windows.Input.InputGesture gesture)
: base(command, gesture)
{ }
}
}

44
src/Main/ICSharpCode.Core.Presentation/CommandsService/WpfCommandWrapper.cs

@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
using System;
using System.Windows.Input;
using ICSharpCode.Core;
namespace ICSharpCode.Core.Presentation
{
/// <summary>
/// Wraps SharpDevelop's native command inside WPF command
/// </summary>
public class WpfCommandWrapper : System.Windows.Input.ICommand
{
ICommand command;
/// <summary>
/// Constructor
/// </summary>
/// <param name="command">SharpDevelop native command</param>
public WpfCommandWrapper(ICommand command)
{
this.command = command;
}
/// <see cref="System.Windows.Input.ICommand.CanExecuteChanged">
/// Not used because SharpDevelop's native command implementation
/// doesn't support it
/// </see>
public event EventHandler CanExecuteChanged {
add { }
remove { }
}
/// <see cref="System.Windows.Input.ICommand.Execute(object)" />
public void Execute(object parameter)
{
command.Run();
}
/// <see cref="System.Windows.Input.ICommand.CanExecute(object)" />
public bool CanExecute(object parameter)
{
return true;
}
}
}

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

@ -67,15 +67,6 @@ @@ -67,15 +67,6 @@
<Compile Include="..\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<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" />
<Compile Include="CommandsService\ManagedInputBinding.cs" />
<Compile Include="CommandsService\WpfCommandWrapper.cs" />
<Compile Include="ConditionalSeparator.cs" />
<Compile Include="DropDownButton.cs" />
<Compile Include="GetBitmapExtension.cs" />
@ -104,7 +95,6 @@ @@ -104,7 +95,6 @@
<Private>False</Private>
</ProjectReference>
<Folder Include="Menu" />
<Folder Include="CommandsService" />
<Folder Include="themes" />
<Folder Include="ToolBar" />
<Page Include="themes\Aero.NormalColor.xaml" />

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

@ -118,29 +118,13 @@ namespace ICSharpCode.Core.Presentation @@ -118,29 +118,13 @@ namespace ICSharpCode.Core.Presentation
{
public MenuCommand(UIElement inputBindingOwner, Codon codon, object caller, bool createCommand) : base(codon, caller)
{
if(!string.IsNullOrEmpty(codon.Properties["command"])) {
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, null, routedCommand.Name, null);
var gesturesString = (string)new InputGestureCollectionConverter().ConvertToInvariantString(gestures);
this.InputGestureText = gesturesString;
}
} else {
this.Command = CommandWrapper.GetCommand(codon, caller, createCommand);
if (!string.IsNullOrEmpty(codon.Properties["shortcut"])) {
KeyGesture kg = MenuService.ParseShortcut(codon.Properties["shortcut"]);
if (inputBindingOwner != null) {
inputBindingOwner.InputBindings.Add(new InputBinding(this.Command, kg));
}
this.InputGestureText = kg.GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture);
this.Command = CommandWrapper.GetCommand(codon, caller, createCommand);
if (!string.IsNullOrEmpty(codon.Properties["shortcut"])) {
KeyGesture kg = MenuService.ParseShortcut(codon.Properties["shortcut"]);
if (inputBindingOwner != null) {
inputBindingOwner.InputBindings.Add(new InputBinding(this.Command, kg));
}
this.InputGestureText = kg.GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture);
}
}
}

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

@ -26,12 +26,7 @@ namespace ICSharpCode.Core.Presentation @@ -26,12 +26,7 @@ namespace ICSharpCode.Core.Presentation
this.codon = codon;
this.caller = caller;
if(!string.IsNullOrEmpty(codon.Properties["command"])) {
this.Command = CommandsRegistry.GetRoutedUICommand(codon.Properties["command"]);
} else {
this.Command = CommandWrapper.GetCommand(codon, caller, createCommand);
}
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

@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
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

@ -1,114 +0,0 @@ @@ -1,114 +0,0 @@
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,8 +50,6 @@ @@ -50,8 +50,6 @@
<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" />
@ -87,7 +85,6 @@ @@ -87,7 +85,6 @@
</ProjectReference>
<Folder Include="Menu" />
<Folder Include="MessageService" />
<Folder Include="CommandsService" />
<Folder Include="ToolBar" />
<Folder Include="Util" />
</ItemGroup>

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

@ -8,7 +8,6 @@ @@ -8,7 +8,6 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace ICSharpCode.Core.WinForms
{
@ -64,6 +63,22 @@ namespace ICSharpCode.Core.WinForms @@ -64,6 +63,22 @@ namespace ICSharpCode.Core.WinForms
}
public static Keys ParseShortcut(string shortcutString)
{
Keys shortCut = Keys.None;
if (shortcutString.Length > 0) {
try {
foreach (string key in shortcutString.Split('|')) {
shortCut |= (System.Windows.Forms.Keys)Enum.Parse(typeof(System.Windows.Forms.Keys), key);
}
} 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;
@ -75,15 +90,8 @@ namespace ICSharpCode.Core.WinForms @@ -75,15 +90,8 @@ 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")) {
GesturePlaceHolderRegistry.InvokeUpdateHandlers(codon.Properties["class"]);
ShortcutKeys = ParseShortcut(codon.Properties["shortcut"]);
}
}

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

Loading…
Cancel
Save