Browse Source

Merge remote-tracking branch 'remotes/origin/master' into refactoringFeatures

pull/59/merge
Andreas Weizel 12 years ago
parent
commit
ab83884bc2
  1. 40
      SharpDevelop.sln
  2. 7
      data/resources/StringResources.de.resx
  3. 7
      data/resources/StringResources.resx
  4. 38
      doc/Dependencies.html
  5. 23
      doc/technotes/Versioning.html
  6. 2
      src/AddIns/Analysis/CodeCoverage/Test/Utils/MockFileSystem.cs
  7. 14
      src/AddIns/Analysis/CodeQuality/CodeQuality.csproj
  8. 1
      src/AddIns/BackendBindings/FSharpBinding/FsOptions.cs
  9. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe
  10. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll
  11. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll
  12. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll
  13. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll
  14. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll
  15. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll
  16. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe
  17. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe
  18. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe
  19. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll
  20. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll
  21. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll
  22. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll
  23. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll
  24. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll
  25. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe
  26. 1
      src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/ApplicationSettingsPanel.cs
  27. 1
      src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/CompilerParametersPanel.cs
  28. 1
      src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PreprocessorVariablesPanel.cs
  29. 1
      src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SemicolonSeparatedNameValueListBinding.cs
  30. 28
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs
  31. 16
      src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin
  32. 6
      src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs
  33. 6
      src/AddIns/Debugger/Debugger.AddIn/Pads/CallStackPad.cs
  34. 25
      src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs
  35. 16
      src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPadCommands.cs
  36. 56
      src/AddIns/Debugger/Debugger.AddIn/TreeModel/Utils.cs
  37. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  38. 8
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
  39. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/AddComponentsDialog.cs
  40. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ConfigureSideBarDialog.cs
  41. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/RenameCategoryDialog.cs
  42. 5
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddNewFileCommand.cs
  43. 4
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddStringEntryCommand.cs
  44. 4
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/ClipboardCommands.cs
  45. 5
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/SaveEntryAsCommand.cs
  46. 3
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/BitmapView.cs
  47. 6
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs
  48. 16
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
  49. 15
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
  50. 92
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs
  51. 3
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
  52. 9
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs
  53. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt
  54. BIN
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/lock.png
  55. 34
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs
  56. 32
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs
  57. 59
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml
  58. 59
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
  59. 18
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
  60. 12
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml
  61. 4
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/UIHelpers.cs
  62. 4
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
  63. 43
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
  64. 17
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
  65. 7
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs
  66. 53
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs
  67. 19
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs
  68. 40
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
  69. 184
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/NamespaceTests.cs
  70. 60
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs
  71. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj
  72. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/CollectionSupport.cs
  73. 76
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs
  74. 9
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupCompatibilityProperties.cs
  75. 39
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs
  76. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs
  77. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs
  78. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj
  79. 2
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockFileSystem.cs
  80. 1
      src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs
  81. 38
      src/AddIns/Misc/HelpViewer/HelpViewer.addin
  82. 8
      src/AddIns/Misc/HelpViewer/HelpViewer.csproj
  83. 45
      src/AddIns/Misc/HelpViewer/Source/Commands.cs
  84. 21
      src/AddIns/Misc/HelpViewer/Source/Controls/HelpLibraryManagerNotFound.cs
  85. 7
      src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml
  86. 15
      src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs
  87. 6
      src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml
  88. 2
      src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml.cs
  89. 30
      src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs
  90. 23
      src/AddIns/Misc/HelpViewer/Source/Core/Help3Environment.cs
  91. 30
      src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs
  92. 42
      src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs
  93. 36
      src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs
  94. 6
      src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs
  95. 6
      src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs
  96. 36
      src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs
  97. 4
      src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs
  98. 16
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
  99. 8
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  100. 8
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
  101. Some files were not shown because too many files have changed in this diff Show More

40
SharpDevelop.sln

