From e72ab0ae58b23d83ed4a73e4f60443222368c6be Mon Sep 17 00:00:00 2001 From: Sergej Andrejev Date: Wed, 22 Jul 2009 07:48:25 +0000 Subject: [PATCH] Unit test & minor fixes to update handlers git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/shortcuts@4505 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- SharpDevelop.Tests.sln | 394 +++++++++--------- .../Project/Gui/SearchAndReplaceDialog.cs | 3 +- .../ShortcutsManagementOptionsPanel.xaml.cs | 2 +- .../ICSharpCode.AvalonEdit.Tests.csproj | 10 +- .../WeakReferenceTests.cs | 10 + .../Editing/CaretNavigationCommandHandler.cs | 8 +- .../Editing/EditingCommandHandler.cs | 4 + .../Editing/TextAreaDefaultInputHandlers.cs | 18 +- .../Project/Src/Commands/MenuItemBuilders.cs | 4 +- .../CommandsService/BindingGroup.cs | 4 +- .../CommandsService/CommandBindingInfo.cs | 46 +- .../CommandsService/CommandManager.cs | 326 ++++++++------- .../CommandsService/IBindingInfo.cs | 58 ++- .../CommandsService/InputBindingInfo.cs | 97 ++++- .../Menu/MenuCommand.cs | 9 +- .../Test/BindingInfoTemplateTests.cs | 115 +++++ .../Test/CommandManagerTests.cs | 133 ++++++ ...ICSharpCode.Core.Presentation.Tests.csproj | 2 + 18 files changed, 843 insertions(+), 400 deletions(-) create mode 100644 src/Main/ICSharpCode.Core.Presentation/Test/BindingInfoTemplateTests.cs create mode 100644 src/Main/ICSharpCode.Core.Presentation/Test/CommandManagerTests.cs diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln index 79b5b6de6df..56ccf4014b7 100644 --- a/SharpDevelop.Tests.sln +++ b/SharpDevelop.Tests.sln @@ -6,110 +6,110 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-5 ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation.Tests", "src\Main\ICSharpCode.Core.Presentation\Test\ICSharpCode.Core.Presentation.Tests.csproj", "{FFA7988E-7348-4669-9E9D-27E629C873A2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "src\Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "src\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "src\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "src\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "src\Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "src\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "src\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "src\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "src\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "src\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "src\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "src\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "src\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "src\Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "src\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "src\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "src\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "src\Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation.Tests", "src\Main\ICSharpCode.Core.Presentation\Test\ICSharpCode.Core.Presentation.Tests.csproj", "{FFA7988E-7348-4669-9E9D-27E629C873A2}" +EndProject Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "src\Tools\Tools.build", "{3DF4060F-5EE0-41CF-8096-F27355FD5511}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{2A232EF1-EB95-41C6-B63A-C106E0C95D3C}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "src\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "src\Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NRefactory", "NRefactory", "{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}" + ProjectSection(SolutionItems) = postProject + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "src\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "src\Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "src\Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryASTGenerator", "src\Libraries\NRefactory\NRefactoryASTGenerator\NRefactoryASTGenerator.csproj", "{B22522AA-B5BF-4A58-AC6D-D4B45805521F}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "src\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "src\Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NRefactory", "NRefactory", "{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "src\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryASTGenerator", "src\Libraries\NRefactory\NRefactoryASTGenerator\NRefactoryASTGenerator.csproj", "{B22522AA-B5BF-4A58-AC6D-D4B45805521F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "src\Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "src\Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "src\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "src\Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "src\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -118,132 +118,110 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{393278 ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "src\AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "src\AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "src\AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "{CE498514-D12D-4B6E-AE0E-FEC29BD43748}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{97B3B514-AB0E-4FE1-89DE-8A945F5112AE}" + ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "src\AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "src\AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "src\AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "src\AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "src\AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{D599885D-E161-4CCE-A66E-7A40C8C4F4CC}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{CA76F702-5B4E-4918-B8D8-7FF8382434FF}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "src\AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "src\AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "src\AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "src\AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "src\AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0773ED53-08E2-4495-A3BE-CA0B5D413C15}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "src\AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "src\AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "src\AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "src\AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6E59AF58-F635-459A-9A35-C9AC41C00339}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "src\AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "src\AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{E1B288A2-08EE-4318-8BBB-8AB72C69E33E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "src\AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "src\AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "src\AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "src\AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "src\AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "src\AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "src\AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{BFA3BF26-33BD-4A65-B84D-C7F30D131668}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "src\AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "src\AddIns\Misc\Debugger\Debugger.Tests\Project\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "src\AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "src\AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "src\AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -252,37 +230,39 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9 ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "src\AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShortcutsManagement", "src\AddIns\Misc\ShortcutsManagement\ShortcutsManagement\ShortcutsManagement.csproj", "{745869FF-80E9-4589-A366-E775D2103843}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "src\AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "src\AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "src\AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "src\AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "src\AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "src\AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "src\AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "src\AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "src\AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -292,150 +272,170 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", " {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "src\AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "src\AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "src\AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "src\AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "src\AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "src\AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "src\AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "src\AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "src\AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "src\AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShortcutsManagement", "src\AddIns\Misc\ShortcutsManagement\ShortcutsManagement\ShortcutsManagement.csproj", "{745869FF-80E9-4589-A366-E775D2103843}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}" + ProjectSection(SolutionItems) = postProject + EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{BFA3BF26-33BD-4A65-B84D-C7F30D131668}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "src\AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "src\AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "src\AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "src\AddIns\Misc\Debugger\Debugger.Tests\Project\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "src\AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}" - ProjectSection(SolutionItems) = postProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "src\AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "src\AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "src\AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "src\AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "src\AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "src\AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "src\AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "src\AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "src\AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{E1B288A2-08EE-4318-8BBB-8AB72C69E33E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "src\AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "src\AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6E59AF58-F635-459A-9A35-C9AC41C00339}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0773ED53-08E2-4495-A3BE-CA0B5D413C15}" + ProjectSection(SolutionItems) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{CA76F702-5B4E-4918-B8D8-7FF8382434FF}" - ProjectSection(SolutionItems) = postProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "src\AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "src\AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "src\AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{D599885D-E161-4CCE-A66E-7A40C8C4F4CC}" + ProjectSection(SolutionItems) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "src\AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "src\AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "src\AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "src\AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{97B3B514-AB0E-4FE1-89DE-8A945F5112AE}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "src\AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "src\AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "src\AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "src\AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "src\AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "src\AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "src\AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "{CE498514-D12D-4B6E-AE0E-FEC29BD43748}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "src\AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -768,95 +768,95 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {7DB80259-24D4-46C3-A024-53FF1987733D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {4980B743-B32F-4aba-AABD-45E2CAD3568D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {8035765F-D51F-4A0C-A746-2FD100E19419} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {1152B71B-3C05-4598-B20D-823B5D40559E} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {FFA7988E-7348-4669-9E9D-27E629C873A2} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {E73BB233-D88B-44A7-A98F-D71EE158381D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {1152B71B-3C05-4598-B20D-823B5D40559E} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {8035765F-D51F-4A0C-A746-2FD100E19419} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {4980B743-B32F-4aba-AABD-45E2CAD3568D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {7DB80259-24D4-46C3-A024-53FF1987733D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {870115DD-960A-4406-A6B9-600BCDC36A03} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} - {B22522AA-B5BF-4A58-AC6D-D4B45805521F} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} + {E73BB233-D88B-44A7-A98F-D71EE158381D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} - {E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {B22522AA-B5BF-4A58-AC6D-D4B45805521F} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} + {870115DD-960A-4406-A6B9-600BCDC36A03} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} {F355E45F-F54F-4B42-8916-9A633A392789} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {F355E45F-F54F-4B42-8916-9A633A392789} - {1F261725-6318-4434-A1B1-6C70CE4CD324} = {F355E45F-F54F-4B42-8916-9A633A392789} - {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {F355E45F-F54F-4B42-8916-9A633A392789} - {08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {F355E45F-F54F-4B42-8916-9A633A392789} - {CE498514-D12D-4B6E-AE0E-FEC29BD43748} = {F355E45F-F54F-4B42-8916-9A633A392789} - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {F355E45F-F54F-4B42-8916-9A633A392789} - {000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} - {E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} - {869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} - {BFA3BF26-33BD-4A65-B84D-C7F30D131668} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {DCA2703D-250A-463E-A68A-07ED105AE6BD} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {533F4684-DBA6-4518-B005-C84F22A2DD57} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {0773ED53-08E2-4495-A3BE-CA0B5D413C15} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} - {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} - {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {08F772A1-F0BE-433E-8B37-F6522953DB05} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {745869FF-80E9-4589-A366-E775D2103843} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {8AA421C8-D7AF-4957-9F43-5135328ACB24} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {918487B7-2153-4618-BBB3-344DBDDF2A2A} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {3CA90546-3B4C-4663-9445-C4E9371750A7} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {A569DCC1-C608-45FD-B770-4F79335EF154} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} - {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} - {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} - {50A89267-A28B-4DF3-8E62-912E005143B8} = {E0646C25-36F2-4524-969F-FA621353AB94} - {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} = {E0646C25-36F2-4524-969F-FA621353AB94} - {CA76F702-5B4E-4918-B8D8-7FF8382434FF} = {E0646C25-36F2-4524-969F-FA621353AB94} - {6E59AF58-F635-459A-9A35-C9AC41C00339} = {E0646C25-36F2-4524-969F-FA621353AB94} - {E1B288A2-08EE-4318-8BBB-8AB72C69E33E} = {E0646C25-36F2-4524-969F-FA621353AB94} - {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94} - {BF38FB72-B380-4196-AF8C-95749D726C61} = {E0646C25-36F2-4524-969F-FA621353AB94} - {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {E0646C25-36F2-4524-969F-FA621353AB94} - {F390DA70-1FE1-4715-81A0-389AB010C130} = {E0646C25-36F2-4524-969F-FA621353AB94} + {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D} {388E7B64-0393-4EB4-A3E3-5C474F141853} = {E0646C25-36F2-4524-969F-FA621353AB94} - {23B517C9-1ECC-4419-A13F-0B7136D085CB} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {833904AB-3CD4-4071-9B48-5770E44685AA} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} - {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} - {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {F390DA70-1FE1-4715-81A0-389AB010C130} = {E0646C25-36F2-4524-969F-FA621353AB94} + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {E0646C25-36F2-4524-969F-FA621353AB94} + {BF38FB72-B380-4196-AF8C-95749D726C61} = {E0646C25-36F2-4524-969F-FA621353AB94} + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94} + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E} = {E0646C25-36F2-4524-969F-FA621353AB94} + {6E59AF58-F635-459A-9A35-C9AC41C00339} = {E0646C25-36F2-4524-969F-FA621353AB94} + {CA76F702-5B4E-4918-B8D8-7FF8382434FF} = {E0646C25-36F2-4524-969F-FA621353AB94} + {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} = {E0646C25-36F2-4524-969F-FA621353AB94} + {50A89267-A28B-4DF3-8E62-912E005143B8} = {E0646C25-36F2-4524-969F-FA621353AB94} {C9DE556D-325C-4544-B29F-16A9EB7C9830} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {833904AB-3CD4-4071-9B48-5770E44685AA} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {23B517C9-1ECC-4419-A13F-0B7136D085CB} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} + {A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} + {A569DCC1-C608-45FD-B770-4F79335EF154} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {3CA90546-3B4C-4663-9445-C4E9371750A7} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {918487B7-2153-4618-BBB3-344DBDDF2A2A} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {8AA421C8-D7AF-4957-9F43-5135328ACB24} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {745869FF-80E9-4589-A366-E775D2103843} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {0773ED53-08E2-4495-A3BE-CA0B5D413C15} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {533F4684-DBA6-4518-B005-C84F22A2DD57} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {DCA2703D-250A-463E-A68A-07ED105AE6BD} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {BFA3BF26-33BD-4A65-B84D-C7F30D131668} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {08F772A1-F0BE-433E-8B37-F6522953DB05} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} + {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} + {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} + {869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} + {E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} + {000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {F355E45F-F54F-4B42-8916-9A633A392789} + {CE498514-D12D-4B6E-AE0E-FEC29BD43748} = {F355E45F-F54F-4B42-8916-9A633A392789} + {08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {F355E45F-F54F-4B42-8916-9A633A392789} + {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {F355E45F-F54F-4B42-8916-9A633A392789} + {1F261725-6318-4434-A1B1-6C70CE4CD324} = {F355E45F-F54F-4B42-8916-9A633A392789} + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {F355E45F-F54F-4B42-8916-9A633A392789} EndGlobalSection EndGlobal diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs index da22e2e0226..b66f571606f 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplaceDialog.cs @@ -168,7 +168,8 @@ Keys[] GetKeyboardShortcut(string path, string id) Keys[] GetKeyBoardShortcut(string routedCommandName) { - var gestureCollection = SDCommandManager.FindInputGestures(new BindingInfoTemplate { RoutedCommandName = routedCommandName}); + var template = new BindingInfoTemplate { RoutedCommandName = routedCommandName}; + var gestureCollection = SDCommandManager.FindInputGestures(BindingInfoMatchType.SuperSet, template); var keyCollection = new Keys[gestureCollection.Count]; var i = 0; diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs index 2691d087202..260864db722 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs @@ -193,7 +193,7 @@ private void BindShortcuts() } } - var inputBindingInfos = CommandManager.FindInputBindingInfos(new BindingInfoTemplate()); + var inputBindingInfos = CommandManager.FindInputBindingInfos(BindingInfoMatchType.SuperSet, new BindingInfoTemplate()); foreach (var inputBindingInfo in inputBindingInfos) { // Get shortcut entry text. Normaly shortcut entry text is equal to routed command text diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj index d83119fc733..f699d390797 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj @@ -82,9 +82,13 @@ - - {FFA7988E-7348-4669-9E9D-27E629C873A2} - ICSharpCode.Core.Presentation.Tests + + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + ICSharpCode.Core + + + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} + ICSharpCode.Core.Presentation {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/WeakReferenceTests.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/WeakReferenceTests.cs index f51877a35a7..e47d79c4f2c 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/WeakReferenceTests.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/WeakReferenceTests.cs @@ -9,6 +9,8 @@ using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Rendering; +using ICSharpCode.Core; +using ICSharpCode.Core.Presentation; using NUnit.Framework; namespace ICSharpCode.AvalonEdit.Tests @@ -16,6 +18,14 @@ namespace ICSharpCode.AvalonEdit.Tests [TestFixture] public class WeakReferenceTests { + [TestFixtureSetUp] + public void FixtureSetup() + { + PropertyService.InitializeServiceForUnitTests(); + var category = new InputBindingCategory("/MainMenu/Edit", "Edit"); + CommandManager.RegisterInputBindingCategory(category); + } + [Test] public void GCCallbackTest() { diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs index 6792f20b85b..b0e8f117521 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/CaretNavigationCommandHandler.cs @@ -28,6 +28,8 @@ public static BindingGroup ClassWideBindingGroup get; private set; } + private static InputBindingCategory classWideInputBindingCategory; + /// /// Creates a new for the text area. /// @@ -36,10 +38,6 @@ public static TextAreaInputHandler Create(TextArea textArea) TextAreaInputHandler handler = new TextAreaInputHandler(textArea); handler.BindingGroup = ClassWideBindingGroup; - // TODO: DELETE - // handler.CommandBindings.AddRange(CommandBindings); - // handler.InputBindings.AddRange(InputBindings); - return handler; } @@ -58,6 +56,7 @@ static void AddInputBinding(string routedCommandName, string gesturesString) inputBinding.OwnerTypeName = typeof(TextArea).GetShortAssemblyQualifiedName(); inputBinding.DefaultGestures.AddRange((InputGestureCollection)new InputGestureCollectionConverter().ConvertFrom(gesturesString)); inputBinding.Groups.Add(ClassWideBindingGroup); + inputBinding.Categories.Add(classWideInputBindingCategory); inputBinding.RoutedCommandName = routedCommandName; SDCommandManager.RegisterInputBinding(inputBinding); } @@ -77,6 +76,7 @@ static void AddCommandBinding(string routedCommandName, CanExecuteRoutedEventHan static CaretNavigationCommandHandler() { ClassWideBindingGroup = new BindingGroup(); + classWideInputBindingCategory = new InputBindingCategory("/CaretNavigation", "Caret navigation commands"); AddBinding("EditingCommands.MoveLeftByCharacter", "Left", null, OnMoveCaret(CaretMovementType.CharLeft)); AddBinding("EditingCommands.SelectLeftByCharacter", "Shift+Left", null, OnMoveCaretExtendSelection(CaretMovementType.CharLeft)); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs index fb41de3676d..f01a68d5161 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs @@ -36,6 +36,8 @@ public static BindingGroup ClassWideBindingGroup get; private set; } + private static InputBindingCategory classWideInputBindingCategory; + /// /// Creates a new for the text area. /// @@ -62,6 +64,7 @@ static void AddInputBinding(string routedCommandName, string gesturesString) inputBinding.OwnerTypeName = typeof(TextArea).GetShortAssemblyQualifiedName(); inputBinding.DefaultGestures.AddRange((InputGestureCollection)new InputGestureCollectionConverter().ConvertFrom(gesturesString)); inputBinding.Groups.Add(ClassWideBindingGroup); + inputBinding.Categories.Add(classWideInputBindingCategory); inputBinding.Categories.AddRange(SDCommandManager.GetInputBindingCategoryCollection("/MainMenu/Edit", true)); inputBinding.RoutedCommandName = routedCommandName; SDCommandManager.RegisterInputBinding(inputBinding); @@ -82,6 +85,7 @@ static void AddCommandBinding(string routedCommandName, CanExecuteRoutedEventHan static EditingCommandHandler() { ClassWideBindingGroup = new BindingGroup(); + classWideInputBindingCategory = new InputBindingCategory("/EditingCommands", "Editing commands"); AddCommandBinding("ApplicationCommands.Delete", CanDelete, OnDelete(ApplicationCommands.NotACommand)); AddBinding("EditingCommands.Delete", "Delete", null, OnDelete(EditingCommands.SelectRightByCharacter)); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs index e945d990924..ed669ed385f 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextAreaDefaultInputHandlers.cs @@ -41,27 +41,11 @@ public static BindingGroup ClassWideBindingGroup static TextAreaDefaultInputHandler() { ClassWideBindingGroup = new BindingGroup(); + AddCommandBinding("ApplicationCommands.Undo", CanExecuteUndo, ExecuteUndo); AddCommandBinding("ApplicationCommands.Redo", CanExecuteRedo, ExecuteRedo); } - static void AddBinding(string routedCommandName, string gesturesString, CanExecuteRoutedEventHandler canExecuteHandler, ExecutedRoutedEventHandler executedHandler) - { - AddCommandBinding(routedCommandName, canExecuteHandler, executedHandler); - AddInputBinding(routedCommandName, gesturesString); - } - - static void AddInputBinding(string routedCommandName, string gesturesString) - { - var inputBinding = new InputBindingInfo(); - inputBinding.OwnerTypeName = typeof(TextArea).GetShortAssemblyQualifiedName(); - inputBinding.DefaultGestures.AddRange((InputGestureCollection)new InputGestureCollectionConverter().ConvertFrom(gesturesString)); - inputBinding.Groups.Add(ClassWideBindingGroup); - inputBinding.Categories.AddRange(SDCommandManager.GetInputBindingCategoryCollection("/MainMenu/Edit", true)); - inputBinding.RoutedCommandName = routedCommandName; - SDCommandManager.RegisterInputBinding(inputBinding); - } - static void AddCommandBinding(string routedCommandName, CanExecuteRoutedEventHandler canExecuteHandler, ExecutedRoutedEventHandler executedHandler) { var commandBinding = new CommandBindingInfo(); diff --git a/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs b/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs index 6e87f81f3bd..607e879c780 100644 --- a/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs +++ b/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs @@ -246,7 +246,7 @@ public ICollection BuildItems(Codon codon, object owner) var gesturesTemplate = new BindingInfoTemplate(); gesturesTemplate.OwnerTypeName = CommandManager.DefaultContextName; gesturesTemplate.RoutedCommandName = routedCommandName; - var updatedGestures = CommandManager.FindInputGestures(gesturesTemplate); + var updatedGestures = CommandManager.FindInputGestures(BindingInfoMatchType.SuperSet, gesturesTemplate); var updatedGesturesText = (string)new InputGestureCollectionConverter().ConvertToInvariantString(updatedGestures); items[i].InputGestureText = updatedGesturesText; @@ -561,7 +561,7 @@ public ICollection BuildItems(Codon codon, object owner) var gesturesTemplate = new BindingInfoTemplate(); gesturesTemplate.OwnerTypeName = CommandManager.DefaultContextName; gesturesTemplate.RoutedCommandName = routedCommandName; - var updatedGestures = CommandManager.FindInputGestures(gesturesTemplate); + var updatedGestures = CommandManager.FindInputGestures(BindingInfoMatchType.SuperSet, gesturesTemplate); var updatedGesturesText = (string)new InputGestureCollectionConverter().ConvertToInvariantString(updatedGestures); item.InputGestureText = updatedGesturesText; diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/BindingGroup.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/BindingGroup.cs index 7217ed5f3e8..7414c8f636b 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/BindingGroup.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/BindingGroup.cs @@ -99,8 +99,8 @@ private void InvokeBindingUpdateHandlers(UIElement instance) bindingInfoTemplates[i++] = new BindingInfoTemplate { OwnerTypeName = typeName }; } - CommandManager.InvokeCommandBindingUpdateHandlers(bindingInfoTemplates); - CommandManager.InvokeInputBindingUpdateHandlers(bindingInfoTemplates); + CommandManager.InvokeCommandBindingUpdateHandlers(BindingInfoMatchType.SubSet | BindingInfoMatchType.SuperSet, bindingInfoTemplates); + CommandManager.InvokeInputBindingUpdateHandlers(BindingInfoMatchType.SubSet | BindingInfoMatchType.SuperSet, bindingInfoTemplates); } public List NestedGroups diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs index 56bd3b415d4..4611e88cdbd 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandBindingInfo.cs @@ -4,7 +4,8 @@ using System.Collections.Generic; using System.Windows; using System.Windows.Input; -using CommandManager=ICSharpCode.Core.Presentation.CommandManager; +using SDCommandManager=ICSharpCode.Core.Presentation.CommandManager; +using CommandManager=System.Windows.Input.CommandManager; namespace ICSharpCode.Core.Presentation { @@ -63,7 +64,7 @@ public BindingGroupCollection Groups /// public RoutedUICommand RoutedCommand { get { - return CommandManager.GetRoutedUICommand(RoutedCommandName); + return SDCommandManager.GetRoutedUICommand(RoutedCommandName); } } @@ -117,11 +118,11 @@ public BindingGroupCollection Groups } if(AddIn != null && (AddIn.DependenciesLoaded || IsLazy)) { - CommandManager.LoadAddinCommands(AddIn); + SDCommandManager.LoadAddinCommands(AddIn); } System.Windows.Input.ICommand command; - CommandManager.commands.TryGetValue(CommandTypeName, out command); + SDCommandManager.commands.TryGetValue(CommandTypeName, out command); commandInstance = command; return command; @@ -212,7 +213,7 @@ public CanExecuteRoutedEventHandler CanExecuteEventHandler public ICollection OwnerInstances { get { if(_ownerInstanceName != null) { - return CommandManager.GetNamedUIElementCollection(_ownerInstanceName); + return SDCommandManager.GetNamedUIElementCollection(_ownerInstanceName); } return null; @@ -251,7 +252,7 @@ public CanExecuteRoutedEventHandler CanExecuteEventHandler public ICollection OwnerTypes { get { if(_ownerTypeName != null) { - return CommandManager.GetNamedUITypeCollection(_ownerTypeName); + return SDCommandManager.GetNamedUITypeCollection(_ownerTypeName); } return null; @@ -262,6 +263,27 @@ public bool IsRegistered { get; set; } + + public void RemoveActiveCommandBindings() + { + if(_ownerTypeName != null) { + if(OwnerTypes != null) { + foreach(var ownerType in OwnerTypes) { + foreach(CommandBinding binding in ActiveCommandBindings) { + SDCommandManager.RemoveClassCommandBinding(ownerType, binding); + } + } + } + } else if(_ownerInstanceName != null) { + if(OwnerInstances != null) { + foreach(var ownerInstance in OwnerInstances) { + foreach(CommandBinding binding in ActiveCommandBindings) { + ownerInstance.CommandBindings.Remove(binding); + } + } + } + } + } private BindingsUpdatedHandler defaultCommandBindingHandler; @@ -273,12 +295,16 @@ internal BindingsUpdatedHandler DefaultCommandBindingHandler get { if(defaultCommandBindingHandler == null && OwnerTypeName != null) { defaultCommandBindingHandler = delegate { - if(RoutedCommand != null && OwnerTypes != null && IsRegistered) { + var routedCommand = RoutedCommand; + var ownerTypes = OwnerTypes; + var isRegistered = IsRegistered; + + if(routedCommand != null && ownerTypes != null && isRegistered) { GenerateCommandBindings(); - foreach(var ownerType in OwnerTypes) { + foreach(var ownerType in ownerTypes) { foreach(CommandBinding binding in OldCommandBindings) { - CommandManager.RemoveClassCommandBinding(ownerType, binding); + SDCommandManager.RemoveClassCommandBinding(ownerType, binding); } foreach(CommandBinding binding in ActiveCommandBindings) { @@ -368,7 +394,7 @@ public CommandBindingCollection ActiveCommandBindings AddIn.LoadRuntimeAssemblies(); var command = (ICommand)AddIn.CreateObject(CommandTypeName); - CommandManager.LoadCommand(CommandTypeName, command); + SDCommandManager.LoadCommand(CommandTypeName, command); } if(CommandInstance != null) { diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs index 4d4d4c439d8..c395e17efea 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs @@ -58,7 +58,7 @@ public static class CommandManager /// Instance name /// Instance public static void RegisterNamedUIElement(string instanceName, UIElement element) - { + { if(!namedUIInstances.ContainsKey(instanceName)){ namedUIInstances.Add(instanceName, new HashSet()); } @@ -69,10 +69,38 @@ public static void RegisterNamedUIElement(string instanceName, UIElement element if(namedUIInstances[instanceName].Add(element)) { reverseNamedUIInstances[element].Add(instanceName); + // If there are some bindings and update handlers already registered, // but owner is not loaded then invoke those bindings - InvokeCommandBindingUpdateHandlers(new BindingInfoTemplate { OwnerInstanceName = instanceName }); - InvokeInputBindingUpdateHandlers(new BindingInfoTemplate { OwnerInstanceName = instanceName }); + + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerInstanceName = instanceName }, + new BindingInfoTemplate { OwnerInstances = new[] { element }}); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerInstanceName = instanceName }, + new BindingInfoTemplate { OwnerInstances = new[] { element }}); + } + } + + public static void UnregisterNamedUIElement(string instanceName, UIElement instance) + { + if(namedUIInstances.ContainsKey(instanceName)){ + if(namedUIInstances[instanceName].Remove(instance)) { + reverseNamedUIInstances[instance].Remove(instanceName); + } + + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerInstanceName = instanceName }, + new BindingInfoTemplate { OwnerInstances = new [] { instance }}); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerInstanceName = instanceName }, + new BindingInfoTemplate { OwnerInstances = new [] { instance }}); } } @@ -104,6 +132,10 @@ public static ICollection GetUIElementNameCollection(UIElement instance) /// Type public static void RegisterNamedUIType(string typeName, Type type) { + if(type.IsSubclassOf(typeof(UIElement))) { + throw new ArgumentException("Type is not subclass of UIElement"); + } + if(!namedUITypes.ContainsKey(typeName)){ namedUITypes.Add(typeName, new HashSet()); } @@ -117,8 +149,34 @@ public static void RegisterNamedUIType(string typeName, Type type) // If any update handlers where assigned to the type and type was not // loaded yet then invoke update handlers - InvokeCommandBindingUpdateHandlers(new BindingInfoTemplate { OwnerTypeName = typeName }); - InvokeInputBindingUpdateHandlers(new BindingInfoTemplate { OwnerTypeName = typeName }); + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerTypeName = typeName }, + new BindingInfoTemplate { OwnerTypes = new[] { type }}); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerTypeName = typeName }, + new BindingInfoTemplate { OwnerTypes = new[] { type }}); + } + } + + public static void UnregisterNamedUIType(string typeName, Type type) + { + if(namedUITypes.ContainsKey(typeName)){ + if(namedUITypes[typeName].Remove(type)) { + reverseNamedUITypes[type].Remove(typeName); + + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerTypeName = typeName }, + new BindingInfoTemplate { OwnerTypes = new[] { type }}); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerTypeName = typeName }, + new BindingInfoTemplate { OwnerTypes = new[] { type }}); + } } } @@ -142,28 +200,6 @@ public static ICollection GetUITypeNameCollection(Type type) return typeNames ?? new HashSet(); } - - /// - /// Get reference to routed UI command by name - /// - /// Routed command name - /// Routed command instance - public static RoutedUICommand GetRoutedUICommand(string routedCommandName) { - if(routedCommands.ContainsKey(routedCommandName)) { - return routedCommands[routedCommandName]; - } - - return null; - } - - /// - /// Checks whether routed UI command registered - /// - /// Routed command name - /// Returns value specifting whether routed UI command is registered - public static bool IsRoutedUICommandRegistered(string routedCommandName) { - return GetRoutedUICommand(routedCommandName) != null; - } /// /// Register new routed command in the global registry @@ -174,15 +210,24 @@ public static ICollection GetUITypeNameCollection(Type type) /// Routed command name /// Short text describing command functionality public static RoutedUICommand RegisterRoutedUICommand(string routedCommandName, string text) { - var routedCommand = new RoutedUICommand(text, routedCommandName, typeof(CommandManager)); - - if(!routedCommands.ContainsKey(routedCommandName)) { - routedCommands.Add(routedCommandName, routedCommand); - } else { - var test = routedCommands[routedCommandName]; + if(routedCommands.ContainsKey(routedCommandName)) { throw new IndexOutOfRangeException("Routed UI command with name " + routedCommandName + " is already registered"); } + var routedCommand = new RoutedUICommand(text, routedCommandName, typeof(CommandManager)); + + routedCommands.Add(routedCommandName, routedCommand); + + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommand = routedCommand }, + new BindingInfoTemplate { RoutedCommandName = routedCommandName }); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommand = routedCommand }, + new BindingInfoTemplate { RoutedCommandName = routedCommandName }); + return routedCommand; } @@ -197,11 +242,21 @@ public static ICollection GetUITypeNameCollection(Type type) public static void RegisterRoutedUICommand(RoutedUICommand existingRoutedUICommand) { string routedCommandName = existingRoutedUICommand.OwnerType.Name + "." + existingRoutedUICommand.Name; - if(!routedCommands.ContainsKey(routedCommandName)) { - routedCommands.Add(routedCommandName, existingRoutedUICommand); - } else { + if(routedCommands.ContainsKey(routedCommandName)) { throw new IndexOutOfRangeException("Routed UI command with name " + routedCommandName + " is already registered"); } + + routedCommands.Add(routedCommandName, existingRoutedUICommand); + + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommand = existingRoutedUICommand }, + new BindingInfoTemplate { RoutedCommandName = routedCommandName }); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommand = existingRoutedUICommand }, + new BindingInfoTemplate { RoutedCommandName = routedCommandName }); } /// @@ -210,8 +265,32 @@ public static ICollection GetUITypeNameCollection(Type type) /// Routed command name public static void UnregisterRoutedUICommand(string routedCommandName) { if(routedCommands.ContainsKey(routedCommandName)) { + var routedCommand = routedCommands[routedCommandName]; routedCommands.Remove(routedCommandName); + + InvokeCommandBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommand = routedCommand }, + new BindingInfoTemplate { RoutedCommandName = routedCommandName }); + + InvokeInputBindingUpdateHandlers( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommand = routedCommand }, + new BindingInfoTemplate { RoutedCommandName = routedCommandName }); + } + } + + /// + /// Get reference to routed UI command by name + /// + /// Routed command name + /// Routed command instance + public static RoutedUICommand GetRoutedUICommand(string routedCommandName) { + if(routedCommands != null && routedCommands.ContainsKey(routedCommandName)) { + return routedCommands[routedCommandName]; } + + return null; } /// @@ -220,11 +299,19 @@ public static ICollection GetUITypeNameCollection(Type type) /// Input binding parameters public static void RegisterInputBinding(InputBindingInfo inputBindingInfo) { + if(inputBindingInfo.OwnerInstanceName == null && inputBindingInfo.OwnerTypeName == null) { + throw new ArgumentException("Binding owner must be specified"); + } + + if(inputBindingInfo.RoutedCommandName == null) { + throw new ArgumentException("Routed command name must be specified"); + } + var similarBindingTemplate = new BindingInfoTemplate(); similarBindingTemplate.OwnerTypeName = inputBindingInfo.OwnerTypeName; similarBindingTemplate.OwnerInstanceName = inputBindingInfo.OwnerInstanceName; similarBindingTemplate.RoutedCommandName = inputBindingInfo.RoutedCommandName; - var similarInputBinding = FindInputBindingInfos(similarBindingTemplate).FirstOrDefault(); + var similarInputBinding = FindInputBindingInfos(BindingInfoMatchType.SuperSet, similarBindingTemplate).FirstOrDefault(); if(similarInputBinding != null) { foreach(InputGesture gesture in inputBindingInfo.DefaultGestures) { @@ -237,69 +324,37 @@ public static void RegisterInputBinding(InputBindingInfo inputBindingInfo) similarInputBinding.Categories.AddRange(inputBindingInfo.Categories); similarInputBinding.Groups.AddRange(inputBindingInfo.Groups); } else { - if(inputBindingInfo.OwnerInstanceName == null && inputBindingInfo.OwnerTypeName == null) { - throw new ArgumentException("Binding owner must be specified"); - } - - var registeredBindingTemplate = new BindingInfoTemplate(); - registeredBindingTemplate.OwnerInstanceName = inputBindingInfo.OwnerInstanceName; - registeredBindingTemplate.OwnerTypeName = inputBindingInfo.OwnerTypeName; - registeredBindingTemplate.RoutedCommandName = inputBindingInfo.RoutedCommandName; - inputBidnings.Add(inputBindingInfo); inputBindingInfo.IsRegistered = true; - - RegisterInputBindingsUpdateHandler(registeredBindingTemplate, inputBindingInfo.DefaultInputBindingHandler); - InvokeInputBindingUpdateHandlers(registeredBindingTemplate); } + + InvokeInputBindingUpdateHandlers(BindingInfoMatchType.SubSet, similarBindingTemplate); } /// /// Unregister input binding /// /// Input binding parameters - public static void UnregisterInputBinding(BindingInfoTemplate template) + public static void UnregisterInputBinding(BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { - var similarInputBindingInfos = FindInputBindingInfos(template); - - foreach(var similarInputBindingInfo in similarInputBindingInfos) { + foreach(var similarInputBindingInfo in FindInputBindingInfos(matchType, templates).ToArray()) { inputBidnings.Remove(similarInputBindingInfo); - - // Remove command bindings - if(similarInputBindingInfo.OwnerTypes != null) { - foreach(var ownerType in similarInputBindingInfo.OwnerTypes) { - foreach(InputBinding binding in similarInputBindingInfo.OldInputBindings) { - RemoveClassInputBinding(ownerType, binding); - } - - foreach(InputBinding binding in similarInputBindingInfo.ActiveInputBindings) { - RemoveClassInputBinding(ownerType, binding); - } - } - } else if (similarInputBindingInfo.OwnerInstances != null) { - foreach(var ownerInstance in similarInputBindingInfo.OwnerInstances) { - foreach(InputBinding binding in similarInputBindingInfo.OldInputBindings) { - ownerInstance.InputBindings.Remove(binding); - } - - foreach(InputBinding binding in similarInputBindingInfo.ActiveInputBindings) { - ownerInstance.InputBindings.Remove(binding); - } - } - } + similarInputBindingInfo.RemoveActiveInputBindings(); } + + InvokeInputBindingUpdateHandlers(BindingInfoMatchType.SubSet | BindingInfoMatchType.SuperSet, templates); } - public static IEnumerable FindInputBindingInfos(params BindingInfoTemplate[] templates) + public static IEnumerable FindInputBindingInfos(BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { - return FindBindingInfos(inputBidnings, templates).Cast(); + return FindBindingInfos(inputBidnings, matchType, templates).Cast(); } - private static IEnumerable FindBindingInfos(ICollection bindingInfos, params BindingInfoTemplate[] templates) + private static IEnumerable FindBindingInfos(ICollection bindingInfos, BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { foreach(var binding in bindingInfos) { foreach(var template in templates) { - if(template.IsTemplateFor(binding)) { + if(template.IsTemplateFor(binding, matchType)) { yield return binding; continue; } @@ -307,9 +362,9 @@ private static IEnumerable FindBindingInfos(ICollection /// Remove command binding associated with type /// @@ -378,6 +414,10 @@ public static void RemoveClassCommandBinding(Type ownerType, CommandBinding comm if(commandBindingInfo.OwnerInstanceName == null && commandBindingInfo.OwnerTypeName == null) { throw new ArgumentException("Binding owner must be specified"); } + + if(commandBindingInfo.RoutedCommandName == null) { + throw new ArgumentException("Routed command name must be specified"); + } var registeredBindingTemplate = new BindingInfoTemplate(); registeredBindingTemplate.OwnerInstanceName = commandBindingInfo.OwnerInstanceName; @@ -388,46 +428,20 @@ public static void RemoveClassCommandBinding(Type ownerType, CommandBinding comm commandBindingInfo.IsRegistered = true; RegisterInputBindingsUpdateHandler(registeredBindingTemplate, commandBindingInfo.DefaultCommandBindingHandler); - InvokeInputBindingUpdateHandlers(registeredBindingTemplate); + InvokeInputBindingUpdateHandlers(BindingInfoMatchType.SubSet, registeredBindingTemplate); } /// /// Unregister command binding /// /// Command binding parameters - public static void UnregisterCommandBinding(CommandBindingInfo commandBindingInfo) { - var template = new BindingInfoTemplate(); - template.OwnerTypeName = commandBindingInfo.OwnerTypeName; - template.OwnerInstanceName = commandBindingInfo.OwnerInstanceName; - template.RoutedCommandName = commandBindingInfo.RoutedCommandName; - var similarCommandBindingInfos = FindCommandBindingInfos(template); - - foreach(var similarCommandBindingInfo in similarCommandBindingInfos) { + public static void UnregisterCommandBinding(BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { + foreach(var similarCommandBindingInfo in FindCommandBindingInfos(matchType, templates).ToArray()) { commandBindings.Remove(similarCommandBindingInfo); - - // Remove command bindings - if(similarCommandBindingInfo.OwnerTypes != null) { - foreach(var ownerType in similarCommandBindingInfo.OwnerTypes) { - foreach(CommandBinding binding in similarCommandBindingInfo.OldCommandBindings) { - RemoveClassCommandBinding(ownerType, binding); - } - - foreach(CommandBinding binding in similarCommandBindingInfo.ActiveCommandBindings) { - RemoveClassCommandBinding(ownerType, binding); - } - } - } else if (similarCommandBindingInfo.OwnerInstances != null) { - foreach(var ownerInstance in similarCommandBindingInfo.OwnerInstances) { - foreach(CommandBinding binding in similarCommandBindingInfo.OldCommandBindings) { - ownerInstance.CommandBindings.Remove(binding); - } - - foreach(CommandBinding binding in similarCommandBindingInfo.ActiveCommandBindings) { - ownerInstance.CommandBindings.Remove(binding); - } - } - } + similarCommandBindingInfo.RemoveActiveCommandBindings(); } + + InvokeCommandBindingUpdateHandlers(BindingInfoMatchType.SubSet | BindingInfoMatchType.SuperSet, templates); } #region Update handlers @@ -452,6 +466,10 @@ public static void RegisterCommandBindingsUpdateHandler(IBindingInfo template, B RegisterBindingsUpdateHandler(commandBindingUpdatedHandlers, template, handler); } + public static void UnegisterCommandBindingsUpdateHandler(BindingsUpdatedHandler handler, BindingInfoMatchType matchType, params IBindingInfo[] templates) + { + UnregisterBindingsUpdateHandler(commandBindingUpdatedHandlers, handler, matchType, templates); + } /// /// Register command binding update handler which is triggered when input bindings associated @@ -463,12 +481,30 @@ public static void RegisterInputBindingsUpdateHandler(IBindingInfo template, Bin { RegisterBindingsUpdateHandler(inputBindingUpdatedHandlers, template, handler); } + + public static void UnregisterInputBindingsUpdateHandler(BindingsUpdatedHandler handler, BindingInfoMatchType matchType, params IBindingInfo[] templates) + { + UnregisterBindingsUpdateHandler(inputBindingUpdatedHandlers, handler, matchType, templates); + } + + private static void UnregisterBindingsUpdateHandler(Dictionary> updateHandlerDictionary, BindingsUpdatedHandler handler, BindingInfoMatchType matchType, params IBindingInfo[] templates) + { + foreach(var updateHandlerPair in updateHandlerDictionary) { + foreach(var template in templates) { + if(template.IsTemplateFor(updateHandlerPair.Key, matchType)) { + if(handler != null) { + updateHandlerPair.Value.Remove(handler); + } + } + } + } + } - private static void InvokeBindingUpdateHandlers(Dictionary> updateHandlerDictionary, params BindingInfoTemplate[] templates) + private static void InvokeBindingUpdateHandlers(Dictionary> updateHandlerDictionary, BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { foreach(var updateHandlerPair in updateHandlerDictionary) { foreach(var template in templates) { - if(template.IsTemplateFor(updateHandlerPair.Key)) { + if(template.IsTemplateFor(updateHandlerPair.Key, matchType)) { foreach(var handler in updateHandlerPair.Value) { if(handler != null) { handler.Invoke(); @@ -479,14 +515,14 @@ private static void InvokeBindingUpdateHandlers(DictionaryContext class full name /// Context class full name /// Collection of managed command bindings - public static IEnumerable FindCommandBindingInfos(params BindingInfoTemplate[] templates) + public static IEnumerable FindCommandBindingInfos(BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { - return FindBindingInfos(commandBindings, templates).Cast(); + return FindBindingInfos(commandBindings, matchType, templates).Cast(); } - public static CommandBindingCollection FindCommandBindings(params BindingInfoTemplate[] templates) + public static CommandBindingCollection FindCommandBindings(BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { - var commandBindingInfoCollection = FindCommandBindingInfos(templates); + var commandBindingInfoCollection = FindCommandBindingInfos(matchType, templates); var commandBindingCollection = new CommandBindingCollection(); foreach(var bindingInfo in commandBindingInfoCollection) { commandBindingCollection.AddRange(bindingInfo.ActiveCommandBindings); @@ -562,8 +598,8 @@ public static CommandBindingCollection FindCommandBindings(params BindingInfoTem /// Get gestures assigned only to specific context /// Routed UI command name /// Gesture - public static InputGestureCollection FindInputGestures(params BindingInfoTemplate[] templates) { - var bindings = FindInputBindingInfos(templates); + public static InputGestureCollection FindInputGestures(BindingInfoMatchType matchType, params BindingInfoTemplate[] templates) { + var bindings = FindInputBindingInfos(matchType, templates); var gestures = new InputGestureCollection(); foreach(InputBindingInfo bindingInfo in bindings) { diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/IBindingInfo.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/IBindingInfo.cs index a87fd607a89..308338e3d95 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/IBindingInfo.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/IBindingInfo.cs @@ -52,14 +52,58 @@ BindingGroupCollection Groups public static class IBindingInfoExtensions { - public static bool IsTemplateFor(this IBindingInfo template, IBindingInfo binding) + public static bool IsTemplateFor(this IBindingInfo template, IBindingInfo binding, BindingInfoMatchType matchType) { - return (template.OwnerInstanceName == null || template.OwnerInstanceName == binding.OwnerInstanceName) - && (template.OwnerInstances == null || (binding.OwnerInstances != null && template.OwnerInstances.ContainsAnyFromCollection(binding.OwnerInstances))) - && (template.OwnerTypeName == null || template.OwnerTypeName == binding.OwnerTypeName) - && (template.OwnerTypes == null || (binding.OwnerTypes != null && template.OwnerTypes.ContainsAnyFromCollection(binding.OwnerTypes))) - && (template.RoutedCommandName == null || template.RoutedCommandName == binding.RoutedCommandName) - && (template.RoutedCommand == null || template.RoutedCommand == binding.RoutedCommand); + var bindingOwnerInstanceName = binding.OwnerInstanceName; + var bindingOwnerInstances = binding.OwnerInstances; + var bindingOwnerTypeName = binding.OwnerTypeName; + var bindingOwnerTypes = binding.OwnerTypes; + var bindingRoutedCommandName = binding.RoutedCommandName; + var bindingRoutedCommand = binding.RoutedCommand; + var bindingGroups = binding.Groups; + + var templateOwnerInstanceName = template.OwnerInstanceName; + var templateOwnerInstances = template.OwnerInstances; + var templateOwnerTypeName = template.OwnerTypeName; + var templateOwnerTypes = template.OwnerTypes; + var templateRoutedCommandName = template.RoutedCommandName; + var templateRoutedCommand = template.RoutedCommand; + var templateGroups = template.Groups; + + var instancesOverlap = templateOwnerInstances != null && bindingOwnerInstances != null && templateOwnerInstances.ContainsAnyFromCollection(bindingOwnerInstances); + var typesOverlap = templateOwnerTypes != null && bindingOwnerTypes != null && templateOwnerTypes.ContainsAnyFromCollection(bindingOwnerTypes); + var groupsOverlap = templateGroups != null && bindingGroups != null && templateGroups.ContainsAnyFromCollection(bindingGroups); + + var superSetMatch = false; + if((matchType & BindingInfoMatchType.SuperSet) == BindingInfoMatchType.SuperSet) { + superSetMatch = (templateOwnerInstanceName == null || templateOwnerInstanceName == bindingOwnerInstanceName) + && (templateOwnerInstances == null || instancesOverlap) + && (templateOwnerTypeName == null || templateOwnerTypeName == bindingOwnerTypeName) + && (templateOwnerTypes == null || typesOverlap) + && (templateRoutedCommandName == null || templateRoutedCommandName == bindingRoutedCommandName) + && (templateRoutedCommand == null || templateRoutedCommand == bindingRoutedCommand) + && (templateGroups == null || groupsOverlap); + } + + var subSetMatch = false; + if((matchType & BindingInfoMatchType.SubSet) == BindingInfoMatchType.SubSet) { + subSetMatch = (templateOwnerInstanceName != null && templateOwnerInstanceName == bindingOwnerInstanceName) + || (templateOwnerInstances != null && instancesOverlap) + || (templateOwnerTypeName != null && templateOwnerTypeName == bindingOwnerTypeName) + || (templateOwnerTypes != null && typesOverlap) + || (templateRoutedCommandName != null && templateRoutedCommandName == bindingRoutedCommandName) + || (templateRoutedCommand != null && templateRoutedCommand == bindingRoutedCommand) + || (templateGroups != null && groupsOverlap); + } + + return subSetMatch || superSetMatch; } } + + [FlagsAttribute] + public enum BindingInfoMatchType + { + SubSet = 1, + SuperSet = 2, + } } diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs index b0c5e187b35..5d3d8eddeb8 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs @@ -4,6 +4,9 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Collections.ObjectModel; +using System.Reflection; +using CommandManager = System.Windows.Input.CommandManager; +using SDCommandManager = ICSharpCode.Core.Presentation.CommandManager; namespace ICSharpCode.Core.Presentation { @@ -22,12 +25,44 @@ public InputBindingInfo() DefaultGestures = new ObservableInputGestureCollection(); Categories = new InputBindingCategoryCollection(); Groups = new BindingGroupCollection(); - Groups.CollectionChanged += Groups_CollectionChanged; } + private BindingGroupCollection _groups; + public BindingGroupCollection Groups { - get; private set; + get { + return _groups; + } + set { + if(value == null) { + throw new ArgumentException("Groups collection can not be null"); + } + + var oldValue = _groups; + _groups = value; + _groups.CollectionChanged += Groups_CollectionChanged; + + if(oldValue != null) { + var oldItemsList = new System.Collections.ArrayList(); + foreach(var oldItem in oldValue) { + oldItemsList.Add(oldItem); + } + + var newItemsList = new System.Collections.ArrayList(); + foreach(var newItem in value) { + newItemsList.Add(newItem); + } + + var args = new NotifyCollectionChangedEventArgs( + NotifyCollectionChangedAction.Replace, + oldItemsList, + newItemsList, + 0); + + Groups_CollectionChanged(this, args); + } + } } public string _ownerInstanceName; @@ -66,7 +101,7 @@ public BindingGroupCollection Groups public ICollection OwnerInstances { get { if(_ownerInstanceName != null) { - return CommandManager.GetNamedUIElementCollection(_ownerInstanceName); + return SDCommandManager.GetNamedUIElementCollection(_ownerInstanceName); } return null; @@ -109,7 +144,7 @@ public string OwnerTypeName public ICollection OwnerTypes { get { if(_ownerTypeName != null) { - return CommandManager.GetNamedUITypeCollection(_ownerTypeName); + return SDCommandManager.GetNamedUITypeCollection(_ownerTypeName); } return null; @@ -203,15 +238,27 @@ public string OwnerTypeName /// public RoutedUICommand RoutedCommand { get { - return CommandManager.GetRoutedUICommand(RoutedCommandName); + return SDCommandManager.GetRoutedUICommand(RoutedCommandName); } } + InputBindingCategoryCollection _categories; + /// /// List of categories associated with input binding /// public InputBindingCategoryCollection Categories { - get; private set; + + get { + return _categories; + } + set { + if(value == null) { + throw new ArgumentException("Categories collection can not be null"); + } + + _categories = value; + } } @@ -263,7 +310,7 @@ private void ActiveGesturesChanged(object sender, InputBindingGesturesChangedArg template.OwnerTypeName = OwnerTypeName; template.RoutedCommandName = RoutedCommandName; - CommandManager.InvokeInputBindingUpdateHandlers(template); + SDCommandManager.InvokeInputBindingUpdateHandlers(BindingInfoMatchType.SubSet | BindingInfoMatchType.SuperSet, template); } /// @@ -282,6 +329,26 @@ private void GenerateInputBindings() } } + public void RemoveActiveInputBindings() + { + if(_ownerTypeName != null) { + if(OwnerTypes != null) { + foreach(var ownerType in OwnerTypes) { + foreach(InputBinding binding in ActiveInputBindings) { + SDCommandManager.RemoveClassInputBinding(ownerType, binding); + } + } + } + } else if(_ownerInstanceName != null) { + if(OwnerInstances != null) { + foreach(var ownerInstance in OwnerInstances) { + foreach(InputBinding binding in ActiveInputBindings) { + ownerInstance.InputBindings.Remove(binding); + } + } + } + } + } private BindingsUpdatedHandler defaultInputBindingHandler; @@ -298,14 +365,21 @@ internal BindingsUpdatedHandler DefaultInputBindingHandler foreach(var ownerType in OwnerTypes) { foreach(InputBinding binding in OldInputBindings) { - CommandManager.RemoveClassInputBinding(ownerType, binding); + SDCommandManager.RemoveClassInputBinding(ownerType, binding); } foreach(InputBinding binding in ActiveInputBindings) { System.Windows.Input.CommandManager.RegisterClassInputBinding(ownerType, binding); } - CommandManager.OrderClassInputBindingsByChords(ownerType); + var fieldInfo = typeof(System.Windows.Input.CommandManager).GetField("_classInputBindings", BindingFlags.Static | BindingFlags.NonPublic); + var fieldData = (HybridDictionary)fieldInfo.GetValue(null); + var classInputBindings = (InputBindingCollection)fieldData[ownerType]; + + // Sorting input bindings. This may be slow + if(classInputBindings != null) { + classInputBindings.SortByChords(); + } } if(ActiveInputBindingsChanged != null) { @@ -325,7 +399,10 @@ internal BindingsUpdatedHandler DefaultInputBindingHandler ownerInstance.InputBindings.AddRange(ActiveInputBindings); - CommandManager.OrderInstanceInputBindingsByChords(ownerInstance); + // Sorting input bindings. This may be slow + if(ownerInstance.InputBindings != null) { + ownerInstance.InputBindings.SortByChords(); + } } } }; diff --git a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs index 0cd88359e20..3336a113f0d 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs +++ b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCommand.cs @@ -136,7 +136,14 @@ public MenuCommand(UIElement inputBindingOwner, Codon codon, object caller, bool BindingsUpdatedHandler gesturesUpdateHandler = delegate { var gesturesTemplate = new BindingInfoTemplate(); gesturesTemplate.RoutedCommandName = routedCommandName; - var updatedGestures = CommandManager.FindInputGestures(gesturesTemplate); + + if(codon.Properties.Contains("ownerinstance")) { + gesturesTemplate.OwnerInstanceName = codon.Properties["ownerinstance"]; + } else if(codon.Properties.Contains("ownertype")) { + gesturesTemplate.OwnerTypeName = codon.Properties["ownertype"]; + } + + var updatedGestures = CommandManager.FindInputGestures(BindingInfoMatchType.SuperSet, gesturesTemplate); this.InputGestureText = (string)new InputGestureCollectionConverter().ConvertToInvariantString(updatedGestures); }; diff --git a/src/Main/ICSharpCode.Core.Presentation/Test/BindingInfoTemplateTests.cs b/src/Main/ICSharpCode.Core.Presentation/Test/BindingInfoTemplateTests.cs new file mode 100644 index 00000000000..4bd4c2fe862 --- /dev/null +++ b/src/Main/ICSharpCode.Core.Presentation/Test/BindingInfoTemplateTests.cs @@ -0,0 +1,115 @@ +using System; +using NUnit.Framework; +using ICSharpCode.Core.Presentation; + +namespace ICSharpCode.Core.Presentation.Tests +{ + [TestFixture] + public class BindingInfoTemplateTests + { + [TestAttribute] + public void IsTemplateForSupersetsTests() + { + var source = new InputBindingInfo(); + source.RoutedCommandName = "TestCommand"; + source.OwnerTypeName = "TestOwnerType"; + + var emptyTemplate = new BindingInfoTemplate(); + Assert.IsTrue(emptyTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet)); + + var matchingTemplate = new BindingInfoTemplate(); + matchingTemplate.RoutedCommandName = "TestCommand"; + Assert.IsTrue(matchingTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet)); + + var unmatchingTemplate = new BindingInfoTemplate(); + unmatchingTemplate.RoutedCommandName = "OtherTestCommand"; + Assert.IsFalse(unmatchingTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet)); + + var overlappingTemplate = new BindingInfoTemplate(); + overlappingTemplate.RoutedCommandName = "TestCommand"; + overlappingTemplate.OwnerInstanceName = "TestOwnerInstance"; + Assert.IsFalse(overlappingTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet)); + + var biggerTemplate = new BindingInfoTemplate(); + biggerTemplate.RoutedCommandName = "TestCommand"; + biggerTemplate.OwnerTypeName = "TestOwnerType"; + biggerTemplate.OwnerInstanceName = "TestOwnerInstance"; + Assert.IsFalse(biggerTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet)); + + var exactTemplate = new BindingInfoTemplate(); + exactTemplate.RoutedCommandName = "TestCommand"; + exactTemplate.OwnerTypeName = "TestOwnerType"; + Assert.IsTrue(exactTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet)); + } + + [TestAttribute] + public void IsTemplateForSubsetsTests() + { + var source = new InputBindingInfo(); + source.RoutedCommandName = "TestCommand"; + source.OwnerTypeName = "TestOwnerType"; + + var emptyTemplate = new BindingInfoTemplate(); + Assert.IsFalse(emptyTemplate.IsTemplateFor(source, BindingInfoMatchType.SubSet)); + + var matchingTemplate = new BindingInfoTemplate(); + matchingTemplate.RoutedCommandName = "TestCommand"; + Assert.IsTrue(matchingTemplate.IsTemplateFor(source, BindingInfoMatchType.SubSet)); + + var unmatchingTemplate = new BindingInfoTemplate(); + unmatchingTemplate.RoutedCommandName = "OtherTestCommand"; + Assert.IsFalse(unmatchingTemplate.IsTemplateFor(source, BindingInfoMatchType.SubSet)); + + var overlappingTemplate = new BindingInfoTemplate(); + overlappingTemplate.RoutedCommandName = "TestCommand"; + overlappingTemplate.OwnerInstanceName = "TestOwnerInstance"; + Assert.IsTrue(overlappingTemplate.IsTemplateFor(source, BindingInfoMatchType.SubSet)); + + var biggerTemplate = new BindingInfoTemplate(); + biggerTemplate.RoutedCommandName = "TestCommand"; + biggerTemplate.OwnerTypeName = "TestOwnerType"; + biggerTemplate.OwnerInstanceName = "TestOwnerInstance"; + Assert.IsTrue(biggerTemplate.IsTemplateFor(source, BindingInfoMatchType.SubSet)); + + var exactTemplate = new BindingInfoTemplate(); + exactTemplate.RoutedCommandName = "TestCommand"; + exactTemplate.OwnerTypeName = "TestOwnerType"; + Assert.IsTrue(exactTemplate.IsTemplateFor(source, BindingInfoMatchType.SubSet)); + } + + [TestAttribute] + public void IsTemplateForPartlyMatchingTests() + { + var source = new InputBindingInfo(); + source.RoutedCommandName = "TestCommand"; + source.OwnerTypeName = "TestOwnerType"; + + var emptyTemplate = new BindingInfoTemplate(); + Assert.IsTrue(emptyTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet | BindingInfoMatchType.SubSet)); + + var matchingTemplate = new BindingInfoTemplate(); + matchingTemplate.RoutedCommandName = "TestCommand"; + Assert.IsTrue(matchingTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet | BindingInfoMatchType.SubSet)); + + var unmatchingTemplate = new BindingInfoTemplate(); + unmatchingTemplate.RoutedCommandName = "OtherTestCommand"; + Assert.IsFalse(unmatchingTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet | BindingInfoMatchType.SubSet)); + + var overlappingTemplate = new BindingInfoTemplate(); + overlappingTemplate.RoutedCommandName = "TestCommand"; + overlappingTemplate.OwnerInstanceName = "TestOwnerInstance"; + Assert.IsTrue(overlappingTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet | BindingInfoMatchType.SubSet)); + + var biggerTemplate = new BindingInfoTemplate(); + biggerTemplate.RoutedCommandName = "TestCommand"; + biggerTemplate.OwnerTypeName = "TestOwnerType"; + biggerTemplate.OwnerInstanceName = "TestOwnerInstance"; + Assert.IsTrue(biggerTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet | BindingInfoMatchType.SubSet)); + + var exactTemplate = new BindingInfoTemplate(); + exactTemplate.RoutedCommandName = "TestCommand"; + exactTemplate.OwnerTypeName = "TestOwnerType"; + Assert.IsTrue(exactTemplate.IsTemplateFor(source, BindingInfoMatchType.SuperSet | BindingInfoMatchType.SubSet)); + } + } +} diff --git a/src/Main/ICSharpCode.Core.Presentation/Test/CommandManagerTests.cs b/src/Main/ICSharpCode.Core.Presentation/Test/CommandManagerTests.cs new file mode 100644 index 00000000000..a311f81a690 --- /dev/null +++ b/src/Main/ICSharpCode.Core.Presentation/Test/CommandManagerTests.cs @@ -0,0 +1,133 @@ +using ICSharpCode.Core.Presentation; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows; +using System.Windows.Input; + +namespace ICSharpCode.Core.Presentation.Tests +{ + [TestFixture] + public class CommandManagerTests + { + UIElement namedInstanceScope; + BindingGroup bindingGroup; + BindingGroup bindingGroup2; + + [SetUp] + public void SetuUp() + { + namedInstanceScope = new UIElement(); + bindingGroup = new BindingGroup(); + bindingGroup2 = new BindingGroup(); + + CommandManager.RegisterNamedUIType("Global", typeof(UIElement)); + CommandManager.RegisterNamedUIElement("NamedInstanceScope", namedInstanceScope); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "Global", + RoutedCommandName = "TestCommands.DoSomething" }); + + // Register binding with same values + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "Global", + RoutedCommandName = "TestCommands.DoSomething" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "Global", + RoutedCommandName = "TestCommands.DoSomethingOther" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "Local", + RoutedCommandName = "TestCommands.DoSomething" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "UnrelatedScope", + RoutedCommandName = "TestCommands.DoSomethingCompletelyOther" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "NamedScope", + RoutedCommandName = "TestCommands.DoSomethingCompletelyElse" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerInstanceName = "NamedInstanceScope", + RoutedCommandName = "TestCommands.DoSomething" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerInstanceName = "OtherNamedInstanceScope", + RoutedCommandName = "TestCommands.DoSomething" }); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerInstanceName = "OtherNamedInstanceScope", + RoutedCommandName = "TestCommands.DoSomethingElse" , + Groups = new BindingGroupCollection { bindingGroup2 }}); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "UnrelatedInstanceScope", + RoutedCommandName = "TestCommands.DoSomethingCompletelyOther" , + Groups = new BindingGroupCollection { bindingGroup }}); + + CommandManager.RegisterInputBinding(new InputBindingInfo { + OwnerTypeName = "UnrelatedInstanceScope2", + RoutedCommandName = "TestCommands.DoSomethingCompletelyOther", + Groups = new BindingGroupCollection { bindingGroup }}); + } + + [TearDown] + public void TearDown() + { + bindingGroup = null; + bindingGroup2 = null; + namedInstanceScope = null; + + CommandManager.UnregisterInputBinding(BindingInfoMatchType.SuperSet, new BindingInfoTemplate()); + CommandManager.UnregisterCommandBinding(BindingInfoMatchType.SuperSet, new BindingInfoTemplate()); + + CommandManager.UnregisterNamedUIType("Global", typeof(UIElement)); + CommandManager.UnregisterNamedUIElement("NamedInstanceScope", namedInstanceScope); + } + + + [Test] + public void FindInputBindingInfosTests() + { + var doSomethingBindingInfos = CommandManager.FindInputBindingInfos( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { RoutedCommandName = "TestCommands.DoSomething" }); + Assert.AreEqual(4, doSomethingBindingInfos.Count()); + + var namedInstanceBindingInfos = CommandManager.FindInputBindingInfos( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { OwnerInstances = new[] { namedInstanceScope }, RoutedCommandName = "TestCommands.DoSomething" }); + Assert.AreEqual(1, namedInstanceBindingInfos.Count()); + + var groupBindingInfos = CommandManager.FindInputBindingInfos( + BindingInfoMatchType.SuperSet, + new BindingInfoTemplate { Groups = new BindingGroupCollection { bindingGroup }}); + Assert.AreEqual(2, groupBindingInfos.Count()); + } + + [Test] + public void InvokeBindingsOnRoutedCommandRegistration() + { + var testResults = new HashSet(); + + CommandManager.RegisterInputBindingsUpdateHandler(new BindingInfoTemplate { RoutedCommandName = "InvokeTest" }, () => testResults.Add("test1")); + CommandManager.RegisterInputBindingsUpdateHandler(new BindingInfoTemplate { RoutedCommandName = "InvokeTest", OwnerTypeName = "TestOwner" }, () => testResults.Add("test2")); + CommandManager.RegisterInputBindingsUpdateHandler(new BindingInfoTemplate { RoutedCommand = ApplicationCommands.Copy }, () => testResults.Add("ApplicationCommands.Copy1")); + CommandManager.RegisterInputBindingsUpdateHandler(new BindingInfoTemplate { RoutedCommandName = "ApplicationCommands.Copy" }, () => testResults.Add("ApplicationCommands.Copy2")); + + CommandManager.RegisterRoutedUICommand("InvokeTest", "text"); + + Assert.IsTrue(testResults.Contains("test1")); + Assert.IsTrue(testResults.Contains("test2")); + Assert.IsFalse(testResults.Contains("ApplicationCommands.Copy1")); + + CommandManager.RegisterRoutedUICommand(ApplicationCommands.Copy); + + Assert.IsTrue(testResults.Contains("ApplicationCommands.Copy1")); + Assert.IsTrue(testResults.Contains("ApplicationCommands.Copy2")); + } + } +} diff --git a/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj b/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj index f4ef19e7a98..de153d44d6c 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj +++ b/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj @@ -57,6 +57,8 @@ + +