@ -343,10 +343,10 @@ Global @@ -343,10 +343,10 @@ Global
{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF}.Release|Any CPU.Build.0 = Release|Any CPU
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Release|Any CPU.Build.0 = Release|Any CPU
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Debug|Any CPU.ActiveCfg = Debug|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Debug|Any CPU.Build.0 = Debug|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Release|Any CPU.ActiveCfg = Release|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Release|Any CPU.Build.0 = Release|x86
{A406803B-C584-43A3-BCEE-A0BB3132CB5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A406803B-C584-43A3-BCEE-A0BB3132CB5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A406803B-C584-43A3-BCEE-A0BB3132CB5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -355,22 +355,22 @@ Global @@ -355,22 +355,22 @@ Global
{752BD058-5517-48A1-BB27-5ED186FA052B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{752BD058-5517-48A1-BB27-5ED186FA052B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{752BD058-5517-48A1-BB27-5ED186FA052B}.Release|Any CPU.Build.0 = Release|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.Build.0 = Release|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.ActiveCfg = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.Build.0 = Release|x86
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Release|Any CPU.Build.0 = Release|Any CPU
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.Build.0 = Release|Any CPU
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.Build.0 = Release|Any CPU
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.ActiveCfg = Debug|x86
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.Build.0 = Debug|x86
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.ActiveCfg = Release|x86
{6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.Build.0 = Release|x86
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.ActiveCfg = Debug|x86
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.Build.0 = Debug|x86
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.ActiveCfg = Release|x86
{7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.Build.0 = Release|x86
{9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -467,10 +467,10 @@ Global @@ -467,10 +467,10 @@ Global
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.Build.0 = Release|Any CPU
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.Build.0 = Release|Any CPU
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.ActiveCfg = Debug|x86
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.Build.0 = Debug|x86
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.ActiveCfg = Release|x86
{D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.Build.0 = Release|x86
{D788789A-4D43-42B9-B0F7-CB2CA761372B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D788789A-4D43-42B9-B0F7-CB2CA761372B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D788789A-4D43-42B9-B0F7-CB2CA761372B}.Release|Any CPU.ActiveCfg = Release|Any CPU

7
data/resources/StringResources.de.resx

@ -415,11 +415,14 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S @@ -415,11 +415,14 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S
<value>Hilfebibliothek</value>
</data>
<data name="AddIns.HelpViewer.HelpModeLabel" xml:space="preserve">
<value>Hilfetyp</value>
<value>Hilfetyp wählen</value>
</data>
<data name="AddIns.HelpViewer.HLMNoActiveCatalogError" xml:space="preserve">
<value>Help Library Manager kann nicht gestartet werden, weil kein Hilfekatalog installiert oder ausgewählt wurde. Bitte überprüfen Sie die Hilfeeinstellungen (siehe Extras &gt; Optionen... &gt; Tools &gt; Microsoft Help Viewer).</value>
</data>
<data name="AddIns.HelpViewer.HLMNotAvailableDownloadWinSDK" xml:space="preserve">
<value>Der Help Library Manager wurde nicht gefunden. Um die Hilfe von SharpDevelop nutzen zu können, laden Sie bitte das Windows SDK 7.1 von Microsoft herunter und installieren Sie es.</value>
</data>
<data name="AddIns.HelpViewer.HLMNotFound" xml:space="preserve">
<value>Help Library Manager wurde nicht gefunden. Bitte stellen Sie sicher, dass es korrekt installiert wurde.</value>
</data>
@ -448,7 +451,7 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S @@ -448,7 +451,7 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S
<value>Hilfe anzeigen</value>
</data>
<data name="AddIns.HelpViewer.UseExternalHelp" xml:space="preserve">
<value>Externe Hilfe verwenden</value>
<value>Externen Hilfebetrachter verwenden</value>
</data>
<data name="AddIns.HelpViewer.UseOfflineHelpLabel" xml:space="preserve">
<value>Ich möchte die lokale Hilfe verwenden</value>

7
data/resources/StringResources.resx

@ -426,12 +426,15 @@ They will stop working after removing this AddIn! Are you sure you want to conti @@ -426,12 +426,15 @@ They will stop working after removing this AddIn! Are you sure you want to conti
<value>Help Library</value>
</data>
<data name="AddIns.HelpViewer.HelpModeLabel" xml:space="preserve">
<value>Help Mode</value>
<value>Set Help Preference</value>
</data>
<data name="AddIns.HelpViewer.HLMNoActiveCatalogError" xml:space="preserve">
<value>Cannot launch Help Library Manager, because there is no help catalog installed/selected. Please check your help settings (see Tools &gt; Options &gt; Tools &gt; Microsoft Help Viewer).</value>
<comment>Error message when there is no help catalog active</comment>
</data>
<data name="AddIns.HelpViewer.HLMNotAvailableDownloadWinSDK" xml:space="preserve">
<value>The Help Library Manager was not found. In order to use SharpDevelop's help feature please download and install Microsoft's Windows SDK 7.1.</value>
</data>
<data name="AddIns.HelpViewer.HLMNotFound" xml:space="preserve">
<value>Help Library Manager was not found. Please check if it was installed correctly.</value>
</data>
@ -460,7 +463,7 @@ They will stop working after removing this AddIn! Are you sure you want to conti @@ -460,7 +463,7 @@ They will stop working after removing this AddIn! Are you sure you want to conti
<value>Show Help</value>
</data>
<data name="AddIns.HelpViewer.UseExternalHelp" xml:space="preserve">
<value>Use external help</value>
<value>Use external help viewer</value>
</data>
<data name="AddIns.HelpViewer.UseOfflineHelpLabel" xml:space="preserve">
<value>I want to use local help</value>

38
doc/Dependencies.html

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
<html>
<head>
<title>SharpDevelop Dependencies</title>
</head>
<body>
<p>
<strong>SharpDevelop can take advantage of the following software if you install it:</strong>
</p>
<ul>
<li>
<a href="http://www.microsoft.com/en-us/download/details.aspx?id=40772">Microsoft .NET Framework 4.5.1 Developer Pack</a> for .NET 4.5 code completion documentation
</li>
<li>
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=6B6C21D2-2006-4AFA-9702-529FA782D63B&amp;displaylang=en">Microsoft Windows SDK for Windows 7 and .NET Framework 4</a> (strongly recommended!)
</li>
<li>
<a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5">Microsoft F#</a> for F# support
</li>
<li>
<a href="http://code.msdn.microsoft.com/sourceanalysis">StyleCop</a> for source analysis support.
</li>
<li>
<a href="https://code.google.com/p/tortoisegit/">TortoiseGit</a> for Git source control support.
</li>
<li>
<a href="http://tortoisesvn.net/">TortoiseSVN</a> for Subversion source control support.
</li>
<li>
<a href="http://shfb.codeplex.com/">SHFB</a> for documentation generation support.
</li>
<li>
<a href="http://wixtoolset.org/">WiX</a> for building installers.
</li>
</ul>
</body>
</html>

23
doc/technotes/Versioning.html

@ -13,15 +13,14 @@ @@ -13,15 +13,14 @@
<P>The assemblyInfo.cs files are updated by the tool
&quot;UpdateAssemblyInfo&quot;. UpdateAssemblyInfo
runs as pre-compile target and always sets the number in GlobalAssemblyInfo.cs
to the subversion revision number. That number is displayed
to the number of commits since a hard-coded start commit (<code>const string BaseCommit</code>). That number is displayed
in the splash screen, error dialog and about dialog.
It is also used as assembly version.
</P>
<p>
The revision number is retrieved by running a function in NSvn.Core.dll equivalent to "svn info"
in the "src" folder.
When this doesn't work (e.g. in an exported tree like the source code download on the build server), the
content of the file src/REVISION is used as revision number.
The revision number is retrieved by running "git rev-list" and counting the number of output lines.
When this doesn't work (e.g. in an exported tree like the source code download on the build server; or git not present in PATH),
the content of the file src/REVISION is used as revision number.
When even this fails, the revision '0' is used.
</p>
<H2>Publisher Policy</H2>
@ -39,7 +38,7 @@ would want to reference. @@ -39,7 +38,7 @@ would want to reference.
</P>
<P>The binding redirects always redirect requests of a version in the range
from some past version containing large breaking changes to the current version.
We will not do such changes anymore after the first release candidate of a SharpDevelop version,
We try to avoid such changes after the first release candidate of a SharpDevelop version,
so after the release of SharpDevelop x.y RC1, all future SharpDevelop x.y.*.* versions will be
in large parts binary compatible.
<br>
@ -51,5 +50,17 @@ compile it against the oldest SharpDevelop version you want your AddIn to run wi @@ -51,5 +50,17 @@ compile it against the oldest SharpDevelop version you want your AddIn to run wi
An AddIn compiled against 2.1.0.1800 will run with 2.1.0.1801 (and hopefully even with 2.1.23.45678),
but an AddIn compiled against 2.1.0.1801 will fail to load in SharpDevelop 2.1.0.1800.
</P>
<P>
Additionally, your AddIn should include a <code>&lt;Dependency&gt;</code> in its
.addin file to indicate which SharpDevelop version it is intended for.
This way, users trying to install the AddIn in an incompatible SharpDevelop version will be warned about the
incompatibility, instead of getting an obscure error message.
</P>
<pre>
&lt;Manifest>
&lt;Identity name = "YourAddInName"/>
&lt;Dependency addin="SharpDevelop" version="5.0"/>
&lt;/Manifest>
</pre>
</BODY>
</HTML>

2
src/AddIns/Analysis/CodeCoverage/Test/Utils/MockFileSystem.cs

@ -63,7 +63,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Utils @@ -63,7 +63,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Utils
throw new NotImplementedException();
}
System.Collections.Generic.IEnumerable<FileName> IReadOnlyFileSystem.GetFiles(DirectoryName directory, string searchPattern, SearchOption searchOption)
System.Collections.Generic.IEnumerable<FileName> IReadOnlyFileSystem.GetFiles(DirectoryName directory, string searchPattern, DirectorySearchOptions searchOptions)
{
throw new NotImplementedException();
}

14
src/AddIns/Analysis/CodeQuality/CodeQuality.csproj

@ -16,13 +16,6 @@ @@ -16,13 +16,6 @@
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
@ -37,6 +30,13 @@ @@ -37,6 +30,13 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />

1
src/AddIns/BackendBindings/FSharpBinding/FsOptions.cs

@ -7,6 +7,7 @@ using System.Windows.Forms; @@ -7,6 +7,7 @@ using System.Windows.Forms;
namespace FSharpBinding
{
[Obsolete("TODO: rewrite me in WPF")]
public class FsOptions : AbstractXmlFormsProjectOptionPanel
{
public override void LoadPanelContents()

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe

Binary file not shown.

BIN
src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll

Binary file not shown.

BIN
src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe

Binary file not shown.

1
src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/ApplicationSettingsPanel.cs

@ -10,6 +10,7 @@ using ICSharpCode.SharpDevelop.Project; @@ -10,6 +10,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.WixBinding
{
[Obsolete("TODO: rewrite me in WPF")]
public class ApplicationSettingsPanel : AbstractXmlFormsProjectOptionPanel
{
public override void LoadPanelContents()

1
src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/CompilerParametersPanel.cs

@ -9,6 +9,7 @@ using StringPair = System.Collections.Generic.KeyValuePair<System.String, System @@ -9,6 +9,7 @@ using StringPair = System.Collections.Generic.KeyValuePair<System.String, System
namespace ICSharpCode.WixBinding
{
[Obsolete("TODO: rewrite me in WPF")]
public class CompilerParametersPanel : AbstractXmlFormsProjectOptionPanel
{
public override void LoadPanelContents()

1
src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PreprocessorVariablesPanel.cs

@ -6,6 +6,7 @@ using ICSharpCode.SharpDevelop.Gui.OptionPanels; @@ -6,6 +6,7 @@ using ICSharpCode.SharpDevelop.Gui.OptionPanels;
namespace ICSharpCode.WixBinding
{
[Obsolete("TODO: rewrite me in WPF")]
public class PreprocessorVariablesPanel : AbstractXmlFormsProjectOptionPanel
{
public override void LoadPanelContents()

1
src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SemicolonSeparatedNameValueListBinding.cs

@ -11,6 +11,7 @@ namespace ICSharpCode.WixBinding @@ -11,6 +11,7 @@ namespace ICSharpCode.WixBinding
/// list of name/value pairs separated by a semicolon.
/// (e.g. "DATADIR=C:\projects\data; SRCDIR=C:\projects\src")
/// </summary>
[Obsolete("XML Forms are obsolete")]
public class SemicolonSeparatedNameValueListBinding : ConfigurationGuiBinding
{
NameValueListEditor editor;

28
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs

@ -194,8 +194,6 @@ namespace ICSharpCode.XamlBinding @@ -194,8 +194,6 @@ namespace ICSharpCode.XamlBinding
}
string headerText;
bool descriptionCreated;
string description;
public object Header {
get {
@ -210,17 +208,7 @@ namespace ICSharpCode.XamlBinding @@ -210,17 +208,7 @@ namespace ICSharpCode.XamlBinding
}
public object Content {
get {
// if (!descriptionCreated) {
// string entityDoc = ctor.Documentation;
// if (!string.IsNullOrEmpty(entityDoc)) {
// description = CodeCompletionItem.ConvertDocumentation(entityDoc);
// }
// descriptionCreated = true;
// }
// return description;
return null;
}
get { return ctor.Documentation; }
}
}
@ -228,8 +216,6 @@ namespace ICSharpCode.XamlBinding @@ -228,8 +216,6 @@ namespace ICSharpCode.XamlBinding
{
string insightText;
string headerText;
string description;
bool descriptionCreated;
IMember member;
public MemberInsightItem(IMember member, string insightText)
@ -249,17 +235,7 @@ namespace ICSharpCode.XamlBinding @@ -249,17 +235,7 @@ namespace ICSharpCode.XamlBinding
}
public object Content {
get {
// if (!descriptionCreated) {
// string entityDoc = member.Documentation;
// if (!string.IsNullOrEmpty(entityDoc)) {
// description = CompletionItem.ConvertDocumentation(entityDoc);
// }
// descriptionCreated = true;
// }
// return description;
return null;
}
get { return member.Documentation; }
}
}
}

16
src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin

@ -75,6 +75,16 @@ @@ -75,6 +75,16 @@
label = "${res:MainWindow.Windows.Debug.DebugExecutable}"
class = "Debugger.AddIn.DebugExecutableMenuCommand"/>
</Condition>
<!-- <MenuItem id="AddExpressionBreakpoint"
insertafter="Toggle Breakpoint"
label = "${res:MainWindow.Windows.Debug.AddExpressionBreakpoint}"
shortcut="Shift|F7"
class = "Debugger.AddIn.AddExpressionBreakpointCommand"/>-->
<MenuItem id="AddWatchExpression"
insertafter="AddExpressionBreakpoint"
label = "${res:MainWindow.Windows.Debug.AddWatchExpression}"
shortcut="Ctrl|F7"
class = "Debugger.AddIn.AddWatchExpressionCommand"/>
</Path>
<Path name = "/SharpDevelop/Workbench/Pads">
@ -128,12 +138,6 @@ @@ -128,12 +138,6 @@
defaultPosition = "Bottom, Hidden" />
</Path>
<Path name ="/SharpDevelop/Pads/WatchPad/ContextMenu">
<MenuItem id="AddWatch" label="${res:MainWindow.Windows.Debug.Watch.AddWatch}" class="Debugger.AddIn.AddWatchCommand" />
<MenuItem id="RemoveWatch" label="${res:MainWindow.Windows.Debug.Watch.RemoveWatch}" class="Debugger.AddIn.RemoveWatchCommand" />
<MenuItem id="ClearWatches" label="${res:MainWindow.Windows.Debug.Watch.RemoveAll}" class="Debugger.AddIn.ClearWatchesCommand" />
</Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog">
<OptionPanel id = "Debugging"
label = "${res:Dialog.Options.IDEOptions.Debugging}"

6
src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs

@ -300,17 +300,17 @@ namespace Debugger.AddIn @@ -300,17 +300,17 @@ namespace Debugger.AddIn
Value Visit(TypeResolveResult result)
{
throw new GetValueException("Types not supported!");
throw new GetValueException("Error: Types not supported.");
}
Value Visit(UnknownMemberResolveResult result)
{
throw new GetValueException("Member not found!");
throw new GetValueException("Error: Member '{0}' not found.", result.MemberName);
}
Value Visit(UnknownIdentifierResolveResult result)
{
throw new GetValueException("Identifier not found!");
throw new GetValueException("Error: Identifier '{0}' not declared.", result.Identifier);
}
Value Visit(ArrayAccessResolveResult result)

6
src/AddIns/Debugger/Debugger.AddIn/Pads/CallStackPad.cs

@ -116,15 +116,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -116,15 +116,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void RefreshPad()
{
Thread thead = WindowsDebugger.CurrentThread;
if (thead == null) {
Thread thread = WindowsDebugger.CurrentThread;
if (thread == null) {
listView.ItemsSource = null;
} else {
var items = new ObservableCollection<CallStackItem>();
bool previousItemIsExternalMethod = false;
WindowsDebugger.CurrentProcess.EnqueueForEach(
listView.Dispatcher,
thead.GetCallstack(100),
thread.GetCallstack(100),
f => items.AddIfNotNull(CreateItem(f, ref previousItemIsExternalMethod))
);
listView.ItemsSource = items;

25
src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs

@ -56,7 +56,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -56,7 +56,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
tree.ShowRoot = false;
tree.View = (GridView)res["variableGridView"];
tree.SetValue(GridViewColumnAutoSize.AutoWidthProperty, "50%;25%;25%");
//tree.ContextMenu = MenuService.CreateContextMenu(this, "/SharpDevelop/Pads/WatchPad/ContextMenu");
tree.MouseDoubleClick += delegate(object sender, MouseButtonEventArgs e) {
if (this.tree.SelectedItem == null) {
AddWatch(focus: true);
@ -65,34 +64,13 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -65,34 +64,13 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
panel.Children.Add(tree);
// ProjectService.SolutionLoaded += delegate { LoadNodes(); };
// ProjectService.SolutionClosing += delegate { SaveNodes(); };
// SD.ProjectService.CurrentSolution.PreferencesSaving += delegate { SaveNodes(); };
// LoadNodes();
WindowsDebugger.RefreshingPads += RefreshPad;
RefreshPad();
}
// void LoadNodes()
// {
// if (ProjectService.OpenSolution != null) {
// var props = ProjectService.OpenSolution.Preferences.NestedProperties("Watches");
// foreach (var key in props.Keys) {
// this.Items.Add(new TreeNode(props.Get(key, ""), () => null).ToSharpTreeNode());
// }
// }
// }
//
// void SaveNodes()
// {
// if (ProjectService.OpenSolution != null) {
// var props = new Properties();
// ProjectService.OpenSolution.Preferences.SetNestedProperties("Watches", props);
// foreach(var node in this.Items.OfType<TreeNode>()) {
// props.Set(node.Name, node.EvalEnabled);
// }
// }
// }
public void AddWatch(string expression = null, bool focus = false)
{
var node = MakeNode(expression);
@ -145,6 +123,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -145,6 +123,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
process.EnqueueForEach(
Dispatcher.CurrentDispatcher,
expressions,
expr => this.Items.Add(MakeNode(expr)),
expr => this.Items.Add(MakeNode(expr))
);
}

16
src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPadCommands.cs

@ -3,6 +3,9 @@ @@ -3,6 +3,9 @@
using System;
using System.Linq;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using Debugger.AddIn.Pads;
using Debugger.AddIn.Pads.Controls;
using Debugger.AddIn.TreeModel;
@ -47,4 +50,17 @@ namespace Debugger.AddIn @@ -47,4 +50,17 @@ namespace Debugger.AddIn
}
}
}
public class AddWatchExpressionCommand : AbstractMenuCommand
{
public override void Run()
{
var editor = SD.GetActiveViewContentService<ITextEditor>();
if (editor == null) return;
var pad = SD.Workbench.GetPad(typeof(WatchPad));
if (pad == null) return;
pad.BringPadToFront();
((WatchPad)pad.PadContent).AddWatch(editor.SelectedText);
}
}
}

56
src/AddIns/Debugger/Debugger.AddIn/TreeModel/Utils.cs

@ -7,6 +7,7 @@ using System.Reflection; @@ -7,6 +7,7 @@ using System.Reflection;
using System.Windows.Forms;
using System.Windows.Threading;
using ICSharpCode.SharpDevelop;
using Debugger.AddIn.Pads.Controls;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
@ -41,46 +42,39 @@ namespace Debugger.AddIn.TreeModel @@ -41,46 +42,39 @@ namespace Debugger.AddIn.TreeModel
);
}
public static void EnqueueForEach<T>(this Process process, Dispatcher dispatcher, IList<T> items, Action<T> work)
public static void EnqueueForEach<T>(this Process process, Dispatcher dispatcher, IList<T> items, Action<T> work, Action<T> failAction = null)
{
long debuggeeStateWhenEnqueued = process.DebuggeeState;
dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate { ProcessItems(process, dispatcher, 0, items, work, debuggeeStateWhenEnqueued); }
);
foreach (T item in items) {
var workItem = item;
dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate {
if (!ProcessItem(process, workItem, work, debuggeeStateWhenEnqueued) && failAction != null)
failAction(workItem);
}
);
}
}
static void ProcessItems<T>(Process process, Dispatcher dispatcher, int startIndex, IList<T> items, Action<T> work, long debuggeeStateWhenEnqueued)
static bool ProcessItem<T>(Process process, T item, Action<T> work, long debuggeeStateWhenEnqueued)
{
var watch = new System.Diagnostics.Stopwatch();
watch.Start();
for (int i = startIndex; i < items.Count; i++) {
int index = i;
if (process.IsPaused && debuggeeStateWhenEnqueued == process.DebuggeeState) {
try {
// Do the work, this may recursively enqueue more work
work(items[index]);
} catch (System.Exception ex) {
if (process == null || process.HasExited) {
// Process unexpectedly exited - silently ignore
} else {
MessageService.ShowException(ex);
}
break;
if (process.IsPaused && debuggeeStateWhenEnqueued == process.DebuggeeState) {
try {
// Do the work, this may recursively enqueue more work
work(item);
return true;
} catch (System.Exception ex) {
if (process == null || process.HasExited) {
// Process unexpectedly exited - silently ignore
} else {
MessageService.ShowException(ex);
}
}
// if we are too slow move to background
if (watch.ElapsedMilliseconds > 100) {
dispatcher.BeginInvoke(
DispatcherPriority.Background,
(Action)delegate { ProcessItems(process, dispatcher, index + 1, items, work, debuggeeStateWhenEnqueued); }
);
break;
SD.Log.Error("ProcessItem cancelled", ex);
}
}
return false;
}
}

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

@ -55,7 +55,6 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -55,7 +55,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
get { return primaryTextEditor; }
}
[Obsolete()]
public CodeEditorView ActiveTextEditor {
get { return primaryTextEditor; }
}

8
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs

@ -27,6 +27,7 @@ using ICSharpCode.AvalonEdit.Highlighting; @@ -27,6 +27,7 @@ using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
@ -231,7 +232,12 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -231,7 +232,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
MemberResolveResult mrr = result as MemberResolveResult;
if (mrr != null) {
HelpProvider.ShowHelp(mrr.Member);
if ((mrr.Member.DeclaringType.Kind == TypeKind.Enum) &&
(mrr.Member.DeclaringType.GetDefinition() != null)) {
HelpProvider.ShowHelp(mrr.Member.DeclaringType.GetDefinition());
} else {
HelpProvider.ShowHelp(mrr.Member);
}
}
}
#endregion

1
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/AddComponentsDialog.cs

@ -18,6 +18,7 @@ using ICSharpCode.SharpDevelop.Parser; @@ -18,6 +18,7 @@ using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.FormsDesigner.Gui
{
#pragma warning disable 618
public class AddComponentsDialog : BaseSharpDevelopForm
{
ArrayList selectedComponents;

1
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ConfigureSideBarDialog.cs

@ -13,6 +13,7 @@ using ICSharpCode.SharpDevelop.Gui.XmlForms; @@ -13,6 +13,7 @@ using ICSharpCode.SharpDevelop.Gui.XmlForms;
namespace ICSharpCode.FormsDesigner.Gui
{
#pragma warning disable 618
public class ConfigureSideBarDialog : BaseSharpDevelopForm
{
ArrayList oldComponents;

1
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/RenameCategoryDialog.cs

@ -11,6 +11,7 @@ using ICSharpCode.SharpDevelop.Widgets.SideBar; @@ -11,6 +11,7 @@ using ICSharpCode.SharpDevelop.Widgets.SideBar;
namespace ICSharpCode.FormsDesigner.Gui
{
#pragma warning disable 618
public class RenameCategoryDialog : BaseSharpDevelopForm
{
string categoryName = String.Empty;

5
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddNewFileCommand.cs

@ -8,6 +8,7 @@ using System.Runtime.Serialization.Formatters.Binary; @@ -8,6 +8,7 @@ using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ResourceEditor
@ -16,7 +17,7 @@ namespace ResourceEditor @@ -16,7 +17,7 @@ namespace ResourceEditor
{
public override void Run()
{
ResourceEditorControl editor = ((ResourceEditWrapper)WorkbenchSingleton.Workbench.ActiveViewContent).ResourceEditor;
ResourceEditorControl editor = ((ResourceEditWrapper)SD.Workbench.ActiveViewContent).ResourceEditor;
if(editor.ResourceList.WriteProtected) {
return;
@ -28,7 +29,7 @@ namespace ResourceEditor @@ -28,7 +29,7 @@ namespace ResourceEditor
fdiag.Multiselect = true;
fdiag.CheckFileExists = true;
if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
foreach (string filename in fdiag.FileNames) {
string oresname = Path.ChangeExtension(Path.GetFileName(filename), null);
if (oresname == "") oresname = "new";

4
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddStringEntryCommand.cs

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
using System;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop;
namespace ResourceEditor
{
@ -12,7 +12,7 @@ namespace ResourceEditor @@ -12,7 +12,7 @@ namespace ResourceEditor
{
public override void Run()
{
ResourceEditorControl editor = ((ResourceEditWrapper)WorkbenchSingleton.Workbench.ActiveViewContent).ResourceEditor;
ResourceEditorControl editor = ((ResourceEditWrapper)SD.Workbench.ActiveViewContent).ResourceEditor;
if(editor.ResourceList.WriteProtected) {
return;

4
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/ClipboardCommands.cs

@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop;
namespace ResourceEditor
{
@ -12,7 +12,7 @@ namespace ResourceEditor @@ -12,7 +12,7 @@ namespace ResourceEditor
{
public override void Run()
{
ResourceEditWrapper editor = (ResourceEditWrapper)WorkbenchSingleton.Workbench.ActiveViewContent;
ResourceEditWrapper editor = (ResourceEditWrapper)SD.Workbench.ActiveViewContent;
editor.SelectAll();
}

5
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/SaveEntryAsCommand.cs

@ -7,6 +7,7 @@ using System.IO; @@ -7,6 +7,7 @@ using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ResourceEditor
@ -15,7 +16,7 @@ namespace ResourceEditor @@ -15,7 +16,7 @@ namespace ResourceEditor
{
public override void Run()
{
ResourceEditorControl editor = ((ResourceEditWrapper)WorkbenchSingleton.Workbench.ActiveViewContent).ResourceEditor;
ResourceEditorControl editor = ((ResourceEditWrapper)SD.Workbench.ActiveViewContent).ResourceEditor;
ResourceList list = editor.ResourceList;
if(list.SelectedItems.Count != 1) {
@ -48,7 +49,7 @@ namespace ResourceEditor @@ -48,7 +49,7 @@ namespace ResourceEditor
return;
}
DialogResult dr = sdialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window);
DialogResult dr = sdialog.ShowDialog(SD.WinForms.MainWin32Window);
sdialog.Dispose();
if (dr != DialogResult.OK) {
return;

3
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/BitmapView.cs

@ -6,6 +6,7 @@ using System.Drawing; @@ -6,6 +6,7 @@ using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
namespace ResourceEditor
{
@ -38,7 +39,7 @@ namespace ResourceEditor @@ -38,7 +39,7 @@ namespace ResourceEditor
fileDialog.Filter = "All files (*.*)|*.*";
fileDialog.CheckFileExists = true;
if(fileDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
if(fileDialog.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
try {
bitmap = new Bitmap(fileDialog.FileName);
} catch {

6
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs

@ -47,10 +47,14 @@ namespace ICSharpCode.WpfDesign.Designer.Controls @@ -47,10 +47,14 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
{
base.OnApplyTemplate();
var bnd = new Binding("IsVisible") {Source = item.Component};
bnd.Converter = CollapsedWhenFalse.Instance;
BindingOperations.SetBinding(this, UIElement.VisibilityProperty, bnd);
var surface = this.TryFindParent<DesignSurface>();
if (surface != null && surface.ZoomControl != null)
{
var bnd = new Binding("CurrentZoom") {Source = surface.ZoomControl};
bnd = new Binding("CurrentZoom") {Source = surface.ZoomControl};
bnd.Converter = InvertedZoomConverter.Instance;
BindingOperations.SetBinding(scaleTransform, ScaleTransform.ScaleXProperty, bnd);

16
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs

@ -13,6 +13,7 @@ using System.Windows.Threading; @@ -13,6 +13,7 @@ using System.Windows.Threading;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Designer.Controls;
using ICSharpCode.WpfDesign.Designer.Xaml;
namespace ICSharpCode.WpfDesign.Designer
{
@ -35,20 +36,29 @@ namespace ICSharpCode.WpfDesign.Designer @@ -35,20 +36,29 @@ namespace ICSharpCode.WpfDesign.Designer
}
}
static void RunHitTest(Visual reference, Point point, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback)
void RunHitTest(Visual reference, Point point, HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback)
{
VisualTreeHelper.HitTest(reference, filterCallback, resultCallback,
new PointHitTestParameters(point));
}
static HitTestFilterBehavior FilterHitTestInvisibleElements(DependencyObject potentialHitTestTarget)
HitTestFilterBehavior FilterHitTestInvisibleElements(DependencyObject potentialHitTestTarget)
{
UIElement element = potentialHitTestTarget as UIElement;
if (element != null) {
if (!(element.IsHitTestVisible && element.Visibility == Visibility.Visible)) {
return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
}
var designItem = Context.Services.Component.GetDesignItem(element) as XamlDesignItem;
if (designItem != null && designItem.IsDesignTimeLocked) {
return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
}
}
return HitTestFilterBehavior.Continue;
}
@ -103,7 +113,7 @@ namespace ICSharpCode.WpfDesign.Designer @@ -103,7 +113,7 @@ namespace ICSharpCode.WpfDesign.Designer
if (continueHitTest && testDesignSurface) {
RunHitTest(
this.Child, mousePosition, delegate { return HitTestFilterBehavior.Continue; },
this.Child, mousePosition, FilterHitTestInvisibleElements,
delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);

15
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.WpfDesign.Designer @@ -31,7 +31,7 @@ namespace ICSharpCode.WpfDesign.Designer
/// </summary>
[TemplatePart(Name = "PART_DesignContent", Type = typeof(ContentControl))]
[TemplatePart(Name = "PART_Zoom", Type = typeof(ZoomControl))]
public class DesignSurface : ContentControl
public partial class DesignSurface : ContentControl
{
private FocusNavigator _focusNav;
@ -73,10 +73,21 @@ namespace ICSharpCode.WpfDesign.Designer @@ -73,10 +73,21 @@ namespace ICSharpCode.WpfDesign.Designer
base.OnApplyTemplate();
}
private bool enableBringIntoView = false;
public void ScrollIntoView(DesignItem designItem)
{
enableBringIntoView = true;
LogicalTreeHelper.BringIntoView(designItem.View);
enableBringIntoView = false;
}
void _partDesignContent_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
if (!enableBringIntoView)
e.Handled = true;
enableBringIntoView = false;
}
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)

92
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs

@ -3,15 +3,17 @@ @@ -3,15 +3,17 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Extensions;
using System.Windows.Controls;
using System.Windows;
using ICSharpCode.WpfDesign.Designer.Controls;
using System.Windows.Controls;
using System.Windows.Media;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Designer.Controls;
using ICSharpCode.WpfDesign.Extensions;
namespace ICSharpCode.WpfDesign.Designer.Extensions
{
[ExtensionFor(typeof(Panel))]
@ -21,6 +23,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions @@ -21,6 +23,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
public class BorderForInvisibleControl : PermanentAdornerProvider
{
AdornerPanel adornerPanel;
AdornerPanel cachedAdornerPanel;
protected override void OnInitialized()
{
@ -28,52 +31,79 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions @@ -28,52 +31,79 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (ExtendedItem.Component is Border)
{
ExtendedItem.PropertyChanged+= (s, e) => ExtendedItem_PropertyChanged();
ExtendedItem.PropertyChanged += (s, e) => UpdateAdorner();
}
// If component is a ContentControl it must be of type ContentControl specifically, and not derived types like Label and Button.
if (!(ExtendedItem.Component is ContentControl) || ExtendedItem.Component.GetType() == typeof(ContentControl)) {
UpdateAdorner();
ExtendedItem_PropertyChanged();
var element = ExtendedItem.Component as UIElement;
if (element != null) {
element.IsVisibleChanged += (s, e) => UpdateAdorner();
}
}
else if (ExtendedItem.Component is Panel || ExtendedItem.Component is Viewbox || ExtendedItem.Component is ContentControl)
{
CreateAdorner();
}
}
void ExtendedItem_PropertyChanged()
void UpdateAdorner()
{
if (ExtendedItem.Component is Border)
{
var border = ExtendedItem.Component as Border;
if (border.ReadLocalValue(Border.BorderBrushProperty) == DependencyProperty.UnsetValue || border.ReadLocalValue(Border.BorderThicknessProperty) == DependencyProperty.UnsetValue)
{
var element = ExtendedItem.Component as UIElement;
if (element != null) {
var border = element as Border;
if (element.IsVisible && (border == null || IsAnyBorderEdgeInvisible(border))) {
CreateAdorner();
if (border != null) {
var adornerBorder = (Border)adornerPanel.Children[0];
if (IsBorderBrushInvisible(border))
adornerBorder.BorderThickness = new Thickness(1);
else
adornerBorder.BorderThickness = new Thickness(border.BorderThickness.Left > 0 ? 0 : 1,
border.BorderThickness.Top > 0 ? 0 : 1,
border.BorderThickness.Right > 0 ? 0 : 1,
border.BorderThickness.Bottom > 0 ? 0 : 1);
}
}
else
{
else {
RemoveAdorner();
}
}
}
}
bool IsAnyBorderEdgeInvisible(Border border)
{
return IsBorderBrushInvisible(border) || border.BorderThickness.Left == 0 || border.BorderThickness.Top == 0 || border.BorderThickness.Right == 0 || border.BorderThickness.Bottom == 0;
}
bool IsBorderBrushInvisible(Border border)
{
return border.BorderBrush == null || border.BorderBrush == Brushes.Transparent;
}
private void CreateAdorner()
{
if (adornerPanel == null)
{
adornerPanel = new AdornerPanel();
adornerPanel.Order = AdornerOrder.Background;
var border = new Border();
border.BorderThickness = new Thickness(1);
border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC));
border.IsHitTestVisible = false;
AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent);
adornerPanel.Children.Add(border);
if (adornerPanel == null) {
if (cachedAdornerPanel == null) {
cachedAdornerPanel = new AdornerPanel();
cachedAdornerPanel.Order = AdornerOrder.Background;
var border = new Border();
border.BorderThickness = new Thickness(1);
border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC));
border.IsHitTestVisible = false;
AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent);
cachedAdornerPanel.Children.Add(border);
}
adornerPanel = cachedAdornerPanel;
Adorners.Add(adornerPanel);
}
}
private void RemoveAdorner()
{
if (adornerPanel != null)
{
if (adornerPanel != null) {
Adorners.Remove(adornerPanel);
adornerPanel = null;
}

3
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs

@ -18,10 +18,9 @@ using System.Windows.Controls.Primitives; @@ -18,10 +18,9 @@ using System.Windows.Controls.Primitives;
namespace ICSharpCode.WpfDesign.Designer.Extensions
{
[ExtensionFor(typeof(Panel))]
[ExtensionFor(typeof(ContentControl))]
[ExtensionFor(typeof(Control))]
[ExtensionFor(typeof(Border))]
[ExtensionFor(typeof(Viewbox))]
[ExtensionFor(typeof(ItemsControl))]
public class DefaultPlacementBehavior : BehaviorExtension, IPlacementBehavior
{
static List<Type> _contentControlsNotAllowedToAdd;

9
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs

@ -147,6 +147,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions @@ -147,6 +147,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (alignment.Vertical == VerticalAlignment.Bottom) dy = drag.Delta.Y;
var designPanel = ExtendedItem.Services.DesignPanel as DesignPanel;
if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) && alignment.Horizontal != HorizontalAlignment.Center && alignment.Vertical != VerticalAlignment.Center)
{
if (dx > dy)
dx = dy;
else
dy = dx;
}
if (zoom != null)
{
dx = dx * (1 / zoom.CurrentZoom);

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt

@ -14,6 +14,7 @@ Copied from the Fugue Icon Library and left unmodified: @@ -14,6 +14,7 @@ Copied from the Fugue Icon Library and left unmodified:
- Icons.16x16.WpfOutline.EyeClosed.png
- Icons.16x16.GuideSnap.png
- Icons.16x16.GridSnap.png
- lock.png
Copied from the Fugue Icon Library and modified or mashed up with other Fugue
Icons or parts taken from them:

BIN
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/lock.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

34
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs

@ -53,12 +53,34 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -53,12 +53,34 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
get { return (object)GetValue(RootProperty); }
set { SetValue(RootProperty, value); }
}
#region Filtering
public static readonly DependencyProperty FilterProperty =
DependencyProperty.Register("Filter", typeof(string), typeof(DragTreeView), new PropertyMetadata(OnFilterPropertyChanged));
public string Filter {
get { return (string)GetValue(FilterProperty); }
set { SetValue(FilterProperty, value); }
}
private static void OnFilterPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctl = d as DragTreeView;
var ev = ctl.FilterChanged;
if (ev != null)
ev(ctl.Filter);
}
public event Action<string> FilterChanged;
public virtual bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem)
{
return true;
}
//public object[] SelectedItems
//{
// get { return Selection.Select(item => item.DataContext).ToArray(); }
//}
#endregion
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
@ -261,7 +283,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -261,7 +283,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
OnSelectionChanged();
}
void SelectOnly(DragTreeViewItem item)
protected virtual void SelectOnly(DragTreeViewItem item)
{
ClearSelection();
Select(item);

32
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs

@ -20,10 +20,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -20,10 +20,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
public class DragTreeViewItem : TreeViewItem
{
ContentPresenter part_header;
static DragTreeViewItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DragTreeViewItem),
new FrameworkPropertyMetadata(typeof(DragTreeViewItem)));
new FrameworkPropertyMetadata(typeof(DragTreeViewItem)));
}
public DragTreeViewItem()
@ -37,24 +39,50 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -37,24 +39,50 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
ParentTree = this.GetVisualAncestors().OfType<DragTreeView>().FirstOrDefault();
if (ParentTree != null) {
ParentTree.ItemAttached(this);
ParentTree.FilterChanged += ParentTree_FilterChanged;
}
}
void ParentTree_FilterChanged(string obj)
{
var v = ParentTree.ShouldItemBeVisible(this);
if (v)
part_header.Visibility = Visibility.Visible;
else
part_header.Visibility = Visibility.Collapsed;
}
void DragTreeViewItem_Unloaded(object sender, RoutedEventArgs e)
{
if (ParentTree != null) {
ParentTree.ItemDetached(this);
ParentTree.FilterChanged -= ParentTree_FilterChanged;
}
ParentTree = null;
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
part_header = GetTemplateChild("PART_Header") as ContentPresenter;
}
public new static readonly DependencyProperty IsSelectedProperty =
Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem));
Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem), new FrameworkPropertyMetadata(OnIsSelectedChanged));
public new bool IsSelected {
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
public static void OnIsSelectedChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)
{
var el = s as FrameworkElement;
if (el != null)
el.BringIntoView();
}
public static readonly DependencyProperty IsDragHoverProperty =
DependencyProperty.Register("IsDragHover", typeof(bool), typeof(DragTreeViewItem));

59
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml

@ -2,7 +2,8 @@ @@ -2,7 +2,8 @@
x:Name="root"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Default="clr-namespace:ICSharpCode.WpfDesign.Designer.OutlineView">
xmlns:Default="clr-namespace:ICSharpCode.WpfDesign.Designer.OutlineView"
xmlns:Controls="clr-namespace:ICSharpCode.WpfDesign.Designer.Controls">
<UserControl.Resources>
@ -34,9 +35,38 @@ @@ -34,9 +35,38 @@
</Setter>
</Style>
<Style TargetType="ToggleButton" x:Key="lockedStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid Background="Transparent" IsHitTestVisible="True">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="locked" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="unlocked" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unchecked"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Image Width="16" Height="16" x:Name="locked" Stretch="Uniform" Visibility="Hidden" Source="pack://application:,,,/ICSharpCode.WpfDesign.Designer;component/Images/lock.png" />
<Ellipse x:Name="unlocked" Width="6" Height="6" Stroke="Black" StrokeThickness="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<HierarchicalDataTemplate DataType="{x:Type Default:OutlineNode}"
ItemsSource="{Binding Children}">
ItemsSource="{Binding Children}">
<DockPanel>
<ToggleButton Style="{StaticResource lockedStyle}" DockPanel.Dock="Right" Width="20" Margin="0,0,5,0" IsChecked="{Binding IsDesignTimeLocked}" />
<ToggleButton Style="{StaticResource eyeStyle}" DockPanel.Dock="Right" Width="20" Margin="0,0,5,0" IsChecked="{Binding IsDesignTimeVisible}" />
<Default:IconItem Icon="../Images/Tag.png" Text="{Binding Name}" />
</DockPanel>
@ -44,15 +74,20 @@ @@ -44,15 +74,20 @@
</UserControl.Resources>
<Default:OutlineTreeView Root="{Binding Root, ElementName=root}">
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type Default:DragTreeViewItem}">
<Setter Property="IsSelected"
Value="{Binding IsSelected}" />
<Setter Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
</Style>
</ItemsControl.ItemContainerStyle>
</Default:OutlineTreeView>
<DockPanel LastChildFill="True">
<Controls:ClearableTextBox DockPanel.Dock="Top" Height="20" Text="{Binding Filter, ElementName=OutlineTreeView}" />
<Default:OutlineTreeView x:Name="OutlineTreeView" Root="{Binding Root, ElementName=root}">
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type Default:DragTreeViewItem}">
<Setter Property="IsSelected"
Value="{Binding IsSelected}" />
<Setter Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
</Style>
</ItemsControl.ItemContainerStyle>
</Default:OutlineTreeView>
</DockPanel>
</UserControl>

59
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs

@ -2,19 +2,21 @@ @@ -2,19 +2,21 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.ComponentModel;
using ICSharpCode.WpfDesign;
using System.Collections.ObjectModel;
using System.Collections;
using ICSharpCode.WpfDesign.Designer;
using ICSharpCode.WpfDesign.XamlDom;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using ICSharpCode.WpfDesign;
using ICSharpCode.WpfDesign.Designer;
using ICSharpCode.WpfDesign.Designer.Xaml;
using ICSharpCode.WpfDesign.XamlDom;
namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
public class OutlineNode : INotifyPropertyChanged
@ -50,6 +52,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -50,6 +52,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden;
}
var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
if (locked != null && (bool) locked == true) {
this._isDesignTimeLocked = true;
}
//TODO
DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
@ -90,13 +97,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -90,13 +97,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
}
}
bool _isDesignTimeVisible = true;
public bool IsDesignTimeVisible
{
get {
return _isDesignTimeVisible;
get {
return _isDesignTimeVisible;
}
set {
_isDesignTimeVisible = value;
@ -112,6 +118,26 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -112,6 +118,26 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
}
}
bool _isDesignTimeLocked = false;
public bool IsDesignTimeLocked
{
get {
return _isDesignTimeLocked;
}
set {
_isDesignTimeLocked = value;
((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked;
RaisePropertyChanged("IsDesignTimeLocked");
// if (value)
// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
// else
// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
}
}
ObservableCollection<OutlineNode> children = new ObservableCollection<OutlineNode>();
public ObservableCollection<OutlineNode> Children {
@ -168,6 +194,21 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -168,6 +194,21 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
var node = OutlineNode.Create(item);
Children.Add(node);
}
else
{
var content = item.ContentProperty;
if (content != null)
{
if (content.IsCollection) {
UpdateChildrenCore(content.CollectionElements);
}
else {
if (content.Value != null) {
UpdateChildrenCore(new[] { content.Value });
}
}
}
}
}
}

18
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs

@ -33,5 +33,23 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView @@ -33,5 +33,23 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
foreach (var item in items)
_customOutlineNodes.Add(item.DataContext as OutlineNode);
}
public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem)
{
var node = dragTreeViewitem.DataContext as OutlineNode;
return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower());
}
protected override void SelectOnly(DragTreeViewItem item)
{
base.SelectOnly(item);
var node = item.DataContext as OutlineNode;
var surface = node.DesignItem.View.TryFindParent<DesignSurface>();
if (surface != null)
surface.ScrollIntoView(node.DesignItem);
}
}
}

12
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml

@ -98,20 +98,20 @@ @@ -98,20 +98,20 @@
<ControlTemplate TargetType="{x:Type Default:DragTreeViewItem}">
<DockPanel Background="White">
<DockPanel x:Name="bg"
<Grid x:Name="bg"
Margin="{TemplateBinding Level, Converter={StaticResource LevelConverter}}"
DockPanel.Dock="Top"
Background="{TemplateBinding Background}">
<ToggleButton x:Name="expandButton"
<ToggleButton HorizontalAlignment="Left" x:Name="expandButton"
Style="{StaticResource ExpandButtonStyle}"
DockPanel.Dock="Left"
Margin="{TemplateBinding Level, Converter={StaticResource LevelConverter}}"
IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" />
<Border x:Name="contentBorder"
Margin="11,0,0,0"
HorizontalAlignment="Stretch">
<ContentPresenter x:Name="PART_Header"
ContentSource="Header" />
</Border>
</DockPanel>
</Grid>
<ItemsPresenter x:Name="itemsHost" />
<DockPanel.ContextMenu>
<ContextMenu>
@ -144,7 +144,7 @@ @@ -144,7 +144,7 @@
Value="False">
<Setter TargetName="expandButton"
Property="Visibility"
Value="Hidden" />
Value="Collapsed" />
</Trigger>
<Trigger Property="IsSelected"
Value="True">

4
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/UIHelpers.cs → src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/UIHelpers.cs

@ -8,9 +8,9 @@ using System.Text; @@ -8,9 +8,9 @@ using System.Text;
using System.Windows;
using System.Windows.Media;
namespace ICSharpCode.WpfDesign
namespace ICSharpCode.WpfDesign.Designer
{
public static class UIHelpers
static class UIHelpers
{
public static DependencyObject GetParentObject(this DependencyObject child)
{

4
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj

@ -231,6 +231,7 @@ @@ -231,6 +231,7 @@
<Compile Include="Services\XamlErrorService.cs" />
<Compile Include="SharedInstances.cs" />
<Compile Include="ThumbnailView\ThumbnailView.cs" />
<Compile Include="UIHelpers.cs" />
<Compile Include="Xaml\XamlEditOperations.cs" />
<Compile Include="Xaml\XamlLoadSettings.cs" />
<Compile Include="Xaml\XamlModelCollectionElementsCollection.cs" />
@ -361,4 +362,7 @@ @@ -361,4 +362,7 @@
<Resource Include="Images\Icons.16x16.GuideSnap.png" />
<Resource Include="Images\Icons.16x16.GridSnap.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\lock.png" />
</ItemGroup>
</Project>

43
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs

@ -90,24 +90,37 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml @@ -90,24 +90,37 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
}
if (_context.RootItem != null && !string.IsNullOrEmpty(site.Name)) {
var nameScope = _context.RootItem.Component as INameScope;
nameScope = NameScope.GetNameScope((DependencyObject) _context.RootItem.Component);
var fnd = nameScope.FindName(site.Name);
if (fnd != null) {
string newNm = site.Name + "_Copy";
fnd = nameScope.FindName(newNm);
if (fnd == null)
site.Name = newNm;
else {
var nameScope = NameScopeHelper.GetNameScopeFromObject(_context.RootItem.Component);
if (nameScope != null) {
// The object will be a part of the RootItem namescope, remove local namescope if set
NameScopeHelper.ClearNameScopeProperty(obj.Instance);
string newName = site.Name;
if (nameScope.FindName(newName) != null) {
int copyIndex = newName.LastIndexOf("_Copy", StringComparison.Ordinal);
if (copyIndex < 0) {
newName += "_Copy";
}
else if (!newName.EndsWith("_Copy", StringComparison.Ordinal)) {
string copyEnd = newName.Substring(copyIndex + "_Copy".Length);
int copyEndValue;
if (Int32.TryParse(copyEnd, out copyEndValue))
newName = newName.Remove(copyIndex + "_Copy".Length);
else
newName += "_Copy";
}
int i = 1;
while (fnd != null) {
newNm = site.Name + "_Copy" + i;
fnd = nameScope.FindName(newNm);
i++;
string newNameTemplate = newName;
while (nameScope.FindName(newName) != null) {
newName = newNameTemplate + i++;
}
site.Name = newNm;
site.Name = newName;
}
nameScope.RegisterName(newName, obj.Instance);
}
}
return site;

17
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs

@ -145,6 +145,23 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml @@ -145,6 +145,23 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
}
}
/// <summary>
/// Item is Locked at Design Time
/// </summary>
public bool IsDesignTimeLocked {
get {
var locked = Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
return (locked != null && (bool) locked == true);
}
set {
if (value)
Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
else
Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
}
}
public override DesignItem Clone()
{
DesignItem item = null;

7
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Markup;
using NUnit.Framework;
@ -20,4 +21,8 @@ using NUnit.Framework; @@ -20,4 +21,8 @@ using NUnit.Framework;
[assembly: AssemblyCulture("")]
// Run unit tests on STA thread.
[assembly: RequiresSTA]
[assembly: RequiresSTA]
[assembly: XmlnsPrefix("http://sharpdevelop.net/WpfDesign/Tests/Controls", "sdtcontrols")]
[assembly: XmlnsDefinition("http://sharpdevelop.net/WpfDesign/Tests/Controls", "ICSharpCode.WpfDesign.Tests.Controls")]

53
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs

@ -151,5 +151,58 @@ namespace ICSharpCode.WpfDesign.Tests.Designer @@ -151,5 +151,58 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
Assert.AreEqual(_name, grid.ContentProperty.CollectionElements[3].Name);
Assert.AreEqual(grid.ContentProperty.CollectionElements[3], selection.PrimarySelection);
}
[Test]
public void PasteSameElementMultipleTimesCheckCopiesNames()
{
var grid = IntializePasteOperationsTest();
var xamlContext = grid.Context as XamlDesignContext;
Assert.IsNotNull(xamlContext);
var selection = grid.Services.Selection;
var innerGrid = grid.ContentProperty.CollectionElements[0];
selection.SetSelectedComponents(new[] {innerGrid});
xamlContext.XamlEditAction.Paste();
Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[1], selection.PrimarySelection);
selection.SetSelectedComponents(new[] {innerGrid});
xamlContext.XamlEditAction.Paste();
Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[2], selection.PrimarySelection);
selection.SetSelectedComponents(new[] {innerGrid});
xamlContext.XamlEditAction.Paste();
Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[3], selection.PrimarySelection);
selection.SetSelectedComponents(new[] {innerGrid});
xamlContext.XamlEditAction.Paste();
Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[4], selection.PrimarySelection);
Assert.IsNullOrEmpty(innerGrid.ContentProperty.CollectionElements[0].Name);
Assert.AreEqual(_name, innerGrid.ContentProperty.CollectionElements[1].Name);
Assert.AreEqual(_name + "_Copy", innerGrid.ContentProperty.CollectionElements[2].Name);
Assert.AreEqual(_name + "_Copy1", innerGrid.ContentProperty.CollectionElements[3].Name);
Assert.AreEqual(_name + "_Copy2", innerGrid.ContentProperty.CollectionElements[4].Name);
xamlContext.XamlEditAction.Copy(new[] {innerGrid.ContentProperty.CollectionElements[3]});
var cutXaml = Clipboard.GetText(TextDataFormat.Xaml);
Assert.That(cutXaml, Is.StringContaining(":Name=\"" + _name + "_Copy1\""));
selection.SetSelectedComponents(new[] {innerGrid});
xamlContext.XamlEditAction.Paste();
Assert.AreEqual(innerGrid.ContentProperty.CollectionElements[5], selection.PrimarySelection);
Assert.AreEqual(_name + "_Copy3", innerGrid.ContentProperty.CollectionElements[5].Name);
var gridDepObj = grid.Component as DependencyObject;
Assert.IsNotNull(gridDepObj);
var nameScope = NameScope.GetNameScope(gridDepObj);
Assert.IsNotNull(nameScope);
Assert.IsNotNull(nameScope.FindName(_name));
Assert.IsNotNull(nameScope.FindName(_name + "_Copy"));
Assert.IsNotNull(nameScope.FindName(_name + "_Copy1"));
Assert.IsNotNull(nameScope.FindName(_name + "_Copy2"));
Assert.IsNotNull(nameScope.FindName(_name + "_Copy3"));
Assert.IsNull(nameScope.FindName(_name + "_Copy4"));
}
}
}

19
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs

@ -59,14 +59,23 @@ namespace ICSharpCode.WpfDesign.Tests.Designer @@ -59,14 +59,23 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
return canvasChild;
}
protected void AssertCanvasDesignerOutput(string expectedXaml, DesignContext context)
protected void AssertCanvasDesignerOutput(string expectedXaml, DesignContext context, params String[] additionalXmlns)
{
string canvasStartTag =
"<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +
"xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" " +
"xmlns:t=\"" + DesignerTestsNamespace + "\"";
foreach(string ns in additionalXmlns) {
canvasStartTag += " " + ns;
}
expectedXaml = canvasStartTag + ">\n" + expectedXaml.Trim();
expectedXaml =
"<?xml version=\"1.0\" encoding=\"utf-16\"?>\n" +
("<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +
"xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" " +
"xmlns:t=\"" + DesignerTestsNamespace + "\">\n" + expectedXaml.Trim())
.Replace("\r", "").Replace("\n", "\n ")
expectedXaml.Replace("\r", "").Replace("\n", "\n ")
+ "\n</Canvas>";
StringWriter stringWriter = new StringWriter();

40
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs

@ -2,17 +2,19 @@ @@ -2,17 +2,19 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using NUnit.Framework;
using System.Windows.Media;
using System.Xml;
using ICSharpCode.WpfDesign.Designer;
using ICSharpCode.WpfDesign.Designer.Xaml;
using ICSharpCode.WpfDesign.Designer.Services;
using ICSharpCode.WpfDesign.Designer.Xaml;
using NUnit.Framework;
namespace ICSharpCode.WpfDesign.Tests.Designer
{
@ -368,6 +370,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer @@ -368,6 +370,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
{
AddBindingWithStaticResourceWhereResourceOnSameElement(true);
}
[Test]
public void AddBrushAsResource()
{
DesignItem checkBox = CreateCanvasContext("<CheckBox/>");
DesignItem canvas = checkBox.Parent;
DesignItemProperty canvasResources = canvas.Properties.GetProperty("Resources");
DesignItem brush = canvas.Services.Component.RegisterComponentForDesigner(new SolidColorBrush());
brush.Key = "testBrush";
brush.Properties[SolidColorBrush.ColorProperty].SetValue(Colors.Fuchsia);
Assert.IsTrue(canvasResources.IsCollection);
canvasResources.CollectionElements.Add(brush);
checkBox.Properties[CheckBox.ForegroundProperty].SetValue(new StaticResourceExtension());
DesignItemProperty prop = checkBox.Properties[CheckBox.ForegroundProperty];
prop.Value.Properties["ResourceKey"].SetValue("testBrush");
string expectedXaml = "<Canvas.Resources>\n" +
" <SolidColorBrush x:Key=\"testBrush\" Color=\"#FFFF00FF\" />\n" +
"</Canvas.Resources>\n" +
"<CheckBox Foreground=\"{StaticResource ResourceKey=testBrush}\" />";
AssertCanvasDesignerOutput(expectedXaml, checkBox.Context);
AssertLog("");
}
}
public class MyMultiConverter : IMultiValueConverter

184
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/NamespaceTests.cs

@ -0,0 +1,184 @@ @@ -0,0 +1,184 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Windows;
using System.Windows.Controls;
using NUnit.Framework;
namespace ICSharpCode.WpfDesign.Tests.Designer
{
[TestFixture]
public class NamespaceTests : ModelTestHelper
{
[Test]
public void AddControlFromTestNamespace()
{
DesignItem button = CreateCanvasContext("<Button />");
DesignItem canvas = button.Parent;
DesignItem customButton = canvas.Services.Component.RegisterComponentForDesigner(new CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customButton);
AssertCanvasDesignerOutput("<Button />\n" +
"<t:CustomButton />", canvas.Context);
}
[Test]
public void AddControlWithUndeclaredNamespace()
{
DesignItem button = CreateCanvasContext("<Button />");
DesignItem canvas = button.Parent;
DesignItem customButton = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.OtherControls.CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customButton);
AssertCanvasDesignerOutput("<Button />\n" +
"<Controls0:CustomButton />",
canvas.Context,
"xmlns:Controls0=\"clr-namespace:ICSharpCode.WpfDesign.Tests.OtherControls;assembly=ICSharpCode.WpfDesign.Tests\"");
}
[Test]
public void AddControlWithUndeclaredNamespaceThatUsesXmlnsPrefixAttribute()
{
DesignItem button = CreateCanvasContext("<Button />");
DesignItem canvas = button.Parent;
DesignItem customButton = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customButton);
AssertCanvasDesignerOutput("<Button />\n" +
"<sdtcontrols:CustomButton />",
canvas.Context,
"xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"");
}
[Test]
public void AddMultipleControls()
{
DesignItem button = CreateCanvasContext("<Button />");
DesignItem canvas = button.Parent;
DesignItem customControl = canvas.Services.Component.RegisterComponentForDesigner(new CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.OtherControls.CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.SpecialControls.CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new CustomCheckBox());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomCheckBox());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.OtherControls.CustomCheckBox());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.SpecialControls.CustomCheckBox());
canvas.Properties["Children"].CollectionElements.Add(customControl);
AssertCanvasDesignerOutput("<Button />\n" +
"<t:CustomButton />\n" +
"<sdtcontrols:CustomButton />\n" +
"<Controls0:CustomButton />\n" +
"<Controls1:CustomButton />\n" +
"<t:CustomCheckBox />\n" +
"<sdtcontrols:CustomCheckBox />\n" +
"<Controls0:CustomCheckBox />\n" +
"<Controls1:CustomCheckBox />",
canvas.Context,
"xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"",
"xmlns:Controls0=\"clr-namespace:ICSharpCode.WpfDesign.Tests.OtherControls;assembly=ICSharpCode.WpfDesign.Tests\"",
"xmlns:Controls1=\"clr-namespace:ICSharpCode.WpfDesign.Tests.SpecialControls;assembly=ICSharpCode.WpfDesign.Tests\"");
}
}
public class CustomButton : Button
{
public static readonly DependencyProperty TestAttachedProperty = DependencyProperty.RegisterAttached("TestAttached", typeof(double), typeof(CustomButton),
new FrameworkPropertyMetadata(Double.NaN));
public static double GetTestAttached(UIElement element)
{
return (double)element.GetValue(TestAttachedProperty);
}
public static void SetTestAttached(UIElement element, double value)
{
element.SetValue(TestAttachedProperty, value);
}
}
public class CustomCheckBox : CheckBox
{
}
}
namespace ICSharpCode.WpfDesign.Tests.Controls
{
public class CustomButton : Button
{
public static readonly DependencyProperty TestAttachedProperty = DependencyProperty.RegisterAttached("TestAttached", typeof(double), typeof(CustomButton),
new FrameworkPropertyMetadata(Double.NaN));
public static double GetTestAttached(UIElement element)
{
return (double)element.GetValue(TestAttachedProperty);
}
public static void SetTestAttached(UIElement element, double value)
{
element.SetValue(TestAttachedProperty, value);
}
}
public class CustomCheckBox : CheckBox
{
}
}
namespace ICSharpCode.WpfDesign.Tests.OtherControls
{
public class CustomButton : Button
{
public static readonly DependencyProperty TestAttachedProperty = DependencyProperty.RegisterAttached("TestAttached", typeof(double), typeof(CustomButton),
new FrameworkPropertyMetadata(Double.NaN));
public static double GetTestAttached(UIElement element)
{
return (double)element.GetValue(TestAttachedProperty);
}
public static void SetTestAttached(UIElement element, double value)
{
element.SetValue(TestAttachedProperty, value);
}
}
public class CustomCheckBox : CheckBox
{
}
}
namespace ICSharpCode.WpfDesign.Tests.SpecialControls
{
public class CustomButton : Button
{
}
public class CustomCheckBox : CheckBox
{
}
}

60
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Markup;
@ -21,20 +22,22 @@ namespace ICSharpCode.WpfDesign.Tests.Designer @@ -21,20 +22,22 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"{Binding}\" />", button.Context);
}
[Test, Ignore("Properties are not present in XAML DOM")]
[Test]
public void SetContentToStaticResource()
{
DesignItem button = CreateCanvasContext(@"<Button Width='100' Height='200'/>");
button.Properties.GetProperty("Content").SetValue(new StaticResourceExtension("MyBrush"));
button.Properties.GetProperty("Content").SetValue(new StaticResourceExtension());
button.Properties.GetProperty("Content").Value.Properties["ResourceKey"].SetValue("MyBrush");
// TODO : maybe we should support positional arguments from ctors as well => {StaticResource MyBrush}?
AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"{StaticResource ResourceKey=MyBrush}\" />", button.Context);
}
[Test, Ignore("Properties are not present in XAML DOM")]
[Test]
public void SetContentToXStatic()
{
DesignItem button = CreateCanvasContext("<Button Width='100' Height='200'/>");
button.Properties.GetProperty("Content").SetValue(new StaticExtension("Button.ClickModeProperty"));
button.Properties.GetProperty("Content").SetValue(new StaticExtension());
button.Properties.GetProperty("Content").Value.Properties["Member"].SetValue("Button.ClickModeProperty");
AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"{x:Static Member=Button.ClickModeProperty}\" />", button.Context);
}
@ -45,5 +48,54 @@ namespace ICSharpCode.WpfDesign.Tests.Designer @@ -45,5 +48,54 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
button.Properties.GetProperty("Content").SetValue("Hello World!");
AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"Hello World!\" />", button.Context);
}
[Test]
public void SetAttachedProperties()
{
DesignItem button = CreateCanvasContext("<Button />");
button.Properties.GetAttachedProperty(Grid.ColumnProperty).SetValue(0);
button.Properties.GetAttachedProperty(CustomButton.TestAttachedProperty).SetValue(0);
button.Properties.GetAttachedProperty(ICSharpCode.WpfDesign.Tests.Controls.CustomButton.TestAttachedProperty).SetValue(0);
button.Properties.GetAttachedProperty(ICSharpCode.WpfDesign.Tests.OtherControls.CustomButton.TestAttachedProperty).SetValue(0);
AssertCanvasDesignerOutput("<Button Grid.Column=\"0\" t:CustomButton.TestAttached=\"0\" sdtcontrols:CustomButton.TestAttached=\"0\" Controls0:CustomButton.TestAttached=\"0\" />",
button.Context,
"xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"",
"xmlns:Controls0=\"clr-namespace:ICSharpCode.WpfDesign.Tests.OtherControls;assembly=ICSharpCode.WpfDesign.Tests\"");
}
[Test]
public void SetInstanceProperty()
{
DesignItem button = CreateCanvasContext("<Button />");
button.Properties.GetProperty("Width").SetValue(10);
AssertCanvasDesignerOutput("<Button Width=\"10\" />", button.Context);
}
[Test]
public void SetInstancePropertyElement()
{
DesignItem button = CreateCanvasContext("<Button />");
DesignItem canvas = button.Parent;
canvas.Properties.GetProperty(Canvas.TagProperty).SetValue(new ExampleClass());
DesignItem customControl = canvas.Services.Component.RegisterComponentForDesigner(new ICSharpCode.WpfDesign.Tests.Controls.CustomButton());
canvas.Properties["Children"].CollectionElements.Add(customControl);
customControl.Properties.GetProperty(ICSharpCode.WpfDesign.Tests.Controls.CustomButton.TagProperty).SetValue(new ExampleClass());
AssertCanvasDesignerOutput("<Canvas.Tag>\n" +
" <t:ExampleClass />\n" +
"</Canvas.Tag>\n" +
"<Button />\n" +
"<sdtcontrols:CustomButton>\n" +
" <sdtcontrols:CustomButton.Tag>\n" +
" <t:ExampleClass />\n" +
" </sdtcontrols:CustomButton.Tag>\n" +
"</sdtcontrols:CustomButton>",
canvas.Context,
"xmlns:sdtcontrols=\"http://sharpdevelop.net/WpfDesign/Tests/Controls\"");
}
}
}

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj

@ -65,6 +65,7 @@ @@ -65,6 +65,7 @@
<Compile Include="Designer\MockFocusNavigator.cs" />
<Compile Include="Designer\ModelTestHelper.cs" />
<Compile Include="Designer\ModelTests.cs" />
<Compile Include="Designer\NamespaceTests.cs" />
<Compile Include="Designer\OutlineView\HierarchyTests.cs" />
<Compile Include="Designer\OutlineView\InsertTests.cs" />
<Compile Include="Designer\OutlineView\SelectionTests.cs" />

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/CollectionSupport.cs

@ -72,7 +72,7 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -72,7 +72,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
// if (val is Style)
// key = ((Style)val).TargetType;
//}
if (key == null || key == "")
if (key == null || (key as string) == "")
key = val;
((ResourceDictionary)collectionInstance).Add(key, val);
} else {

76
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs

@ -13,16 +13,25 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -13,16 +13,25 @@ namespace ICSharpCode.WpfDesign.XamlDom
{
#region IsHidden
/// <summary>
/// Getter for the <see cref="IsHiddenProperty"/>
/// </summary>
public static bool GetIsHidden(DependencyObject obj)
{
return (bool)obj.GetValue(IsHiddenProperty);
}
/// <summary>
/// Setter for the <see cref="IsHiddenProperty"/>
/// </summary>
public static void SetIsHidden(DependencyObject obj, bool value)
{
obj.SetValue(IsHiddenProperty, value);
}
/// <summary>
/// Design-time IsHidden property
/// </summary>
public static readonly DependencyProperty IsHiddenProperty =
DependencyProperty.RegisterAttached("IsHidden", typeof(bool), typeof(DesignTimeProperties));
@ -30,87 +39,144 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -30,87 +39,144 @@ namespace ICSharpCode.WpfDesign.XamlDom
#region IsLocked
/// <summary>
/// Getter for the <see cref="IsLockedProperty"/>
/// </summary>
public static bool GetIsLocked(DependencyObject obj)
{
return (bool)obj.GetValue(IsLockedProperty);
}
/// <summary>
/// Setter for the <see cref="IsLockedProperty"/>
/// </summary>
public static void SetIsLocked(DependencyObject obj, bool value)
{
obj.SetValue(IsLockedProperty, value);
}
/// <summary>
/// Design-time IsLocked property.
/// </summary>
public static readonly DependencyProperty IsLockedProperty =
DependencyProperty.RegisterAttached("IsLocked", typeof(bool), typeof(DesignTimeProperties));
#endregion
#region DataContext
/// <summary>
/// Getter for the <see cref="DataContextProperty"/>
/// </summary>
public static object GetDataContext(DependencyObject obj)
{
return (object)obj.GetValue(DataContextProperty);
}
/// <summary>
/// Setter for the <see cref="DataContextProperty"/>
/// </summary>
public static void SetDataContext(DependencyObject obj, bool value)
{
obj.SetValue(DataContextProperty, value);
}
/// <summary>
/// Design-time data context
/// </summary>
public static readonly DependencyProperty DataContextProperty =
DependencyProperty.RegisterAttached("DataContext", typeof(object), typeof(DesignTimeProperties));
#endregion
#region DesignSource
/// <summary>
/// Getter for the <see cref="DesignSourceProperty"/>
/// </summary>
public static object GetDesignSource(DependencyObject obj)
{
return (object)obj.GetValue(DesignSourceProperty);
}
/// <summary>
/// Setter for the <see cref="DesignSourceProperty"/>
/// </summary>
public static void SetDesignSource(DependencyObject obj, bool value)
{
obj.SetValue(DesignSourceProperty, value);
}
/// <summary>
/// Design-time design source
/// </summary>
public static readonly DependencyProperty DesignSourceProperty =
DependencyProperty.RegisterAttached("DesignSource", typeof(object), typeof(DesignTimeProperties));
#endregion
#region DesignWidth
/// <summary>
/// Getter for the <see cref="DesignWidthProperty"/>
/// </summary>
public static double GetDesignWidth(DependencyObject obj)
{
return (double)obj.GetValue(DesignWidthProperty);
}
/// <summary>
/// Setter for the <see cref="DesignWidthProperty"/>
/// </summary>
public static void SetDesignWidth(DependencyObject obj, double value)
{
obj.SetValue(DesignWidthProperty, value);
}
/// <summary>
/// Design-time width
/// </summary>
public static readonly DependencyProperty DesignWidthProperty =
DependencyProperty.RegisterAttached("DesignWidth", typeof(double), typeof(DesignTimeProperties));
#endregion
#region DesignHeight
/// <summary>
/// Getter for the <see cref="DesignHeightProperty"/>
/// </summary>
public static double GetDesignHeight(DependencyObject obj)
{
return (double)obj.GetValue(DesignHeightProperty);
}
/// <summary>
/// Setter for the <see cref="DesignHeightProperty"/>
/// </summary>
public static void SetDesignHeight(DependencyObject obj, double value)
{
obj.SetValue(DesignHeightProperty, value);
}
/// <summary>
/// Design-time height
/// </summary>
public static readonly DependencyProperty DesignHeightProperty =
DependencyProperty.RegisterAttached("DesignHeight", typeof(double), typeof(DesignTimeProperties));
#endregion
#region LayoutRounding
public static bool GetLayoutRounding(DependencyObject obj)
{
return (bool)obj.GetValue(DesignLayoutRounding);
}
public static void SetLayoutRounding(DependencyObject obj, bool value)
{
obj.SetValue(DesignLayoutRounding, value);
}
public static readonly DependencyProperty DesignLayoutRounding =
DependencyProperty.RegisterAttached("LayoutRounding", typeof(bool), typeof(DesignTimeProperties));
#endregion
}
}

9
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupCompatibilityProperties.cs

@ -13,16 +13,25 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -13,16 +13,25 @@ namespace ICSharpCode.WpfDesign.XamlDom
{
#region Ignorable
/// <summary>
/// Getter for the <see cref="IgnorableProperty"/>
/// </summary>
public static string GetIgnorable(DependencyObject obj)
{
return (string)obj.GetValue(IgnorableProperty);
}
/// <summary>
/// Setter for the <see cref="IgnorableProperty"/>
/// </summary>
public static void SetIgnorable(DependencyObject obj, string value)
{
obj.SetValue(IgnorableProperty, value);
}
/// <summary>
/// Gets/Sets whether a XAML namespace may be ignored by the XAML parser.
/// </summary>
public static readonly DependencyProperty IgnorableProperty =
DependencyProperty.RegisterAttached("Ignorable", typeof(string), typeof(MarkupCompatibilityProperties));

39
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -10,7 +10,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
/// <summary>
/// Static methods to help with <see cref="System.Windows.Markup.INameScope"/> operations on Xaml elements.
/// </summary>
internal static class NameScopeHelper
public static class NameScopeHelper
{
/// <summary>
/// Finds the XAML namescope for the specified object and uses it to unregister the old name and then register the new name.
@ -18,16 +18,11 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -18,16 +18,11 @@ namespace ICSharpCode.WpfDesign.XamlDom
/// <param name="namedObject">The object where the name was changed.</param>
/// <param name="oldName">The old name.</param>
/// <param name="newName">The new name.</param>
public static void NameChanged(XamlObject namedObject, string oldName, string newName)
internal static void NameChanged(XamlObject namedObject, string oldName, string newName)
{
var obj = namedObject;
while (obj != null) {
var nameScope = obj.Instance as INameScope;
if (nameScope == null) {
var depObj = obj.Instance as DependencyObject;
if (depObj != null)
nameScope = NameScope.GetNameScope(depObj);
}
var nameScope = GetNameScopeFromObject(obj.Instance);
if (nameScope != null) {
if (oldName != null) {
try {
@ -52,5 +47,33 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -52,5 +47,33 @@ namespace ICSharpCode.WpfDesign.XamlDom
obj = obj.ParentObject;
}
}
/// <summary>
/// Gets the XAML namescope for the specified object.
/// </summary>
/// <param name="obj">The object to get the XAML namescope for.</param>
/// <returns>A XAML namescope, as an <see cref="INameScope"/> instance.</returns>
public static INameScope GetNameScopeFromObject(object obj)
{
var nameScope = obj as INameScope;
if (nameScope == null) {
var depObj = obj as DependencyObject;
if (depObj != null)
nameScope = NameScope.GetNameScope(depObj);
}
return nameScope;
}
/// <summary>
/// Clears the <see cref="NameScope.NameScopeProperty"/> if the object is a <see cref="DependencyObject"/>.
/// </summary>
/// <param name="obj">The object to clear the <see cref="NameScope.NameScopeProperty"/> on.</param>
public static void ClearNameScopeProperty(object obj)
{
var depObj = obj as DependencyObject;
if (depObj != null)
depObj.ClearValue(NameScope.NameScopeProperty);
}
}
}

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs

@ -180,7 +180,7 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -180,7 +180,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
if (hasStringConverter && XamlObject.GetContentPropertyName(elementType) != null) {
xml.InnerText = c.ConvertToInvariantString(instance);
} else if (instance is Brush) { // TODO: this is a hacky fix, because Brush Editor doesn't
} else if (instance is Brush && forProperty != null) { // TODO: this is a hacky fix, because Brush Editor doesn't
// edit Design Items and so we have no XML, only the Brush
// object and we need to parse the Brush to XAML!
var s = new MemoryStream();

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs

@ -469,6 +469,8 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -469,6 +469,8 @@ namespace ICSharpCode.WpfDesign.XamlDom
return FindAttachedProperty(typeof(DesignTimeProperties), attribute.LocalName);
} else if (attribute.LocalName == "IsHidden" && attribute.NamespaceURI == XamlConstants.DesignTimeNamespace) {
return FindAttachedProperty(typeof(DesignTimeProperties), attribute.LocalName);
} else if (attribute.LocalName == "IsLocked" && attribute.NamespaceURI == XamlConstants.DesignTimeNamespace) {
return FindAttachedProperty(typeof(DesignTimeProperties), attribute.LocalName);
}
return null;

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj

@ -117,7 +117,6 @@ @@ -117,7 +117,6 @@
<Compile Include="ServiceRequiredException.cs" />
<Compile Include="Services.cs" />
<Compile Include="Tools.cs" />
<Compile Include="UIHelpers.cs" />
</ItemGroup>
<ItemGroup>
<Page Include="PropertyGrid\Editors\ComboBoxEditor.xaml">

2
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockFileSystem.cs

@ -36,7 +36,7 @@ namespace XmlEditor.Tests.Utils @@ -36,7 +36,7 @@ namespace XmlEditor.Tests.Utils
directoryFiles.Add(DirectoryName.Create(folder), FileName.Create(file));
}
public IEnumerable<FileName> GetFiles(DirectoryName folder, string extension, SearchOption searchOption = SearchOption.TopDirectoryOnly)
public IEnumerable<FileName> GetFiles(DirectoryName folder, string extension, DirectorySearchOptions searchOptions = DirectorySearchOptions.None)
{
searchedFolders.Add(folder);
searchedForFileExtensions.Add(extension);

1
src/AddIns/Misc/FiletypeRegisterer/Project/Src/RegisterFiletypesPanel.cs

@ -12,6 +12,7 @@ using ICSharpCode.SharpDevelop.Gui; @@ -12,6 +12,7 @@ using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.FiletypeRegisterer
{
#pragma warning disable 618
public partial class RegisterFiletypesPanel : XmlFormsOptionPanel
{
sealed class ListEntry

38
src/AddIns/Misc/HelpViewer/HelpViewer.addin

@ -20,30 +20,34 @@ @@ -20,30 +20,34 @@
<BrowserSchemeExtension id = "http" class = "MSHelpSystem.BrowserScheme"/>
</Path>
<Path name="/SharpDevelop/Pads/ErrorList/TaskContextMenu">
<MenuItem id = "Help3ShowErrorHelp" label = "${res:AddIns.HelpViewer.ShowErrorHelpTitle}" class = "MSHelpSystem.Commands.ShowErrorHelpCommand" />
<Path name = "/SharpDevelop/Pads/ErrorList/TaskContextMenu">
<MenuItem id = "Help3ShowErrorHelp"
label = "${res:AddIns.HelpViewer.ShowErrorHelpTitle}"
class = "MSHelpSystem.Commands.ShowErrorHelpCommand" />
</Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<OptionPanel id = "Help3Options" label = "${res:AddIns.HelpViewer.MicrosoftHelpViewerTitle}" class = "MSHelpSystem.Help3OptionsPanel" />
<OptionPanel id = "Help3Options"
label = "${res:AddIns.HelpViewer.MicrosoftHelpViewerTitle}"
class = "MSHelpSystem.Help3OptionsPanel" />
</Path>
<Path name = "/SharpDevelop/Workbench/Pads">
<Pad id = "Help3TocPad"
category = "Help3"
title = "${res:AddIns.HelpViewer.ContentsPadTitle}"
icon = "HtmlHelp2.16x16.Toc"
class = "MSHelpSystem.Controls.Help3TocPad"
defaultPosition = "Right, Hidden" />
<Pad id = "Help3TocPad"
category = "Help3"
title = "${res:AddIns.HelpViewer.SearchPadTitle}"
icon = "HtmlHelp2.16x16.Search"
class = "MSHelpSystem.Controls.Help3SearchPad"
defaultPosition = "Right, Hidden" />
<Path name = "/SharpDevelop/Workbench/Pads">
<Pad id = "Help3TocPad"
category = "Help3"
title = "${res:AddIns.HelpViewer.ContentsPadTitle}"
icon = "HtmlHelp2.16x16.Toc"
class = "MSHelpSystem.Controls.Help3TocPad"
defaultPosition = "Right, Hidden" />
<Pad id = "Help3SearchPad"
category = "Help3"
title = "${res:AddIns.HelpViewer.SearchPadTitle}"
icon = "HtmlHelp2.16x16.Search"
class = "MSHelpSystem.Controls.Help3SearchPad"
defaultPosition = "Right, Hidden" />
</Path>
<Path name = "/SharpDevelop/Workbench/MainMenu/Help">
<Path name = "/SharpDevelop/Workbench/MainMenu/Help">
<MenuItem id = "Help3DisplayContentCommand"
class = "MSHelpSystem.Commands.DisplayContent"
label = "${res:AddIns.HelpViewer.DisplayContentsCommand}"

8
src/AddIns/Misc/HelpViewer/HelpViewer.csproj

@ -67,6 +67,7 @@ @@ -67,6 +67,7 @@
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Source\BrowserScheme.cs" />
<Compile Include="Source\Controls\HelpLibraryManagerNotFound.cs" />
<Compile Include="Source\Controls\Pads.cs" />
<Compile Include="Source\Controls\SearchPadControl.xaml.cs">
<DependentUpon>SearchPadControl.xaml</DependentUpon>
@ -81,7 +82,7 @@ @@ -81,7 +82,7 @@
<Compile Include="Source\Core\Help3Catalog.cs" />
<Compile Include="Source\Core\Help3Environment.cs" />
<Compile Include="Source\Core\Help3Service.cs" />
<None Include="Source\Core\HelpLibraryManager.cs" />
<Compile Include="Source\Core\HelpLibraryManager.cs" />
<Compile Include="Source\Core\HelpLibraryAgent.cs" />
<Compile Include="Source\Help3OptionsPanel.xaml.cs">
<DependentUpon>Help3OptionsPanel.xaml</DependentUpon>
@ -121,6 +122,11 @@ @@ -121,6 +122,11 @@
<Name>ICSharpCode.Core.Presentation</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

45
src/AddIns/Misc/HelpViewer/Source/Commands.cs

@ -2,14 +2,12 @@ @@ -2,14 +2,12 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Microsoft.Win32;
using MSHelpSystem.Core;
using MSHelpSystem.Controls;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using MSHelpSystem.Controls;
using MSHelpSystem.Core;
namespace MSHelpSystem.Commands
{
@ -27,13 +25,13 @@ namespace MSHelpSystem.Commands @@ -27,13 +25,13 @@ namespace MSHelpSystem.Commands
return;
if (Help3Environment.IsHelp3ProtocolRegistered) {
LoggingService.Debug(string.Format("Help 3.0: Getting description of \"{0}\"", code));
LoggingService.Debug(string.Format("HelpViewer: Getting description of \"{0}\"", code));
if (Help3Environment.IsLocalHelp)
DisplayHelp.Keywords(code);
else
DisplayHelp.ContextualHelp(code);
} else {
LoggingService.Error("Help 3.0: Help system ist not initialized");
LoggingService.Error("HelpViewer: Help system ist not initialized");
}
}
}
@ -43,6 +41,12 @@ namespace MSHelpSystem.Commands @@ -43,6 +41,12 @@ namespace MSHelpSystem.Commands
{
public override void Run()
{
if (!Help3Environment.IsHelp3ProtocolRegistered) {
using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
form.ShowDialog(SD.WinForms.MainWin32Window);
}
return;
}
if (Help3Service.Config.ExternalHelp) DisplayHelp.Catalog();
else {
PadDescriptor toc = SD.Workbench.GetPad(typeof(Help3TocPad));
@ -55,6 +59,12 @@ namespace MSHelpSystem.Commands @@ -55,6 +59,12 @@ namespace MSHelpSystem.Commands
{
public override void Run()
{
if (!Help3Environment.IsHelp3ProtocolRegistered) {
using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
form.ShowDialog(SD.WinForms.MainWin32Window);
}
return;
}
PadDescriptor search = SD.Workbench.GetPad(typeof(Help3SearchPad));
if (search != null) search.BringPadToFront();
}
@ -64,24 +74,13 @@ namespace MSHelpSystem.Commands @@ -64,24 +74,13 @@ namespace MSHelpSystem.Commands
{
public override void Run()
{
string path;
using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0")) {
path = key != null ? key.GetValue("AppRoot") as string : null;
}
if (string.IsNullOrEmpty(path)) {
MessageService.ShowError("${res:AddIns.HelpViewer.HLMNotFound}");
return;
}
path = Path.Combine(path, "HelpLibManager.exe");
if (!File.Exists(path)) {
MessageService.ShowError("${res:AddIns.HelpViewer.HLMNotFound}");
return;
}
if (string.IsNullOrEmpty(Help3Service.Config.ActiveCatalogId)) {
MessageService.ShowError("${res:AddIns.HelpViewer.HLMNoActiveCatalogError}");
if (string.IsNullOrEmpty(HelpLibraryManager.Manager)) {
using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
form.ShowDialog(SD.WinForms.MainWin32Window);
}
return;
}
Process.Start(path, string.Format("/product {0} /version {1} /locale {2}", Help3Service.Config.ActiveCatalogId.Split('/')));
HelpLibraryManager.Start();
}
}
}

21
src/AddIns/Misc/HelpViewer/Source/Controls/HelpLibraryManagerNotFound.cs

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Diagnostics;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.Gui;
namespace MSHelpSystem.Controls
{
public class HelpLibraryManagerNotFoundForm : ToolNotFoundDialog
{
public HelpLibraryManagerNotFoundForm()
: base(StringParser.Parse("${res:AddIns.HelpViewer.HLMNotAvailableDownloadWinSDK}"),
"http://www.microsoft.com/en-us/download/details.aspx?id=8279", null)
{
}
}
}

7
src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml

@ -1,7 +1,8 @@ @@ -1,7 +1,8 @@
<UserControl x:Class="MSHelpSystem.Controls.SearchPadControl"
<?xml version="1.0" encoding="utf-8"?>
<UserControl x:Class="MSHelpSystem.Controls.SearchPadControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="http://icsharpcode.net/sharpdevelop/core">
<StackPanel>
<TextBlock Text="{core:Localize AddIns.HelpViewer.SearchLookForLabel}" Margin="5,2,5,1" />
<ComboBox Name="searchCB" Margin="5,2,5,5" Padding="1" IsEnabled="False" IsEditable="True" PreviewKeyUp="SearchCBPreviewKeyUp" />

15
src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs

@ -9,6 +9,7 @@ using System.Linq; @@ -9,6 +9,7 @@ using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Web;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
@ -35,14 +36,14 @@ namespace MSHelpSystem.Controls @@ -35,14 +36,14 @@ namespace MSHelpSystem.Controls
client.DownloadStringCompleted += (_, e) =>
{
try {
LoggingService.Debug(string.Format("Help 3.0: title \"{0}\"", Title));
LoggingService.Debug(string.Format("HelpViewer: TocEntry \"{0}\" found", Title));
var children = XElement.Parse(e.Result);
Children = children.Elements("topic")
.Select(link => new TocEntry(link.Attribute("id").Value) { Title = link.Element("title").Value })
.Select(link => new TocEntry(link.Attribute("id").Value) { Title = WebUtility.HtmlDecode(link.Element("title").Value) })
.ToArray();
} catch (TargetInvocationException ex) {
// Exception when fetching e.Result:
LoggingService.Warn(ex);
LoggingService.Error(ex.ToString());
this.children = defaultChild;
}
client.Dispose();
@ -58,8 +59,7 @@ namespace MSHelpSystem.Controls @@ -58,8 +59,7 @@ namespace MSHelpSystem.Controls
public IEnumerable Children
{
get
{
get {
if (Help3Service.ActiveCatalog != null) {
if (children == null && !client.IsBusy && HelpLibraryAgent.PortIsReady) {
client.DownloadStringAsync(new Uri(Help3Environment.GetHttpFromMsXHelp(string.Format(url, Help3Service.ActiveCatalog.AsMsXHelpParam, id))));
@ -67,8 +67,7 @@ namespace MSHelpSystem.Controls @@ -67,8 +67,7 @@ namespace MSHelpSystem.Controls
}
return children ?? defaultChild;
}
private set
{
private set {
children = value;
RaisePropertyChanged("Children");
}
@ -81,5 +80,5 @@ namespace MSHelpSystem.Controls @@ -81,5 +80,5 @@ namespace MSHelpSystem.Controls
System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new System.ComponentModel.PropertyChangedEventArgs(name));
}
}
}
}

6
src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml

@ -1,6 +1,8 @@ @@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="MSHelpSystem.Controls.TocPadControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl x:Class="MSHelpSystem.Controls.TocPadControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="http://icsharpcode.net/sharpdevelop/core">
<Grid>
<TreeView
Name="tocTreeView"

2
src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml.cs

@ -35,7 +35,7 @@ namespace MSHelpSystem.Controls @@ -35,7 +35,7 @@ namespace MSHelpSystem.Controls
{
string topicId = (string)tocTreeView.SelectedValue;
if (!string.IsNullOrEmpty(topicId)) {
LoggingService.Debug(string.Format("Help 3.0: [TOC] Calling page with Id \"{0}\"", topicId));
LoggingService.Debug(string.Format("HelpViewer: TocItemChanged to ID \"{0}\"", topicId));
DisplayHelp.Page(topicId);
}
}

30
src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs

@ -35,8 +35,7 @@ namespace MSHelpSystem.Core @@ -35,8 +35,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) {
return false;
}
string helpCatalogUrl = string.Format(@"ms-xhelp://?method=page&id=-1&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpCatalogUrl));
string helpCatalogUrl = string.Concat("ms-xhelp://?method=page&id=-1&", Help3Service.ActiveCatalog.AsMsXHelpParam);
DisplayLocalHelp(helpCatalogUrl);
return true;
}
@ -56,8 +55,7 @@ namespace MSHelpSystem.Core @@ -56,8 +55,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) {
return false;
}
string helpPageUrl = string.Format(@"ms-xhelp://?method=page&id={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, pageId);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpPageUrl));
string helpPageUrl = string.Concat("ms-xhelp://?method=page&id=", pageId, "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
DisplayLocalHelp(helpPageUrl);
return true;
}
@ -74,8 +72,7 @@ namespace MSHelpSystem.Core @@ -74,8 +72,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) {
return false;
}
string helpContextualUrl = string.Format(@"ms-xhelp://?method=f1&query={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, contextual);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpContextualUrl));
string helpContextualUrl = string.Concat("ms-xhelp://?method=f1&query=", contextual, "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
DisplayLocalHelp(helpContextualUrl);
return true;
}
@ -92,8 +89,7 @@ namespace MSHelpSystem.Core @@ -92,8 +89,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) {
return false;
}
string helpSearchUrl = string.Format(@"ms-xhelp://?method=search&query={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, searchWords.Replace(" ", "+"));
LoggingService.Debug(string.Format("Help 3.0: {0}", helpSearchUrl));
string helpSearchUrl = string.Concat("ms-xhelp://?method=search&query=", searchWords.Replace(" ", "+"), "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
DisplayLocalHelp(helpSearchUrl);
return true;
}
@ -113,8 +109,7 @@ namespace MSHelpSystem.Core @@ -113,8 +109,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) {
return false;
}
string helpKeywordsUrl = string.Format(@"ms-xhelp://?method=keywords&query={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, keywords.Replace(" ", "+"));
LoggingService.Debug(string.Format("Help 3.0: {0}", helpKeywordsUrl));
string helpKeywordsUrl = string.Concat("ms-xhelp://?method=keywords&query=", keywords.Replace(" ", "+"), "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
DisplayLocalHelp(helpKeywordsUrl);
return true;
}
@ -135,8 +130,7 @@ namespace MSHelpSystem.Core @@ -135,8 +130,7 @@ namespace MSHelpSystem.Core
HelpLibraryAgent.Start();
Thread.Sleep(0x3e8);
}
string helpUrl = string.Format(@"{0}{1}{2}",
arguments, ProjectLanguages.GetCurrentLanguageAsHttpParam(), (embedded)?"&embedded=true":string.Empty);
string helpUrl = string.Concat(arguments, ProjectLanguages.CurrentLanguageAsHttpParam, (embedded)?"&embedded=true":string.Empty);
if (Help3Service.Config.ExternalHelp) {
DisplayHelpWithShellExecute(helpUrl);
@ -144,7 +138,7 @@ namespace MSHelpSystem.Core @@ -144,7 +138,7 @@ namespace MSHelpSystem.Core
}
BrowserPane browser = ActiveHelp3Browser();
if (browser != null) {
LoggingService.Info(string.Format("Help 3.0: Navigating to {0}", helpUrl));
LoggingService.Info(string.Format("HelpViewer: DisplayLocalHelp calls \"{0}\"", helpUrl));
browser.Navigate(Help3Environment.GetHttpFromMsXHelp(helpUrl));
browser.WorkbenchWindow.SelectWindow();
}
@ -164,7 +158,7 @@ namespace MSHelpSystem.Core @@ -164,7 +158,7 @@ namespace MSHelpSystem.Core
p.WaitForInputIdle();
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
}
@ -173,7 +167,7 @@ namespace MSHelpSystem.Core @@ -173,7 +167,7 @@ namespace MSHelpSystem.Core
if (string.IsNullOrEmpty(keyword)) {
throw new ArgumentNullException("keyword");
}
string msdnUrl = string.Format(@"http://msdn.microsoft.com/library/{0}.aspx", keyword);
string msdnUrl = string.Concat("http://msdn.microsoft.com/library/", keyword, ".aspx");
if (Help3Service.Config.ExternalHelp) {
DisplayHelpWithShellExecute(msdnUrl);
@ -181,7 +175,7 @@ namespace MSHelpSystem.Core @@ -181,7 +175,7 @@ namespace MSHelpSystem.Core
}
BrowserPane browser = ActiveHelp3Browser();
if (browser != null) {
LoggingService.Info(string.Format("Help 3.0: Navigating to {0}", msdnUrl));
LoggingService.Info(string.Format("HelpViewer: DisplayHelpOnMSDN calls \"{0}\"", msdnUrl));
browser.Navigate(msdnUrl);
browser.WorkbenchWindow.SelectWindow();
}
@ -192,10 +186,10 @@ namespace MSHelpSystem.Core @@ -192,10 +186,10 @@ namespace MSHelpSystem.Core
if (string.IsNullOrEmpty(searchWords)) {
throw new ArgumentNullException("searchWords");
}
string msdnUrl = string.Format(@"http://social.msdn.microsoft.com/Search/{0}/?query={1}&ac=3", CultureInfo.CurrentUICulture.ToString(), searchWords.Replace(" ", "+"));
string msdnUrl = string.Concat("http://social.msdn.microsoft.com/Search/", CultureInfo.CurrentUICulture.ToString(), "/?query=", searchWords.Replace(" ", "+"), "&ac=3");
BrowserPane browser = ActiveHelp3Browser();
if (browser != null) {
LoggingService.Info(string.Format("Help 3.0: Navigating to {0}", msdnUrl));
LoggingService.Info(string.Format("HelpViewer: DisplaySearchOnMSDN calls \"{0}\"", msdnUrl));
browser.Navigate(msdnUrl);
browser.WorkbenchWindow.SelectWindow();
}

23
src/AddIns/Misc/HelpViewer/Source/Core/Help3Environment.cs

@ -18,8 +18,7 @@ namespace MSHelpSystem.Core @@ -18,8 +18,7 @@ namespace MSHelpSystem.Core
public static bool IsHelp3ProtocolRegistered
{
get
{
get {
try {
RegistryKey hkcr = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64).OpenSubKey(@"MS-XHelp\shell\open\command", false);
string helpLibAgent = (string)hkcr.GetValue("", string.Empty);
@ -27,7 +26,7 @@ namespace MSHelpSystem.Core @@ -27,7 +26,7 @@ namespace MSHelpSystem.Core
return (!string.IsNullOrEmpty(helpLibAgent));
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@ -35,8 +34,7 @@ namespace MSHelpSystem.Core @@ -35,8 +34,7 @@ namespace MSHelpSystem.Core
public static bool IsLocalStoreInitialized
{
get
{
get {
string localStore = LocalStore;
return (!string.IsNullOrEmpty(localStore) && Directory.Exists(localStore));
}
@ -44,8 +42,7 @@ namespace MSHelpSystem.Core @@ -44,8 +42,7 @@ namespace MSHelpSystem.Core
public static string LocalStore
{
get
{
get {
try {
RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0", false);
string localStore = (string)hklm.GetValue("LocalStore", string.Empty);
@ -53,7 +50,7 @@ namespace MSHelpSystem.Core @@ -53,7 +50,7 @@ namespace MSHelpSystem.Core
return localStore;
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return string.Empty;
}
@ -66,8 +63,7 @@ namespace MSHelpSystem.Core @@ -66,8 +63,7 @@ namespace MSHelpSystem.Core
public static string AppRoot
{
get
{
get {
try {
RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0", false);
string appRoot = (string)hklm.GetValue("AppRoot", string.Empty);
@ -75,7 +71,7 @@ namespace MSHelpSystem.Core @@ -75,7 +71,7 @@ namespace MSHelpSystem.Core
return appRoot;
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return string.Empty;
}
@ -83,8 +79,7 @@ namespace MSHelpSystem.Core @@ -83,8 +79,7 @@ namespace MSHelpSystem.Core
public static string ManifestFolder
{
get
{
get {
string manifestFolder = LocalStore;
if (string.IsNullOrEmpty(manifestFolder)) return string.Empty;
manifestFolder = System.IO.Path.Combine(manifestFolder, "manifest");
@ -95,7 +90,7 @@ namespace MSHelpSystem.Core @@ -95,7 +90,7 @@ namespace MSHelpSystem.Core
public static bool IsLocalHelp
{
get { return HelpClientWatcher.IsLocalHelp; }
get { return HelpClientWatcher.IsLocalHelp; }
}
public static string GetHttpFromMsXHelp(string helpUrl)

30
src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs

@ -37,8 +37,7 @@ namespace MSHelpSystem.Core @@ -37,8 +37,7 @@ namespace MSHelpSystem.Core
static void UpdateCatalogs()
{
catalogs.Clear();
if (Help3Environment.IsHelp3ProtocolRegistered && !string.IsNullOrEmpty(Help3Environment.ManifestFolder))
{
if (Help3Environment.IsHelp3ProtocolRegistered && !string.IsNullOrEmpty(Help3Environment.ManifestFolder)) {
try {
DirectoryInfo folder = new DirectoryInfo(Help3Environment.ManifestFolder);
FileInfo[] files = folder.GetFiles(@"queryManifest*.xml");
@ -58,10 +57,10 @@ namespace MSHelpSystem.Core @@ -58,10 +57,10 @@ namespace MSHelpSystem.Core
);
}
}
LoggingService.Debug(string.Format("Help 3.0: {0} {1} loaded", catalogs.Count, (catalogs.Count == 1)?"catalog":"catalogs"));
LoggingService.Debug(string.Format("HelpViewer: {0} {1} loaded", catalogs.Count, (catalogs.Count == 1)?"catalog":"catalogs"));
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
}
OnCatalogsUpdated(EventArgs.Empty);
@ -94,8 +93,7 @@ namespace MSHelpSystem.Core @@ -94,8 +93,7 @@ namespace MSHelpSystem.Core
public static ReadOnlyCollection<Help3Catalog> Items
{
get
{
get {
ReadOnlyCollection<Help3Catalog> c = new ReadOnlyCollection<Help3Catalog>(catalogs);
return c;
}
@ -133,12 +131,10 @@ namespace MSHelpSystem.Core @@ -133,12 +131,10 @@ namespace MSHelpSystem.Core
public static string ActiveCatalogId
{
get
{
get {
return config.ActiveCatalogId;
}
set
{
set {
config.ActiveCatalogId = value;
OnCatalogChanged(EventArgs.Empty);
}
@ -167,10 +163,10 @@ namespace MSHelpSystem.Core @@ -167,10 +163,10 @@ namespace MSHelpSystem.Core
TextReader file = new StreamReader(configFile);
config = (Help3Configuration)serialize.Deserialize(file);
file.Close();
LoggingService.Info("Help 3.0: Configuration successfully loaded");
LoggingService.Info("HelpViewer: Configuration successfully loaded");
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
OnConfigurationUpdated(EventArgs.Empty);
}
@ -183,10 +179,10 @@ namespace MSHelpSystem.Core @@ -183,10 +179,10 @@ namespace MSHelpSystem.Core
TextWriter file = new StreamWriter(configFile);
serialize.Serialize(file, config);
file.Close();
LoggingService.Info("Help 3.0: Configuration successfully saved");
LoggingService.Info("HelpViewer: Configuration successfully saved");
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
OnConfigurationUpdated(EventArgs.Empty);
}
@ -201,19 +197,19 @@ namespace MSHelpSystem.Core @@ -201,19 +197,19 @@ namespace MSHelpSystem.Core
static void OnCatalogsUpdated(EventArgs e)
{
LoggingService.Debug("Help 3.0: \"OnCatalogsUpdated\" event raised");
LoggingService.Debug("HelpViewer: OnCatalogsUpdated event raised");
if (CatalogsUpdated != null) CatalogsUpdated(null, e);
}
static void OnCatalogChanged(EventArgs e)
{
LoggingService.Debug("Help 3.0: \"OnCatalogChanged\" event raised");
LoggingService.Debug("HelpViewer: OnCatalogChanged event raised");
if (CatalogChanged != null) CatalogChanged(null, e);
}
static void OnConfigurationUpdated(EventArgs e)
{
LoggingService.Debug("Help 3.0: \"OnConfigurationUpdated\" event raised");
LoggingService.Debug("HelpViewer: OnConfigurationUpdated event raised");
if (ConfigurationUpdated != null) ConfigurationUpdated(null, e);
}

42
src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs

@ -19,29 +19,26 @@ namespace MSHelpSystem.Core @@ -19,29 +19,26 @@ namespace MSHelpSystem.Core
public static bool IsRunning
{
get
{
get {
Process[] agents = Process.GetProcessesByName("HelpLibAgent");
LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryAgent.exe found", agents.Length, (agents.Length == 1)?"process":"processes"));
LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryAgent {1} found", agents.Length, (agents.Length == 1)?"process":"processes"));
return agents.Length > 0;
}
}
public static string Agent
{
get
{
get {
if (string.IsNullOrEmpty(Help3Environment.AppRoot)) return string.Empty;
string agent = Path.Combine(Help3Environment.AppRoot, "HelpLibAgent.exe");
LoggingService.Debug(string.Format("Help 3.0: Help library agent is \"{0}\"", agent));
LoggingService.Debug(string.Format("HelpViewer: HelpLibraryAgent is \"{0}\"", agent));
return (File.Exists(agent)) ? agent : string.Empty;
}
}
public static int PortNumber
{
get
{
get {
try {
RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0", false);
string port = (string)hklm.GetValue("AgentPort", "47873");
@ -49,7 +46,7 @@ namespace MSHelpSystem.Core @@ -49,7 +46,7 @@ namespace MSHelpSystem.Core
return Convert.ToInt32(port);
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return 47873; // This is the DEFAULT port number!
}
@ -57,8 +54,7 @@ namespace MSHelpSystem.Core @@ -57,8 +54,7 @@ namespace MSHelpSystem.Core
public static bool PortIsReady
{
get
{
get {
try {
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(IPAddress.Parse("127.0.0.1"), PortNumber);
@ -68,10 +64,10 @@ namespace MSHelpSystem.Core @@ -68,10 +64,10 @@ namespace MSHelpSystem.Core
}
catch (SocketException ex) {
if (ex.ErrorCode == 10061) {
LoggingService.Debug("Help 3.0: Port is available but not ready");
LoggingService.Debug("HelpViewer: Port is available but not ready");
return true;
}
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@ -79,19 +75,17 @@ namespace MSHelpSystem.Core @@ -79,19 +75,17 @@ namespace MSHelpSystem.Core
public static int ProcessId
{
get
{
get {
Process[] agents = Process.GetProcessesByName("HelpLibAgent");
int processId = (agents.Length > 0) ? agents[0].Id:0;
LoggingService.Debug(string.Format("Help 3.0: Help library agent has the process ID \"{0}\"", processId));
LoggingService.Debug(string.Format("HelpViewer: HelpLibraryAgent has process ID \"{0}\"", processId));
return processId;
}
}
public static string CurrentViewer
{
get
{
get {
string viewer = string.Empty;
try {
RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0", false);
@ -107,9 +101,9 @@ namespace MSHelpSystem.Core @@ -107,9 +101,9 @@ namespace MSHelpSystem.Core
}
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
LoggingService.Debug(string.Format("Help 3.0: Default viewer is \"{0}\"", viewer));
LoggingService.Debug(string.Format("HelpViewer: Default viewer is \"{0}\"", viewer));
return viewer;
}
}
@ -121,11 +115,11 @@ namespace MSHelpSystem.Core @@ -121,11 +115,11 @@ namespace MSHelpSystem.Core
try {
Process p = Process.Start(Agent);
p.WaitForInputIdle();
LoggingService.Info("Help 3.0: Help library agent started");
LoggingService.Info("HelpViewer: HelpLibraryAgent started");
return IsRunning;
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@ -144,10 +138,10 @@ namespace MSHelpSystem.Core @@ -144,10 +138,10 @@ namespace MSHelpSystem.Core
agent.Kill();
if (waitForExit) agent.WaitForExit();
}
LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryAgent.exe stopped", agents.Length, (agents.Length == 1)?"process":"processes"));
LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryAgent {1} stopped", agents.Length, (agents.Length == 1)?"process":"processes"));
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return true;
}

36
src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs

@ -18,21 +18,19 @@ namespace MSHelpSystem.Core @@ -18,21 +18,19 @@ namespace MSHelpSystem.Core
public static bool IsRunning
{
get
{
get {
Process[] managers = Process.GetProcessesByName("HelpLibManager");
LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryManager.exe found", managers.Length, (managers.Length == 1)?"process":"processes"));
LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryManager {1} found", managers.Length, (managers.Length == 1)?"process":"processes"));
return managers.Length > 0;
}
}
public static string Manager
{
get
{
get {
if (string.IsNullOrEmpty(Help3Environment.AppRoot)) return string.Empty;
string manager = Path.Combine(Help3Environment.AppRoot, "HelpLibManager.exe");
LoggingService.Debug(string.Format("Help 3.0: Help library manager is \"{0}\"", manager));
LoggingService.Debug(string.Format("HelpViewer: HelpLibraryManager is \"{0}\"", manager));
return (File.Exists(manager)) ? manager : string.Empty;
}
}
@ -61,7 +59,7 @@ namespace MSHelpSystem.Core @@ -61,7 +59,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):"";
string arguments = string.Format("/product {0} /version {1} /locale {2} /content \"{3}\" {4}", productCode, productVersion, locale, Help3Environment.BuildLocalStoreFolder, brandingSwitch);
LoggingService.Debug(string.Format("Help 3.0: Initializing local store with \"{0}\"", arguments));
LoggingService.Debug(string.Format("HelpViewer: Initializing local store with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@ -88,7 +86,7 @@ namespace MSHelpSystem.Core @@ -88,7 +86,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):"";
string arguments = string.Format("/product {0} /version {1} /locale {2} /sourceMedia \"{3}\" {4} {5}", productCode, productVersion, locale, sourceMedia, initLS, brandingSwitch);
LoggingService.Debug(string.Format("Help 3.0: Installing local help documents with \"{0}\"", arguments));
LoggingService.Debug(string.Format("HelpViewer: Installing local help documents with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@ -114,7 +112,7 @@ namespace MSHelpSystem.Core @@ -114,7 +112,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):"";
string arguments = string.Format("/product {0} /version {1} /locale {2} /sourceWeb \"{3}\" {4} {5}", productCode, productVersion, locale, sourceWeb, initLS, brandingSwitch);
LoggingService.Debug(string.Format("Help 3.0: Installing help documents from web with \"{0}\"", arguments));
LoggingService.Debug(string.Format("HelpViewer: Installing help documents from web with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@ -136,7 +134,7 @@ namespace MSHelpSystem.Core @@ -136,7 +134,7 @@ namespace MSHelpSystem.Core
string arguments = string.Format("/product {0} /version {1} /locale {2} /vendor \"{3}\" /productName \"{4}\" /mediaBookList {5} /uninstall", productCode, productVersion, locale, vendor, productName, mediaBookList);
LoggingService.Debug(string.Format("Help 3.0: Uninstalling help documents with \"{0}\"", arguments));
LoggingService.Debug(string.Format("HelpViewer: Uninstalling help documents with \"{0}\"", arguments));
HelpLibManagerProcessRunner(arguments);
}
@ -166,13 +164,17 @@ namespace MSHelpSystem.Core @@ -166,13 +164,17 @@ namespace MSHelpSystem.Core
return p.ExitCode;
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return -1;
}
public static bool Start()
{
return Start(false);
}
public static bool Start(bool runPrivileged)
{
if (IsRunning) return true;
if (string.IsNullOrEmpty(Manager)) {
@ -186,16 +188,16 @@ namespace MSHelpSystem.Core @@ -186,16 +188,16 @@ namespace MSHelpSystem.Core
psi.WorkingDirectory = Help3Environment.AppRoot;
psi.Arguments = Help3Service.ActiveCatalog.AsCmdLineParam;
psi.UseShellExecute = true;
psi.Verb = "runas";
if (runPrivileged) psi.Verb = "runas";
psi.WindowStyle = ProcessWindowStyle.Normal;
try {
Process p = Process.Start(psi);
p.WaitForInputIdle();
LoggingService.Info("Help 3.0: Help library manager started");
LoggingService.Info("HelpViewer: HelpLibraryManager started");
return IsRunning;
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return false;
}
@ -214,10 +216,10 @@ namespace MSHelpSystem.Core @@ -214,10 +216,10 @@ namespace MSHelpSystem.Core
manager.Kill();
if (waitForExit) manager.WaitForExit();
}
LoggingService.Debug(string.Format("Help 3.0: {0} {1} of HelpLibraryManager.exe stopped", managers.Length, (managers.Length == 1)?"process":"processes"));
LoggingService.Debug(string.Format("HelpViewer: {0} HelpLibraryManager {1} stopped", managers.Length, (managers.Length == 1)?"process":"processes"));
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return true;
}

6
src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs

@ -49,22 +49,22 @@ namespace MSHelpSystem @@ -49,22 +49,22 @@ namespace MSHelpSystem
void Help3OfflineModeClicked(object sender, RoutedEventArgs e)
{
LoggingService.Info("Help 3.0: Setting help mode to \"offline\"");
Help3Service.Config.OfflineMode = true;
help3Catalogs.IsEnabled = (help3Catalogs.Items.Count > 1 && Help3Service.Config.OfflineMode);
LoggingService.Info("HelpViewer: Help mode set to \"offline\"");
}
void Help3OnlineModeClicked(object sender, RoutedEventArgs e)
{
LoggingService.Info("Help 3.0: Setting help mode to \"online\"");
Help3Service.Config.OfflineMode = false;
help3Catalogs.IsEnabled = false;
LoggingService.Info("HelpViewer: Help mode set to \"online\"");
}
void Help3UseExternalHelpClicked(object sender, RoutedEventArgs e)
{
Help3Service.Config.ExternalHelp = (bool)externalHelp.IsChecked;
LoggingService.Info(string.Format("Help 3.0: {0} external help", (Help3Service.Config.ExternalHelp)?"Enabling":"Disabling"));
LoggingService.Info(string.Format("HelpViewer: External help viewer {0}", (Help3Service.Config.ExternalHelp)?"enabled":"disabled"));
}
public override bool SaveOptions()

6
src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs

@ -97,7 +97,7 @@ namespace MSHelpSystem.Helper @@ -97,7 +97,7 @@ namespace MSHelpSystem.Helper
}
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
return "offline";
}
@ -105,7 +105,7 @@ namespace MSHelpSystem.Helper @@ -105,7 +105,7 @@ namespace MSHelpSystem.Helper
static void SetHelpMode()
{
clientFileChanged.EnableRaisingEvents = false;
LoggingService.Info(string.Format("Help 3.0: Trying to set Help mode to \"{0}\"", helpMode));
LoggingService.Info(string.Format("HelpViewer: Trying to set help mode to \"{0}\"", helpMode));
Configuration config = null;
try {
@ -136,7 +136,7 @@ namespace MSHelpSystem.Helper @@ -136,7 +136,7 @@ namespace MSHelpSystem.Helper
}
}
catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString()));
LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
}
clientFileChanged.EnableRaisingEvents = true;
}

36
src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs

@ -23,33 +23,39 @@ namespace MSHelpSystem.Helper @@ -23,33 +23,39 @@ namespace MSHelpSystem.Helper
Dictionary<string, string> result = new Dictionary<string, string>();
result.Add("C++", "C%2B%2B");
result.Add("C#", "CSharp");
result.Add("F#", "FSharp");
result.Add("VBNet", "VB");
return result;
}
#endregion
public static string GetCurrentLanguage()
public static string CurrentLanguage
{
string output = string.Empty;
if (ProjectService.CurrentProject != null) {
string devLang = ProjectService.CurrentProject.Language;
if (string.IsNullOrEmpty(devLang)) { throw new ArgumentNullException("devLang"); }
output = devLang;
if (!languages.ContainsKey(devLang) || !languages.TryGetValue(devLang, out output)) {
output = devLang;
get {
string output = string.Empty;
if (ProjectService.CurrentProject != null) {
string devLang = ProjectService.CurrentProject.Language;
if (string.IsNullOrEmpty(devLang)) {
throw new ArgumentNullException("devLang");
}
if (!languages.ContainsKey(devLang) || !languages.TryGetValue(devLang, out output)) {
output = devLang;
}
LoggingService.Debug(string.Format("HelpViewer: Project language \"{0}\" formatted to \"{1}\"", devLang, output));
}
LoggingService.Debug(string.Format("Help 3.0: Project language \"{0}\" formatted to \"{1}\"", devLang, output));
return output.ToLower();
}
return output.ToLower();
}
public static string GetCurrentLanguageAsHttpParam()
public static string CurrentLanguageAsHttpParam
{
string devLang = GetCurrentLanguage();
if (string.IsNullOrEmpty(devLang)) return string.Empty;
else return string.Format("&category=DevLang%3a{0}", devLang);
get {
string devLang = CurrentLanguage;
if (string.IsNullOrEmpty(devLang)) return string.Empty;
else return string.Format("&category=DevLang%3a{0}", devLang);
}
}
}
}

4
src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs

@ -15,7 +15,7 @@ namespace MSHelpSystem @@ -15,7 +15,7 @@ namespace MSHelpSystem
if (string.IsNullOrEmpty(fullTypeName)) {
throw new ArgumentNullException("fullTypeName");
}
LoggingService.Info(string.Format("Help 3.0: Calling \"TryShowHelp\" with {0}", fullTypeName));
LoggingService.Info(string.Format("HelpViewer: TryShowHelp calls \"{0}\"", fullTypeName));
return DisplayHelp.ContextualHelp(fullTypeName);
}
@ -24,7 +24,7 @@ namespace MSHelpSystem @@ -24,7 +24,7 @@ namespace MSHelpSystem
if (string.IsNullOrEmpty(keyword)) {
throw new ArgumentNullException("keyword");
}
LoggingService.Info(string.Format("Help 3.0: Calling \"TryShowHelpByKeyword\" with {0}", keyword));
LoggingService.Info(string.Format("HelpViewer: TryShowHelpByKeyword calls \"{0}\"", keyword));
DisplayHelp.Keywords(keyword);
return true;
}

16
src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj

@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
<PropertyGroup>
<ProjectGuid>{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.PackageManagement.Cmdlets</RootNamespace>
<AssemblyName>PackageManagement.Cmdlets</AssemblyName>
@ -17,13 +17,6 @@ @@ -17,13 +17,6 @@
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<BaseAddress>4194304</BaseAddress>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
@ -39,6 +32,13 @@ @@ -39,6 +32,13 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
<BaseAddress>4194304</BaseAddress>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<ItemGroup>
<Reference Include="NuGet.Core">
<HintPath>..\..\RequiredLibraries\NuGet.Core.dll</HintPath>

8
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
<PropertyGroup>
<ProjectGuid>{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.PackageManagement</RootNamespace>
<AssemblyName>PackageManagement</AssemblyName>
@ -16,14 +16,14 @@ @@ -16,14 +16,14 @@
<TargetFrameworkProfile />
<NoWin32Manifest>False</NoWin32Manifest>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<FileAlignment>4096</FileAlignment>
<Prefer32Bit>False</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>

8
src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs

@ -8,14 +8,14 @@ namespace ICSharpCode.PackageManagement @@ -8,14 +8,14 @@ namespace ICSharpCode.PackageManagement
{
public static class IPackageRepositoryExtensions
{
public static IDisposable StartInstallOperation(this IPackageRepository repository, string mainPackageId = null)
public static IDisposable StartInstallOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null)
{
return repository.StartOperation(RepositoryOperationNames.Install, mainPackageId);
return repository.StartOperation(RepositoryOperationNames.Install, mainPackageId, mainPackageVersion);
}
public static IDisposable StartUpdateOperation(this IPackageRepository repository, string mainPackageId = null)
public static IDisposable StartUpdateOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null)
{
return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId);
return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId, mainPackageVersion);
}
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save