Browse Source

Merge branch 'master' into newNR

Conflicts:
	src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
	src/AddIns/Misc/HelpViewer/Source/Commands.cs
	src/Main/GlobalAssemblyInfo.cs.template
	src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs
	src/Setup/Files.wxs
	src/Setup/Setup.wxs
	src/Tools/NUnit/nunit-console-dotnet2-x86.exe
	src/Tools/NUnit/nunit-console-dotnet2.exe
	src/Tools/NUnit/nunit-console-x86.exe
	src/Tools/NUnit/nunit-console.exe
pull/59/merge
Matt Ward 13 years ago
parent
commit
5a39ad4d46
  1. 7
      data/resources/StringResources.de.resx
  2. 7
      data/resources/StringResources.resx
  3. 38
      doc/Dependencies.html
  4. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Chiron.exe
  5. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/DLLs/IronPython.Wpf.dll
  6. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.Modules.dll
  7. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/IronPython.dll
  8. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Dynamic.dll
  9. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.Metadata.dll
  10. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/Microsoft.Scripting.dll
  11. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/ipy.exe
  12. BIN
      src/AddIns/BackendBindings/Python/RequiredLibraries/ipyw.exe
  13. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Chiron.exe
  14. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.Yaml.dll
  15. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.Libraries.dll
  16. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/IronRuby.dll
  17. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Dynamic.dll
  18. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.Metadata.dll
  19. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/Microsoft.Scripting.dll
  20. BIN
      src/AddIns/BackendBindings/Ruby/IronRuby/bin/ir.exe
  21. 6
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
  22. 6
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/PanelMoveAdorner.cs
  23. 16
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
  24. 13
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
  25. 78
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForInvisibleControl.cs
  26. 3
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
  27. 9
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs
  28. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/license.txt
  29. BIN
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Images/lock.png
  30. 32
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeView.cs
  31. 30
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/DragTreeViewItem.cs
  32. 39
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml
  33. 55
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
  34. 18
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
  35. 12
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineView.xaml
  36. 3
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
  37. 43
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
  38. 17
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
  39. 5
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/AssemblyInfo.cs
  40. 53
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/EditOperationTests.cs
  41. 19
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs
  42. 40
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
  43. 184
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/NamespaceTests.cs
  44. 60
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/SetPropertyTests.cs
  45. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj
  46. 17
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/DesignTimeProperties.cs
  47. 39
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/NameScopeHelper.cs
  48. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs
  49. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlParser.cs
  50. 12
      src/AddIns/Misc/HelpViewer/HelpViewer.addin
  51. 8
      src/AddIns/Misc/HelpViewer/HelpViewer.csproj
  52. 42
      src/AddIns/Misc/HelpViewer/Source/Commands.cs
  53. 21
      src/AddIns/Misc/HelpViewer/Source/Controls/HelpLibraryManagerNotFound.cs
  54. 7
      src/AddIns/Misc/HelpViewer/Source/Controls/SearchPadControl.xaml
  55. 13
      src/AddIns/Misc/HelpViewer/Source/Controls/TocEntry.cs
  56. 6
      src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml
  57. 2
      src/AddIns/Misc/HelpViewer/Source/Controls/TocPadControl.xaml.cs
  58. 30
      src/AddIns/Misc/HelpViewer/Source/Core/DisplayHelp.cs
  59. 21
      src/AddIns/Misc/HelpViewer/Source/Core/Help3Environment.cs
  60. 30
      src/AddIns/Misc/HelpViewer/Source/Core/Help3Service.cs
  61. 42
      src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryAgent.cs
  62. 36
      src/AddIns/Misc/HelpViewer/Source/Core/HelpLibraryManager.cs
  63. 6
      src/AddIns/Misc/HelpViewer/Source/Help3OptionsPanel.xaml.cs
  64. 6
      src/AddIns/Misc/HelpViewer/Source/Helper/HelpClientWatcher.cs
  65. 20
      src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs
  66. 4
      src/AddIns/Misc/HelpViewer/Source/MSHelp3Provider.cs
  67. 8
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
  68. BIN
      src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll
  69. BIN
      src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll
  70. BIN
      src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll
  71. BIN
      src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe
  72. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
  73. 5
      src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs
  74. 2
      src/Libraries/SharpSvn/Licenses/Putty-License.txt
  75. 2
      src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt
  76. 8
      src/Libraries/SharpSvn/Licenses/Subversion-License.txt
  77. 24
      src/Libraries/SharpSvn/Licenses/ZLib-License.txt
  78. BIN
      src/Libraries/SharpSvn/SharpPlink-Win32.svnExe
  79. BIN
      src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.svnDll
  80. BIN
      src/Libraries/SharpSvn/SharpSvn-Sasl21-23-win32.dll
  81. BIN
      src/Libraries/SharpSvn/SharpSvn.UI.dll
  82. 15
      src/Libraries/SharpSvn/SharpSvn.UI.xml
  83. BIN
      src/Libraries/SharpSvn/SharpSvn.dll
  84. 12
      src/Libraries/SharpSvn/SharpSvn.wxs
  85. 4923
      src/Libraries/SharpSvn/SharpSvn.xml
  86. 6
      src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs
  87. 2
      src/Setup/Chocolatey/Tools/chocolateyInstall.ps1
  88. 4
      src/Setup/Chocolatey/sharpdevelop.nuspec
  89. 5
      src/Setup/Files.wxs
  90. 20
      src/Setup/Setup.wxs
  91. 1
      src/Setup/SharpDevelop.Setup.wixproj
  92. BIN
      src/Tools/NUnit/lib/nunit-console-runner.dll
  93. BIN
      src/Tools/NUnit/lib/nunit.core.dll
  94. BIN
      src/Tools/NUnit/lib/nunit.core.interfaces.dll
  95. BIN
      src/Tools/NUnit/lib/nunit.util.dll
  96. 4
      src/Tools/NUnit/license.txt
  97. BIN
      src/Tools/NUnit/nunit-console-dotnet2-x86.exe
  98. BIN
      src/Tools/NUnit/nunit-console-dotnet2.exe
  99. BIN
      src/Tools/NUnit/nunit-console-x86.exe
  100. BIN
      src/Tools/NUnit/nunit-console.exe
  101. Some files were not shown because too many files have changed in this diff Show More

7
data/resources/StringResources.de.resx

@ -415,11 +415,14 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S
<value>Hilfebibliothek</value> <value>Hilfebibliothek</value>
</data> </data>
<data name="AddIns.HelpViewer.HelpModeLabel" xml:space="preserve"> <data name="AddIns.HelpViewer.HelpModeLabel" xml:space="preserve">
<value>Hilfetyp</value> <value>Hilfetyp wählen</value>
</data> </data>
<data name="AddIns.HelpViewer.HLMNoActiveCatalogError" xml:space="preserve"> <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> <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>
<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"> <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> <value>Help Library Manager wurde nicht gefunden. Bitte stellen Sie sicher, dass es korrekt installiert wurde.</value>
</data> </data>
@ -448,7 +451,7 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S
<value>Hilfe anzeigen</value> <value>Hilfe anzeigen</value>
</data> </data>
<data name="AddIns.HelpViewer.UseExternalHelp" xml:space="preserve"> <data name="AddIns.HelpViewer.UseExternalHelp" xml:space="preserve">
<value>Externe Hilfe verwenden</value> <value>Externen Hilfebetrachter verwenden</value>
</data> </data>
<data name="AddIns.HelpViewer.UseOfflineHelpLabel" xml:space="preserve"> <data name="AddIns.HelpViewer.UseOfflineHelpLabel" xml:space="preserve">
<value>Ich möchte die lokale Hilfe verwenden</value> <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
<value>Help Library</value> <value>Help Library</value>
</data> </data>
<data name="AddIns.HelpViewer.HelpModeLabel" xml:space="preserve"> <data name="AddIns.HelpViewer.HelpModeLabel" xml:space="preserve">
<value>Help Mode</value> <value>Set Help Preference</value>
</data> </data>
<data name="AddIns.HelpViewer.HLMNoActiveCatalogError" xml:space="preserve"> <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> <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> <comment>Error message when there is no help catalog active</comment>
</data> </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"> <data name="AddIns.HelpViewer.HLMNotFound" xml:space="preserve">
<value>Help Library Manager was not found. Please check if it was installed correctly.</value> <value>Help Library Manager was not found. Please check if it was installed correctly.</value>
</data> </data>
@ -460,7 +463,7 @@ They will stop working after removing this AddIn! Are you sure you want to conti
<value>Show Help</value> <value>Show Help</value>
</data> </data>
<data name="AddIns.HelpViewer.UseExternalHelp" xml:space="preserve"> <data name="AddIns.HelpViewer.UseExternalHelp" xml:space="preserve">
<value>Use external help</value> <value>Use external help viewer</value>
</data> </data>
<data name="AddIns.HelpViewer.UseOfflineHelpLabel" xml:space="preserve"> <data name="AddIns.HelpViewer.UseOfflineHelpLabel" xml:space="preserve">
<value>I want to use local help</value> <value>I want to use local help</value>

38
doc/Dependencies.html

@ -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>

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.

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

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

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

@ -47,10 +47,14 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
{ {
base.OnApplyTemplate(); 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>(); var surface = this.TryFindParent<DesignSurface>();
if (surface != null && surface.ZoomControl != null) 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; bnd.Converter = InvertedZoomConverter.Instance;
BindingOperations.SetBinding(scaleTransform, ScaleTransform.ScaleXProperty, bnd); BindingOperations.SetBinding(scaleTransform, ScaleTransform.ScaleXProperty, bnd);

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

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

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

@ -31,7 +31,7 @@ namespace ICSharpCode.WpfDesign.Designer
/// </summary> /// </summary>
[TemplatePart(Name = "PART_DesignContent", Type = typeof(ContentControl))] [TemplatePart(Name = "PART_DesignContent", Type = typeof(ContentControl))]
[TemplatePart(Name = "PART_Zoom", Type = typeof(ZoomControl))] [TemplatePart(Name = "PART_Zoom", Type = typeof(ZoomControl))]
public class DesignSurface : ContentControl public partial class DesignSurface : ContentControl
{ {
private FocusNavigator _focusNav; private FocusNavigator _focusNav;
@ -74,9 +74,20 @@ namespace ICSharpCode.WpfDesign.Designer
base.OnApplyTemplate(); 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) void _partDesignContent_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{ {
if (!enableBringIntoView)
e.Handled = true; e.Handled = true;
enableBringIntoView = false;
} }
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e) protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)

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

@ -3,15 +3,17 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Extensions;
using System.Windows.Controls;
using System.Windows; using System.Windows;
using ICSharpCode.WpfDesign.Designer.Controls; using System.Windows.Controls;
using System.Windows.Media; using System.Windows.Media;
using ICSharpCode.WpfDesign.Adorners;
using ICSharpCode.WpfDesign.Designer.Controls;
using ICSharpCode.WpfDesign.Extensions;
namespace ICSharpCode.WpfDesign.Designer.Extensions namespace ICSharpCode.WpfDesign.Designer.Extensions
{ {
[ExtensionFor(typeof(Panel))] [ExtensionFor(typeof(Panel))]
@ -21,6 +23,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
public class BorderForInvisibleControl : PermanentAdornerProvider public class BorderForInvisibleControl : PermanentAdornerProvider
{ {
AdornerPanel adornerPanel; AdornerPanel adornerPanel;
AdornerPanel cachedAdornerPanel;
protected override void OnInitialized() protected override void OnInitialized()
{ {
@ -28,52 +31,79 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (ExtendedItem.Component is Border) 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(); CreateAdorner();
}
if (border != null) {
var adornerBorder = (Border)adornerPanel.Children[0];
if (IsBorderBrushInvisible(border))
adornerBorder.BorderThickness = new Thickness(1);
else 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 {
RemoveAdorner(); RemoveAdorner();
} }
} }
} }
private void CreateAdorner() 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)
{ {
if (adornerPanel == null) return border.BorderBrush == null || border.BorderBrush == Brushes.Transparent;
}
private void CreateAdorner()
{ {
adornerPanel = new AdornerPanel(); if (adornerPanel == null) {
adornerPanel.Order = AdornerOrder.Background;
if (cachedAdornerPanel == null) {
cachedAdornerPanel = new AdornerPanel();
cachedAdornerPanel.Order = AdornerOrder.Background;
var border = new Border(); var border = new Border();
border.BorderThickness = new Thickness(1); border.BorderThickness = new Thickness(1);
border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC)); border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC));
border.IsHitTestVisible = false; border.IsHitTestVisible = false;
AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent); AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent);
adornerPanel.Children.Add(border); cachedAdornerPanel.Children.Add(border);
}
adornerPanel = cachedAdornerPanel;
Adorners.Add(adornerPanel); Adorners.Add(adornerPanel);
} }
} }
private void RemoveAdorner() private void RemoveAdorner()
{ {
if (adornerPanel != null) if (adornerPanel != null) {
{
Adorners.Remove(adornerPanel); Adorners.Remove(adornerPanel);
adornerPanel = null; adornerPanel = null;
} }

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

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

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

@ -147,6 +147,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
if (alignment.Vertical == VerticalAlignment.Bottom) dy = drag.Delta.Y; if (alignment.Vertical == VerticalAlignment.Bottom) dy = drag.Delta.Y;
var designPanel = ExtendedItem.Services.DesignPanel as DesignPanel; 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) if (zoom != null)
{ {
dx = dx * (1 / zoom.CurrentZoom); 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:
- Icons.16x16.WpfOutline.EyeClosed.png - Icons.16x16.WpfOutline.EyeClosed.png
- Icons.16x16.GuideSnap.png - Icons.16x16.GuideSnap.png
- Icons.16x16.GridSnap.png - Icons.16x16.GridSnap.png
- lock.png
Copied from the Fugue Icon Library and modified or mashed up with other Fugue Copied from the Fugue Icon Library and modified or mashed up with other Fugue
Icons or parts taken from them: 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

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

@ -54,10 +54,32 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
set { SetValue(RootProperty, value); } set { SetValue(RootProperty, value); }
} }
//public object[] SelectedItems #region Filtering
//{
// get { return Selection.Select(item => item.DataContext).ToArray(); } 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;
}
#endregion
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{ {
@ -261,7 +283,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
OnSelectionChanged(); OnSelectionChanged();
} }
void SelectOnly(DragTreeViewItem item) protected virtual void SelectOnly(DragTreeViewItem item)
{ {
ClearSelection(); ClearSelection();
Select(item); Select(item);

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

@ -20,6 +20,8 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
{ {
public class DragTreeViewItem : TreeViewItem public class DragTreeViewItem : TreeViewItem
{ {
ContentPresenter part_header;
static DragTreeViewItem() static DragTreeViewItem()
{ {
DefaultStyleKeyProperty.OverrideMetadata(typeof(DragTreeViewItem), DefaultStyleKeyProperty.OverrideMetadata(typeof(DragTreeViewItem),
@ -37,25 +39,51 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
ParentTree = this.GetVisualAncestors().OfType<DragTreeView>().FirstOrDefault(); ParentTree = this.GetVisualAncestors().OfType<DragTreeView>().FirstOrDefault();
if (ParentTree != null) { if (ParentTree != null) {
ParentTree.ItemAttached(this); 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) void DragTreeViewItem_Unloaded(object sender, RoutedEventArgs e)
{ {
if (ParentTree != null) { if (ParentTree != null) {
ParentTree.ItemDetached(this); ParentTree.ItemDetached(this);
ParentTree.FilterChanged -= ParentTree_FilterChanged;
} }
ParentTree = null; ParentTree = null;
} }
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
part_header = GetTemplateChild("PART_Header") as ContentPresenter;
}
public new static readonly DependencyProperty IsSelectedProperty = public new static readonly DependencyProperty IsSelectedProperty =
Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem)); Selector.IsSelectedProperty.AddOwner(typeof(DragTreeViewItem), new FrameworkPropertyMetadata(OnIsSelectedChanged));
public new bool IsSelected { public new bool IsSelected {
get { return (bool)GetValue(IsSelectedProperty); } get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); } 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 = public static readonly DependencyProperty IsDragHoverProperty =
DependencyProperty.Register("IsDragHover", typeof(bool), typeof(DragTreeViewItem)); DependencyProperty.Register("IsDragHover", typeof(bool), typeof(DragTreeViewItem));

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

@ -2,7 +2,8 @@
x:Name="root" x:Name="root"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 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> <UserControl.Resources>
@ -34,9 +35,38 @@
</Setter> </Setter>
</Style> </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}" <HierarchicalDataTemplate DataType="{x:Type Default:OutlineNode}"
ItemsSource="{Binding Children}"> ItemsSource="{Binding Children}">
<DockPanel> <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}" /> <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}" /> <Default:IconItem Icon="../Images/Tag.png" Text="{Binding Name}" />
</DockPanel> </DockPanel>
@ -44,7 +74,11 @@
</UserControl.Resources> </UserControl.Resources>
<Default:OutlineTreeView Root="{Binding Root, ElementName=root}">
<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> <ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type Default:DragTreeViewItem}"> <Style TargetType="{x:Type Default:DragTreeViewItem}">
<Setter Property="IsSelected" <Setter Property="IsSelected"
@ -54,5 +88,6 @@
</Style> </Style>
</ItemsControl.ItemContainerStyle> </ItemsControl.ItemContainerStyle>
</Default:OutlineTreeView> </Default:OutlineTreeView>
</DockPanel>
</UserControl> </UserControl>

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

@ -2,19 +2,21 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Text; 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;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; 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 namespace ICSharpCode.WpfDesign.Designer.OutlineView
{ {
public class OutlineNode : INotifyPropertyChanged public class OutlineNode : INotifyPropertyChanged
@ -50,6 +52,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden; ((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 //TODO
DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged); DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged); DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
@ -90,7 +97,6 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
} }
} }
bool _isDesignTimeVisible = true; bool _isDesignTimeVisible = true;
public bool IsDesignTimeVisible public bool IsDesignTimeVisible
@ -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>(); ObservableCollection<OutlineNode> children = new ObservableCollection<OutlineNode>();
public ObservableCollection<OutlineNode> Children { public ObservableCollection<OutlineNode> Children {
@ -168,6 +194,21 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
var node = OutlineNode.Create(item); var node = OutlineNode.Create(item);
Children.Add(node); 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
foreach (var item in items) foreach (var item in items)
_customOutlineNodes.Add(item.DataContext as OutlineNode); _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 @@
<ControlTemplate TargetType="{x:Type Default:DragTreeViewItem}"> <ControlTemplate TargetType="{x:Type Default:DragTreeViewItem}">
<DockPanel Background="White"> <DockPanel Background="White">
<DockPanel x:Name="bg" <Grid x:Name="bg"
Margin="{TemplateBinding Level, Converter={StaticResource LevelConverter}}"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Background="{TemplateBinding Background}"> Background="{TemplateBinding Background}">
<ToggleButton x:Name="expandButton" <ToggleButton HorizontalAlignment="Left" x:Name="expandButton"
Style="{StaticResource ExpandButtonStyle}" Style="{StaticResource ExpandButtonStyle}"
DockPanel.Dock="Left"
Margin="{TemplateBinding Level, Converter={StaticResource LevelConverter}}"
IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" /> IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" />
<Border x:Name="contentBorder" <Border x:Name="contentBorder"
Margin="11,0,0,0"
HorizontalAlignment="Stretch"> HorizontalAlignment="Stretch">
<ContentPresenter x:Name="PART_Header" <ContentPresenter x:Name="PART_Header"
ContentSource="Header" /> ContentSource="Header" />
</Border> </Border>
</DockPanel> </Grid>
<ItemsPresenter x:Name="itemsHost" /> <ItemsPresenter x:Name="itemsHost" />
<DockPanel.ContextMenu> <DockPanel.ContextMenu>
<ContextMenu> <ContextMenu>
@ -144,7 +144,7 @@
Value="False"> Value="False">
<Setter TargetName="expandButton" <Setter TargetName="expandButton"
Property="Visibility" Property="Visibility"
Value="Hidden" /> Value="Collapsed" />
</Trigger> </Trigger>
<Trigger Property="IsSelected" <Trigger Property="IsSelected"
Value="True"> Value="True">

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

@ -361,4 +361,7 @@
<Resource Include="Images\Icons.16x16.GuideSnap.png" /> <Resource Include="Images\Icons.16x16.GuideSnap.png" />
<Resource Include="Images\Icons.16x16.GridSnap.png" /> <Resource Include="Images\Icons.16x16.GridSnap.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Resource Include="Images\lock.png" />
</ItemGroup>
</Project> </Project>

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

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

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

@ -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() public override DesignItem Clone()
{ {
DesignItem item = null; DesignItem item = null;

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

@ -4,6 +4,7 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Markup;
using NUnit.Framework; using NUnit.Framework;
@ -21,3 +22,7 @@ using NUnit.Framework;
// Run unit tests on STA thread. // 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
Assert.AreEqual(_name, grid.ContentProperty.CollectionElements[3].Name); Assert.AreEqual(_name, grid.ContentProperty.CollectionElements[3].Name);
Assert.AreEqual(grid.ContentProperty.CollectionElements[3], selection.PrimarySelection); 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
return canvasChild; 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 = expectedXaml =
"<?xml version=\"1.0\" encoding=\"utf-16\"?>\n" + "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n" +
("<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " + expectedXaml.Replace("\r", "").Replace("\n", "\n ")
"xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" " +
"xmlns:t=\"" + DesignerTestsNamespace + "\">\n" + expectedXaml.Trim())
.Replace("\r", "").Replace("\n", "\n ")
+ "\n</Canvas>"; + "\n</Canvas>";
StringWriter stringWriter = new StringWriter(); StringWriter stringWriter = new StringWriter();

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

@ -2,17 +2,19 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
using NUnit.Framework; using System.Windows.Media;
using System.Xml;
using ICSharpCode.WpfDesign.Designer; using ICSharpCode.WpfDesign.Designer;
using ICSharpCode.WpfDesign.Designer.Xaml;
using ICSharpCode.WpfDesign.Designer.Services; using ICSharpCode.WpfDesign.Designer.Services;
using ICSharpCode.WpfDesign.Designer.Xaml;
using NUnit.Framework;
namespace ICSharpCode.WpfDesign.Tests.Designer namespace ICSharpCode.WpfDesign.Tests.Designer
{ {
@ -368,6 +370,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
{ {
AddBindingWithStaticResourceWhereResourceOnSameElement(true); 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 public class MyMultiConverter : IMultiValueConverter

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

@ -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 @@
using System; using System;
using System.Windows; using System.Windows;
using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Markup; using System.Windows.Markup;
@ -21,20 +22,22 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"{Binding}\" />", button.Context); AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"{Binding}\" />", button.Context);
} }
[Test, Ignore("Properties are not present in XAML DOM")] [Test]
public void SetContentToStaticResource() public void SetContentToStaticResource()
{ {
DesignItem button = CreateCanvasContext(@"<Button Width='100' Height='200'/>"); 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}? // 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); 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() public void SetContentToXStatic()
{ {
DesignItem button = CreateCanvasContext("<Button Width='100' Height='200'/>"); 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); AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"{x:Static Member=Button.ClickModeProperty}\" />", button.Context);
} }
@ -45,5 +48,54 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
button.Properties.GetProperty("Content").SetValue("Hello World!"); button.Properties.GetProperty("Content").SetValue("Hello World!");
AssertCanvasDesignerOutput("<Button Width=\"100\" Height=\"200\" Content=\"Hello World!\" />", button.Context); 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 @@
<Compile Include="Designer\MockFocusNavigator.cs" /> <Compile Include="Designer\MockFocusNavigator.cs" />
<Compile Include="Designer\ModelTestHelper.cs" /> <Compile Include="Designer\ModelTestHelper.cs" />
<Compile Include="Designer\ModelTests.cs" /> <Compile Include="Designer\ModelTests.cs" />
<Compile Include="Designer\NamespaceTests.cs" />
<Compile Include="Designer\OutlineView\HierarchyTests.cs" /> <Compile Include="Designer\OutlineView\HierarchyTests.cs" />
<Compile Include="Designer\OutlineView\InsertTests.cs" /> <Compile Include="Designer\OutlineView\InsertTests.cs" />
<Compile Include="Designer\OutlineView\SelectionTests.cs" /> <Compile Include="Designer\OutlineView\SelectionTests.cs" />

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

@ -112,5 +112,22 @@ namespace ICSharpCode.WpfDesign.XamlDom
DependencyProperty.RegisterAttached("DesignHeight", typeof(double), typeof(DesignTimeProperties)); DependencyProperty.RegisterAttached("DesignHeight", typeof(double), typeof(DesignTimeProperties));
#endregion #endregion
#region LayoutRounding
public static bool GetLayoutRounding(DependencyObject obj)
{
return (bool)obj.GetValue(DesignHeightProperty);
}
public static void SetLayoutRounding(DependencyObject obj, bool value)
{
obj.SetValue(DesignHeightProperty, value);
}
public static readonly DependencyProperty DesignLayoutRounding =
DependencyProperty.RegisterAttached("LayoutRounding", typeof(bool), typeof(DesignTimeProperties));
#endregion
} }
} }

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

@ -10,7 +10,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
/// <summary> /// <summary>
/// Static methods to help with <see cref="System.Windows.Markup.INameScope"/> operations on Xaml elements. /// Static methods to help with <see cref="System.Windows.Markup.INameScope"/> operations on Xaml elements.
/// </summary> /// </summary>
internal static class NameScopeHelper public static class NameScopeHelper
{ {
/// <summary> /// <summary>
/// Finds the XAML namescope for the specified object and uses it to unregister the old name and then register the new name. /// 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
/// <param name="namedObject">The object where the name was changed.</param> /// <param name="namedObject">The object where the name was changed.</param>
/// <param name="oldName">The old name.</param> /// <param name="oldName">The old name.</param>
/// <param name="newName">The new 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; var obj = namedObject;
while (obj != null) { while (obj != null) {
var nameScope = obj.Instance as INameScope; var nameScope = GetNameScopeFromObject(obj.Instance);
if (nameScope == null) {
var depObj = obj.Instance as DependencyObject;
if (depObj != null)
nameScope = NameScope.GetNameScope(depObj);
}
if (nameScope != null) { if (nameScope != null) {
if (oldName != null) { if (oldName != null) {
try { try {
@ -52,5 +47,33 @@ namespace ICSharpCode.WpfDesign.XamlDom
obj = obj.ParentObject; 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
if (hasStringConverter && XamlObject.GetContentPropertyName(elementType) != null) { if (hasStringConverter && XamlObject.GetContentPropertyName(elementType) != null) {
xml.InnerText = c.ConvertToInvariantString(instance); 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 // edit Design Items and so we have no XML, only the Brush
// object and we need to parse the Brush to XAML! // object and we need to parse the Brush to XAML!
var s = new MemoryStream(); var s = new MemoryStream();

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

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

12
src/AddIns/Misc/HelpViewer/HelpViewer.addin

@ -20,12 +20,16 @@
<BrowserSchemeExtension id = "http" class = "MSHelpSystem.BrowserScheme"/> <BrowserSchemeExtension id = "http" class = "MSHelpSystem.BrowserScheme"/>
</Path> </Path>
<Path name="/SharpDevelop/Pads/ErrorList/TaskContextMenu"> <Path name = "/SharpDevelop/Pads/ErrorList/TaskContextMenu">
<MenuItem id = "Help3ShowErrorHelp" label = "${res:AddIns.HelpViewer.ShowErrorHelpTitle}" class = "MSHelpSystem.Commands.ShowErrorHelpCommand" /> <MenuItem id = "Help3ShowErrorHelp"
label = "${res:AddIns.HelpViewer.ShowErrorHelpTitle}"
class = "MSHelpSystem.Commands.ShowErrorHelpCommand" />
</Path> </Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions"> <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>
<Path name = "/SharpDevelop/Workbench/Pads"> <Path name = "/SharpDevelop/Workbench/Pads">
@ -35,7 +39,7 @@
icon = "HtmlHelp2.16x16.Toc" icon = "HtmlHelp2.16x16.Toc"
class = "MSHelpSystem.Controls.Help3TocPad" class = "MSHelpSystem.Controls.Help3TocPad"
defaultPosition = "Right, Hidden" /> defaultPosition = "Right, Hidden" />
<Pad id = "Help3TocPad" <Pad id = "Help3SearchPad"
category = "Help3" category = "Help3"
title = "${res:AddIns.HelpViewer.SearchPadTitle}" title = "${res:AddIns.HelpViewer.SearchPadTitle}"
icon = "HtmlHelp2.16x16.Search" icon = "HtmlHelp2.16x16.Search"

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

@ -67,6 +67,7 @@
</Compile> </Compile>
<Compile Include="Configuration\AssemblyInfo.cs" /> <Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Source\BrowserScheme.cs" /> <Compile Include="Source\BrowserScheme.cs" />
<Compile Include="Source\Controls\HelpLibraryManagerNotFound.cs" />
<Compile Include="Source\Controls\Pads.cs" /> <Compile Include="Source\Controls\Pads.cs" />
<Compile Include="Source\Controls\SearchPadControl.xaml.cs"> <Compile Include="Source\Controls\SearchPadControl.xaml.cs">
<DependentUpon>SearchPadControl.xaml</DependentUpon> <DependentUpon>SearchPadControl.xaml</DependentUpon>
@ -81,7 +82,7 @@
<Compile Include="Source\Core\Help3Catalog.cs" /> <Compile Include="Source\Core\Help3Catalog.cs" />
<Compile Include="Source\Core\Help3Environment.cs" /> <Compile Include="Source\Core\Help3Environment.cs" />
<Compile Include="Source\Core\Help3Service.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\Core\HelpLibraryAgent.cs" />
<Compile Include="Source\Help3OptionsPanel.xaml.cs"> <Compile Include="Source\Help3OptionsPanel.xaml.cs">
<DependentUpon>Help3OptionsPanel.xaml</DependentUpon> <DependentUpon>Help3OptionsPanel.xaml</DependentUpon>
@ -121,6 +122,11 @@
<Name>ICSharpCode.Core.Presentation</Name> <Name>ICSharpCode.Core.Presentation</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </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> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project> </Project>

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

@ -5,11 +5,12 @@ using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using Microsoft.Win32;
using MSHelpSystem.Core;
using MSHelpSystem.Controls;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using MSHelpSystem.Controls;
using MSHelpSystem.Core;
namespace MSHelpSystem.Commands namespace MSHelpSystem.Commands
{ {
@ -27,13 +28,13 @@ namespace MSHelpSystem.Commands
return; return;
if (Help3Environment.IsHelp3ProtocolRegistered) { 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) if (Help3Environment.IsLocalHelp)
DisplayHelp.Keywords(code); DisplayHelp.Keywords(code);
else else
DisplayHelp.ContextualHelp(code); DisplayHelp.ContextualHelp(code);
} else { } else {
LoggingService.Error("Help 3.0: Help system ist not initialized"); LoggingService.Error("HelpViewer: Help system ist not initialized");
} }
} }
} }
@ -43,6 +44,12 @@ namespace MSHelpSystem.Commands
{ {
public override void Run() public override void Run()
{ {
if (!Help3Environment.IsHelp3ProtocolRegistered) {
using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
form.ShowDialog(WorkbenchSingleton.MainWin32Window);
}
return;
}
if (Help3Service.Config.ExternalHelp) DisplayHelp.Catalog(); if (Help3Service.Config.ExternalHelp) DisplayHelp.Catalog();
else { else {
PadDescriptor toc = SD.Workbench.GetPad(typeof(Help3TocPad)); PadDescriptor toc = SD.Workbench.GetPad(typeof(Help3TocPad));
@ -55,6 +62,12 @@ namespace MSHelpSystem.Commands
{ {
public override void Run() public override void Run()
{ {
if (!Help3Environment.IsHelp3ProtocolRegistered) {
using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
form.ShowDialog(WorkbenchSingleton.MainWin32Window);
}
return;
}
PadDescriptor search = SD.Workbench.GetPad(typeof(Help3SearchPad)); PadDescriptor search = SD.Workbench.GetPad(typeof(Help3SearchPad));
if (search != null) search.BringPadToFront(); if (search != null) search.BringPadToFront();
} }
@ -64,24 +77,13 @@ namespace MSHelpSystem.Commands
{ {
public override void Run() public override void Run()
{ {
string path; if (string.IsNullOrEmpty(HelpLibraryManager.Manager)) {
using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Help\v1.0")) { using (HelpLibraryManagerNotFoundForm form = new HelpLibraryManagerNotFoundForm()) {
path = key != null ? key.GetValue("AppRoot") as string : null; form.ShowDialog(WorkbenchSingleton.MainWin32Window);
}
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}");
return; 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 @@
// 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 @@
<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="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> <StackPanel>
<TextBlock Text="{core:Localize AddIns.HelpViewer.SearchLookForLabel}" Margin="5,2,5,1" /> <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" /> <ComboBox Name="searchCB" Margin="5,2,5,5" Padding="1" IsEnabled="False" IsEditable="True" PreviewKeyUp="SearchCBPreviewKeyUp" />

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

@ -9,6 +9,7 @@ using System.Linq;
using System.Net; using System.Net;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Web;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
@ -35,14 +36,14 @@ namespace MSHelpSystem.Controls
client.DownloadStringCompleted += (_, e) => client.DownloadStringCompleted += (_, e) =>
{ {
try { 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); var children = XElement.Parse(e.Result);
Children = children.Elements("topic") 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(); .ToArray();
} catch (TargetInvocationException ex) { } catch (TargetInvocationException ex) {
// Exception when fetching e.Result: // Exception when fetching e.Result:
LoggingService.Warn(ex); LoggingService.Error(ex.ToString());
this.children = defaultChild; this.children = defaultChild;
} }
client.Dispose(); client.Dispose();
@ -58,8 +59,7 @@ namespace MSHelpSystem.Controls
public IEnumerable Children public IEnumerable Children
{ {
get get {
{
if (Help3Service.ActiveCatalog != null) { if (Help3Service.ActiveCatalog != null) {
if (children == null && !client.IsBusy && HelpLibraryAgent.PortIsReady) { if (children == null && !client.IsBusy && HelpLibraryAgent.PortIsReady) {
client.DownloadStringAsync(new Uri(Help3Environment.GetHttpFromMsXHelp(string.Format(url, Help3Service.ActiveCatalog.AsMsXHelpParam, id)))); client.DownloadStringAsync(new Uri(Help3Environment.GetHttpFromMsXHelp(string.Format(url, Help3Service.ActiveCatalog.AsMsXHelpParam, id))));
@ -67,8 +67,7 @@ namespace MSHelpSystem.Controls
} }
return children ?? defaultChild; return children ?? defaultChild;
} }
private set private set {
{
children = value; children = value;
RaisePropertyChanged("Children"); RaisePropertyChanged("Children");
} }

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

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

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

@ -35,7 +35,7 @@ namespace MSHelpSystem.Controls
{ {
string topicId = (string)tocTreeView.SelectedValue; string topicId = (string)tocTreeView.SelectedValue;
if (!string.IsNullOrEmpty(topicId)) { 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); DisplayHelp.Page(topicId);
} }
} }

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

@ -35,8 +35,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) { if (Help3Service.ActiveCatalog == null) {
return false; return false;
} }
string helpCatalogUrl = string.Format(@"ms-xhelp://?method=page&id=-1&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam); string helpCatalogUrl = string.Concat("ms-xhelp://?method=page&id=-1&", Help3Service.ActiveCatalog.AsMsXHelpParam);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpCatalogUrl));
DisplayLocalHelp(helpCatalogUrl); DisplayLocalHelp(helpCatalogUrl);
return true; return true;
} }
@ -56,8 +55,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) { if (Help3Service.ActiveCatalog == null) {
return false; return false;
} }
string helpPageUrl = string.Format(@"ms-xhelp://?method=page&id={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, pageId); string helpPageUrl = string.Concat("ms-xhelp://?method=page&id=", pageId, "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpPageUrl));
DisplayLocalHelp(helpPageUrl); DisplayLocalHelp(helpPageUrl);
return true; return true;
} }
@ -74,8 +72,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) { if (Help3Service.ActiveCatalog == null) {
return false; return false;
} }
string helpContextualUrl = string.Format(@"ms-xhelp://?method=f1&query={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, contextual); string helpContextualUrl = string.Concat("ms-xhelp://?method=f1&query=", contextual, "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpContextualUrl));
DisplayLocalHelp(helpContextualUrl); DisplayLocalHelp(helpContextualUrl);
return true; return true;
} }
@ -92,8 +89,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) { if (Help3Service.ActiveCatalog == null) {
return false; return false;
} }
string helpSearchUrl = string.Format(@"ms-xhelp://?method=search&query={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, searchWords.Replace(" ", "+")); string helpSearchUrl = string.Concat("ms-xhelp://?method=search&query=", searchWords.Replace(" ", "+"), "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpSearchUrl));
DisplayLocalHelp(helpSearchUrl); DisplayLocalHelp(helpSearchUrl);
return true; return true;
} }
@ -113,8 +109,7 @@ namespace MSHelpSystem.Core
if (Help3Service.ActiveCatalog == null) { if (Help3Service.ActiveCatalog == null) {
return false; return false;
} }
string helpKeywordsUrl = string.Format(@"ms-xhelp://?method=keywords&query={1}&{0}", Help3Service.ActiveCatalog.AsMsXHelpParam, keywords.Replace(" ", "+")); string helpKeywordsUrl = string.Concat("ms-xhelp://?method=keywords&query=", keywords.Replace(" ", "+"), "&", Help3Service.ActiveCatalog.AsMsXHelpParam);
LoggingService.Debug(string.Format("Help 3.0: {0}", helpKeywordsUrl));
DisplayLocalHelp(helpKeywordsUrl); DisplayLocalHelp(helpKeywordsUrl);
return true; return true;
} }
@ -135,8 +130,7 @@ namespace MSHelpSystem.Core
HelpLibraryAgent.Start(); HelpLibraryAgent.Start();
Thread.Sleep(0x3e8); Thread.Sleep(0x3e8);
} }
string helpUrl = string.Format(@"{0}{1}{2}", string helpUrl = string.Concat(arguments, ProjectLanguages.CurrentLanguageAsHttpParam, (embedded)?"&embedded=true":string.Empty);
arguments, ProjectLanguages.GetCurrentLanguageAsHttpParam(), (embedded)?"&embedded=true":string.Empty);
if (Help3Service.Config.ExternalHelp) { if (Help3Service.Config.ExternalHelp) {
DisplayHelpWithShellExecute(helpUrl); DisplayHelpWithShellExecute(helpUrl);
@ -144,7 +138,7 @@ namespace MSHelpSystem.Core
} }
BrowserPane browser = ActiveHelp3Browser(); BrowserPane browser = ActiveHelp3Browser();
if (browser != null) { 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.Navigate(Help3Environment.GetHttpFromMsXHelp(helpUrl));
browser.WorkbenchWindow.SelectWindow(); browser.WorkbenchWindow.SelectWindow();
} }
@ -164,7 +158,7 @@ namespace MSHelpSystem.Core
p.WaitForInputIdle(); p.WaitForInputIdle();
} }
catch (Exception ex) { 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
if (string.IsNullOrEmpty(keyword)) { if (string.IsNullOrEmpty(keyword)) {
throw new ArgumentNullException("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) { if (Help3Service.Config.ExternalHelp) {
DisplayHelpWithShellExecute(msdnUrl); DisplayHelpWithShellExecute(msdnUrl);
@ -181,7 +175,7 @@ namespace MSHelpSystem.Core
} }
BrowserPane browser = ActiveHelp3Browser(); BrowserPane browser = ActiveHelp3Browser();
if (browser != null) { 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.Navigate(msdnUrl);
browser.WorkbenchWindow.SelectWindow(); browser.WorkbenchWindow.SelectWindow();
} }
@ -192,10 +186,10 @@ namespace MSHelpSystem.Core
if (string.IsNullOrEmpty(searchWords)) { if (string.IsNullOrEmpty(searchWords)) {
throw new ArgumentNullException("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(); BrowserPane browser = ActiveHelp3Browser();
if (browser != null) { 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.Navigate(msdnUrl);
browser.WorkbenchWindow.SelectWindow(); browser.WorkbenchWindow.SelectWindow();
} }

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

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

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

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

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

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

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

@ -18,21 +18,19 @@ namespace MSHelpSystem.Core
public static bool IsRunning public static bool IsRunning
{ {
get get {
{
Process[] managers = Process.GetProcessesByName("HelpLibManager"); 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; return managers.Length > 0;
} }
} }
public static string Manager public static string Manager
{ {
get get {
{
if (string.IsNullOrEmpty(Help3Environment.AppRoot)) return string.Empty; if (string.IsNullOrEmpty(Help3Environment.AppRoot)) return string.Empty;
string manager = Path.Combine(Help3Environment.AppRoot, "HelpLibManager.exe"); 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; return (File.Exists(manager)) ? manager : string.Empty;
} }
} }
@ -61,7 +59,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):""; 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); 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); HelpLibManagerProcessRunner(arguments);
} }
@ -88,7 +86,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):""; 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); 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); HelpLibManagerProcessRunner(arguments);
} }
@ -114,7 +112,7 @@ namespace MSHelpSystem.Core
string brandingSwitch = (!string.IsNullOrEmpty(brandingPackage)) ? string.Format("/brandingPackage \"{0}\"", brandingPackage):""; 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); 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); HelpLibManagerProcessRunner(arguments);
} }
@ -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); 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); HelpLibManagerProcessRunner(arguments);
} }
@ -166,13 +164,17 @@ namespace MSHelpSystem.Core
return p.ExitCode; return p.ExitCode;
} }
catch (Exception ex) { catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString())); LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
} }
return -1; return -1;
} }
public static bool Start() public static bool Start()
{
return Start(false);
}
public static bool Start(bool runPrivileged)
{ {
if (IsRunning) return true; if (IsRunning) return true;
if (string.IsNullOrEmpty(Manager)) { if (string.IsNullOrEmpty(Manager)) {
@ -186,16 +188,16 @@ namespace MSHelpSystem.Core
psi.WorkingDirectory = Help3Environment.AppRoot; psi.WorkingDirectory = Help3Environment.AppRoot;
psi.Arguments = Help3Service.ActiveCatalog.AsCmdLineParam; psi.Arguments = Help3Service.ActiveCatalog.AsCmdLineParam;
psi.UseShellExecute = true; psi.UseShellExecute = true;
psi.Verb = "runas"; if (runPrivileged) psi.Verb = "runas";
psi.WindowStyle = ProcessWindowStyle.Normal; psi.WindowStyle = ProcessWindowStyle.Normal;
try { try {
Process p = Process.Start(psi); Process p = Process.Start(psi);
p.WaitForInputIdle(); p.WaitForInputIdle();
LoggingService.Info("Help 3.0: Help library manager started"); LoggingService.Info("HelpViewer: HelpLibraryManager started");
return IsRunning; return IsRunning;
} }
catch (Exception ex) { catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString())); LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
} }
return false; return false;
} }
@ -214,10 +216,10 @@ namespace MSHelpSystem.Core
manager.Kill(); manager.Kill();
if (waitForExit) manager.WaitForExit(); 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) { catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString())); LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
} }
return true; return true;
} }

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

@ -49,22 +49,22 @@ namespace MSHelpSystem
void Help3OfflineModeClicked(object sender, RoutedEventArgs e) void Help3OfflineModeClicked(object sender, RoutedEventArgs e)
{ {
LoggingService.Info("Help 3.0: Setting help mode to \"offline\"");
Help3Service.Config.OfflineMode = true; Help3Service.Config.OfflineMode = true;
help3Catalogs.IsEnabled = (help3Catalogs.Items.Count > 1 && Help3Service.Config.OfflineMode); help3Catalogs.IsEnabled = (help3Catalogs.Items.Count > 1 && Help3Service.Config.OfflineMode);
LoggingService.Info("HelpViewer: Help mode set to \"offline\"");
} }
void Help3OnlineModeClicked(object sender, RoutedEventArgs e) void Help3OnlineModeClicked(object sender, RoutedEventArgs e)
{ {
LoggingService.Info("Help 3.0: Setting help mode to \"online\"");
Help3Service.Config.OfflineMode = false; Help3Service.Config.OfflineMode = false;
help3Catalogs.IsEnabled = false; help3Catalogs.IsEnabled = false;
LoggingService.Info("HelpViewer: Help mode set to \"online\"");
} }
void Help3UseExternalHelpClicked(object sender, RoutedEventArgs e) void Help3UseExternalHelpClicked(object sender, RoutedEventArgs e)
{ {
Help3Service.Config.ExternalHelp = (bool)externalHelp.IsChecked; 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() public override bool SaveOptions()

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

@ -97,7 +97,7 @@ namespace MSHelpSystem.Helper
} }
} }
catch (Exception ex) { catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString())); LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
} }
return "offline"; return "offline";
} }
@ -105,7 +105,7 @@ namespace MSHelpSystem.Helper
static void SetHelpMode() static void SetHelpMode()
{ {
clientFileChanged.EnableRaisingEvents = false; 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; Configuration config = null;
try { try {
@ -136,7 +136,7 @@ namespace MSHelpSystem.Helper
} }
} }
catch (Exception ex) { catch (Exception ex) {
LoggingService.Error(string.Format("Help 3.0: {0}", ex.ToString())); LoggingService.Error(string.Format("HelpViewer: {0}", ex.ToString()));
} }
clientFileChanged.EnableRaisingEvents = true; clientFileChanged.EnableRaisingEvents = true;
} }

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

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

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

@ -15,7 +15,7 @@ namespace MSHelpSystem
if (string.IsNullOrEmpty(fullTypeName)) { if (string.IsNullOrEmpty(fullTypeName)) {
throw new ArgumentNullException("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); return DisplayHelp.ContextualHelp(fullTypeName);
} }
@ -24,7 +24,7 @@ namespace MSHelpSystem
if (string.IsNullOrEmpty(keyword)) { if (string.IsNullOrEmpty(keyword)) {
throw new ArgumentNullException("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); DisplayHelp.Keywords(keyword);
return true; return true;
} }

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

@ -8,14 +8,14 @@ namespace ICSharpCode.PackageManagement
{ {
public static class IPackageRepositoryExtensions 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);
} }
} }
} }

BIN
src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll

Binary file not shown.

BIN
src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll

Binary file not shown.

BIN
src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll

Binary file not shown.

BIN
src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe

Binary file not shown.

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs

@ -16,7 +16,7 @@ namespace PackageManagement.Tests.Helpers
IDisposable Operation = MockRepository.GenerateStub<IDisposable>(); IDisposable Operation = MockRepository.GenerateStub<IDisposable>();
public IDisposable StartOperation(string operationName, string mainPackageId) public IDisposable StartOperation(string operationName, string mainPackageId, string mainPackageVersion)
{ {
OperationStarted = operationName; OperationStarted = operationName;
MainPackageIdForOperationStarted = mainPackageId; MainPackageIdForOperationStarted = mainPackageId;

5
src/AddIns/VersionControl/SubversionAddIn/Src/Commands/AutostartCommands.cs

@ -232,6 +232,7 @@ namespace ICSharpCode.Svn.Commands
using (SvnClientWrapper client = new SvnClientWrapper()) { using (SvnClientWrapper client = new SvnClientWrapper()) {
SvnMessageView.HandleNotifications(client); SvnMessageView.HandleNotifications(client);
try {
Status status = client.SingleStatus(fullName); Status status = client.SingleStatus(fullName);
switch (status.TextStatus) { switch (status.TextStatus) {
case StatusKind.None: case StatusKind.None:
@ -275,6 +276,10 @@ namespace ICSharpCode.Svn.Commands
} }
break; break;
} }
} catch (SvnClientException ex3) {
e.Cancel = true;
MessageService.ShowError(ex3.Message);
}
} }
return; return;
} }

2
src/Libraries/SharpSvn/Licenses/Putty-License.txt

@ -1,4 +1,4 @@
PuTTY is copyright 1997-2011 Simon Tatham. PuTTY is copyright 1997-2013 Simon Tatham.
Portions copyright Robert de Bath, Joris van Rantwijk, Delian Portions copyright Robert de Bath, Joris van Rantwijk, Delian
Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry, Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,

2
src/Libraries/SharpSvn/Licenses/SharpSvn-License.txt

@ -1,4 +1,4 @@
Copyright (c) 2007-2010 The SharpSvn Project Copyright (c) 2007-2012 The SharpSvn Project
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

8
src/Libraries/SharpSvn/Licenses/Subversion-License.txt

@ -260,3 +260,11 @@ subversion/bindings/swig/python/tests/trac/:
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
For the file subversion/libsvn_subr/utf_width.c
* Markus Kuhn -- 2007-05-26 (Unicode 5.0)
*
* Permission to use, copy, modify, and distribute this software
* for any purpose and without fee is hereby granted. The author
* disclaims all warranties with regard to this software.

24
src/Libraries/SharpSvn/Licenses/ZLib-License.txt

@ -1,22 +1,22 @@
ZLIB DATA COMPRESSION LIBRARY ZLIB DATA COMPRESSION LIBRARY
zlib 1.2.5 is a general purpose data compression library. All the code is zlib 1.2.8 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files (Request for Comments) 1950 to 1952 in the files
http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
and rfc1952.txt (gzip format). rfc1952 (gzip format).
All functions of the compression library are documented in the file zlib.h All functions of the compression library are documented in the file zlib.h
(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example (volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
of the library is given in the file example.c which also tests that the library of the library is given in the file test/example.c which also tests that
is working correctly. Another example is given in the file minigzip.c. The the library is working correctly. Another example is given in the file
compression library itself is composed of all source files except example.c and test/minigzip.c. The compression library itself is composed of all source
minigzip.c. files in the root directory.
To compile all files and run the test program, follow the instructions given at To compile all files and run the test program, follow the instructions given at
the top of Makefile.in. In short "./configure; make test", and if that goes the top of Makefile.in. In short "./configure; make test", and if that goes
well, "make install" should work for most flavors of Unix. For Windows, use one well, "make install" should work for most flavors of Unix. For Windows, use
of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
make_vms.com. make_vms.com.
Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
@ -31,7 +31,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ . http://marknelson.us/1997/01/01/zlib-engine/ .
The changes made in version 1.2.5 are documented in the file ChangeLog. The changes made in version 1.2.8 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ . Unsupported third party contributions are provided in directory contrib/ .
@ -44,7 +44,7 @@ http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
available in Python 1.5 and later versions, see available in Python 1.5 and later versions, see
http://www.python.org/doc/lib/module-zlib.html . http://docs.python.org/library/zlib.html .
zlib is built into tcl: http://wiki.tcl.tk/4610 . zlib is built into tcl: http://wiki.tcl.tk/4610 .
@ -84,7 +84,7 @@ Acknowledgments:
Copyright notice: Copyright notice:
(C) 1995-2010 Jean-loup Gailly and Mark Adler (C) 1995-2013 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages

BIN
src/Libraries/SharpSvn/SharpPlink-Win32.svnExe

Binary file not shown.

BIN
src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.dll → src/Libraries/SharpSvn/SharpSvn-DB44-20-win32.svnDll

Binary file not shown.

BIN
src/Libraries/SharpSvn/SharpSvn-Sasl21-23-win32.dll

Binary file not shown.

BIN
src/Libraries/SharpSvn/SharpSvn.UI.dll

Binary file not shown.

15
src/Libraries/SharpSvn/SharpSvn.UI.xml

@ -310,6 +310,21 @@
resource lookups using this strongly typed resource class. resource lookups using this strongly typed resource class.
</summary> </summary>
</member> </member>
<member name="P:SharpSvn.UI.Properties.Resources.AuthenticationBanner">
<summary>
Looks up a localized resource of type System.Drawing.Bitmap.
</summary>
</member>
<member name="P:SharpSvn.UI.Properties.Resources.Error">
<summary>
Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
</summary>
</member>
<member name="P:SharpSvn.UI.Properties.Resources.Ok">
<summary>
Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
</summary>
</member>
<member name="T:SharpSvn.UI.SharpSvnUI"> <member name="T:SharpSvn.UI.SharpSvnUI">
<summary> <summary>
Helper methods to bind a user interface to an <see cref="T:SharpSvn.SvnClient"/> Helper methods to bind a user interface to an <see cref="T:SharpSvn.SvnClient"/>

BIN
src/Libraries/SharpSvn/SharpSvn.dll

Binary file not shown.

12
src/Libraries/SharpSvn/SharpSvn.wxs

@ -1,14 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.microsoft.com/wix/2006/wi tools/wix.xsd"> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.microsoft.com/wix/2006/wi tools/wix.xsd">
<!-- $Id: SharpSvn.wxs 1296 2009-06-21 12:07:55Z rhuijben $ --> <!-- $Id: SharpSvn.wxs 2199 2012-07-25 21:43:23Z rhuijben $ -->
<Fragment> <Fragment>
<!-- When referenced installs a Win32 SharpSvn into the directory DIR_SharpSvn --> <!-- When referenced installs a Win32 SharpSvn into the directory DIR_SharpSvn -->
<ComponentGroup Id="LOCAL_SharpSvn_Win32"> <ComponentGroup Id="LOCAL_SharpSvn_Win32">
<ComponentRef Id="C_LOCAL_SharpSvn.dll" /> <ComponentRef Id="C_LOCAL_SharpSvn.dll" />
<ComponentRef Id="C_LOCAL_SharpSvn_Sasl21_23_win32.dll" />
<ComponentRef Id="C_LOCAL_SharpPlink_Win32.svnExe" /> <ComponentRef Id="C_LOCAL_SharpPlink_Win32.svnExe" />
<?ifndef SharpSvn_NoDB?> <?ifndef SharpSvn_NoDB?>
<ComponentRef Id="C_LOCAL_SharpSvn_DB44_20_win32.dll" /> <ComponentRef Id="C_LOCAL_SharpSvn_DB44_20_win32.svnDll" />
<?endif?> <?endif?>
<?ifdef SharpSvn_Pdb?> <?ifdef SharpSvn_Pdb?>
<ComponentRef Id="C_LOCAL_SharpSvn.pdb" /> <ComponentRef Id="C_LOCAL_SharpSvn.pdb" />
@ -50,9 +49,6 @@
<Component Id="C_LOCAL_SharpSvn.dll" Guid="32EB117A-B450-4137-B453-072D03DAECB1"> <Component Id="C_LOCAL_SharpSvn.dll" Guid="32EB117A-B450-4137-B453-072D03DAECB1">
<File Id="CF_LOCAL_SharpSvn.dll" Name="SharpSvn.dll" Vital="yes" KeyPath="yes" Checksum="yes" /> <File Id="CF_LOCAL_SharpSvn.dll" Name="SharpSvn.dll" Vital="yes" KeyPath="yes" Checksum="yes" />
</Component> </Component>
<Component Id="C_LOCAL_SharpSvn_Sasl21_23_win32.dll" Guid="CE42CB05-C393-4876-8F1A-10711D68ACF1">
<File Id="CF_LOCAL_SharpSvn_Sasl21_23_win32.dll" Name="SharpSvn-Sasl21-23-win32.dll" Vital="yes" KeyPath="yes" Checksum="yes" />
</Component>
<Component Id="C_LOCAL_SharpPlink_Win32.svnExe" Guid="34F616E9-637E-44F0-9416-F79325560FDE"> <Component Id="C_LOCAL_SharpPlink_Win32.svnExe" Guid="34F616E9-637E-44F0-9416-F79325560FDE">
<File Id="CF_LOCAL_SharpPlink_Win32.svnExe" Name="SharpPlink-Win32.svnExe" Vital="yes" KeyPath="yes" Checksum="yes" /> <File Id="CF_LOCAL_SharpPlink_Win32.svnExe" Name="SharpPlink-Win32.svnExe" Vital="yes" KeyPath="yes" Checksum="yes" />
</Component> </Component>
@ -61,8 +57,8 @@
<Fragment> <Fragment>
<!-- BDB is optional (BDB repository format support is disabled if not available) --> <!-- BDB is optional (BDB repository format support is disabled if not available) -->
<DirectoryRef Id="DIR_SharpSvn" FileSource="$(sys.SOURCEFILEDIR)"> <DirectoryRef Id="DIR_SharpSvn" FileSource="$(sys.SOURCEFILEDIR)">
<Component Id="C_LOCAL_SharpSvn_DB44_20_win32.dll" Guid="29EEA692-708D-499B-8543-E4B43D1293AE"> <Component Id="C_LOCAL_SharpSvn_DB44_20_win32.svnDll" Guid="17EC4369-1FBD-4345-A865-AB08B99D33FF">
<File Id="CF_LOCAL_SharpSvn_DB44_20_win32.dll" Name="SharpSvn-DB44-20-win32.dll" Vital="yes" KeyPath="yes" Checksum="yes" /> <File Id="CF_LOCAL_SharpSvn_DB44_20_win32.svnDll" Name="SharpSvn-DB44-20-win32.svnDll" Vital="yes" KeyPath="yes" Checksum="yes" />
</Component> </Component>
</DirectoryRef> </DirectoryRef>
</Fragment> </Fragment>

4923
src/Libraries/SharpSvn/SharpSvn.xml

File diff suppressed because it is too large Load Diff

6
src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs

@ -96,11 +96,11 @@ namespace ICSharpCode.Core
} }
if (reference.Name == "SharpDevelop") { if (reference.Name == "SharpDevelop") {
// HACK: SD 4.1/4.2 AddIns work with SharpDevelop 4.3 // HACK: SD 4.1/4.2/4.3 AddIns work with SharpDevelop 4.4
// Because some 4.1 AddIns restrict themselves to SD 4.1, we extend the // Because some 4.1 AddIns restrict themselves to SD 4.1, we extend the
// supported SD range. // supported SD range.
if (reference.maximumVersion == new Version("4.1") || reference.maximumVersion == new Version("4.2")) { if (reference.maximumVersion == new Version("4.1") || reference.maximumVersion == new Version("4.2") || reference.maximumVersion == new Version("4.3")) {
reference.maximumVersion = new Version("4.3"); reference.maximumVersion = new Version("4.4");
} }
} }
} }

2
src/Setup/Chocolatey/Tools/chocolateyInstall.ps1

@ -3,7 +3,7 @@
$packageName = 'sharpdevelop' $packageName = 'sharpdevelop'
$installerType = 'msi' $installerType = 'msi'
$url = 'http://downloads.sourceforge.net/sharpdevelop/SharpDevelop_4.3.1.9430_Setup.msi?download' $url = 'http://downloads.sourceforge.net/sharpdevelop/SharpDevelop_4.3.3.9663_Setup.msi?download'
$silentArgs = '/q' $silentArgs = '/q'
$validExitCodes = @(0) $validExitCodes = @(0)

4
src/Setup/Chocolatey/sharpdevelop.nuspec

@ -4,14 +4,14 @@
<metadata> <metadata>
<id>sharpdevelop</id> <id>sharpdevelop</id>
<title>SharpDevelop</title> <title>SharpDevelop</title>
<version>4.3.1</version> <version>4.3.3</version>
<authors>IC#Code Team</authors> <authors>IC#Code Team</authors>
<owners>SharpDevelop Team</owners> <owners>SharpDevelop Team</owners>
<summary>sharpdevelop</summary> <summary>sharpdevelop</summary>
<description>#develop (short for SharpDevelop) is a free IDE for C#, VB.NET, F#, IronPython and IronRuby projects on Microsoft's .NET platform. It has designers for WPF, Windows Forms and Entity Framework, and also supports ASP.NET MVC.</description> <description>#develop (short for SharpDevelop) is a free IDE for C#, VB.NET, F#, IronPython and IronRuby projects on Microsoft's .NET platform. It has designers for WPF, Windows Forms and Entity Framework, and also supports ASP.NET MVC.</description>
<projectUrl>http://www.icsharpcode.net/opensource/sd/</projectUrl> <projectUrl>http://www.icsharpcode.net/opensource/sd/</projectUrl>
<tags>sharpdevelop ide .net developer web windows debugging editor tool productivity</tags> <tags>sharpdevelop ide .net developer web windows debugging editor tool productivity</tags>
<copyright>Copyright ©2001-2012 IC#Code.</copyright> <copyright>Copyright ©2001-2013 IC#Code.</copyright>
<licenseUrl>http://www.icsharpcode.net/OpenSource/SD/</licenseUrl> <licenseUrl>http://www.icsharpcode.net/OpenSource/SD/</licenseUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<!--<iconUrl>https://github.com/Your Repository/raw/master/sharpdevelop/sharpdevelop.gif</iconUrl>--> <!--<iconUrl>https://github.com/Your Repository/raw/master/sharpdevelop/sharpdevelop.gif</iconUrl>-->

5
src/Setup/Files.wxs

@ -321,6 +321,9 @@
<File Source="..\..\doc\readme.rtf" Name="readme.rtf" Id="readme.rtf" /> <File Source="..\..\doc\readme.rtf" Name="readme.rtf" Id="readme.rtf" />
<File Source="..\..\doc\SharpDevelopInfoResources.txt" Id="SharpDevelopInfoResources.txt" Name="SharpDevelopInfoResources.txt" /> <File Source="..\..\doc\SharpDevelopInfoResources.txt" Id="SharpDevelopInfoResources.txt" Name="SharpDevelopInfoResources.txt" />
</Component> </Component>
<Component Id="DependenciesHtml" Guid="898AC4F4-9331-4C3C-A170-ECB09B890EDD" DiskId="1">
<File Id="Dependencies.html" Name="Dependencies.html" Source="..\..\doc\Dependencies.html" KeyPath="yes" />
</Component>
</Directory> </Directory>
<Directory Id="DataFolder" Name="data"> <Directory Id="DataFolder" Name="data">
<Directory Id="ConversionStyleSheetsFolder" Name="ConversionStyleSheets"> <Directory Id="ConversionStyleSheetsFolder" Name="ConversionStyleSheets">
@ -1576,8 +1579,6 @@
<File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpSvn.dll" Name="SharpSvn.dll" Id="SharpSvn.dll" /> <File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpSvn.dll" Name="SharpSvn.dll" Id="SharpSvn.dll" />
<File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpSvn.UI.dll" Name="SharpSvn.UI.dll" Id="SharpSvn.UI.dll" /> <File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpSvn.UI.dll" Name="SharpSvn.UI.dll" Id="SharpSvn.UI.dll" />
<File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpPlink-Win32.svnExe" Name="SharpPlink-Win32.svnExe" Id="SharpPlink_Win32.svnExe" /> <File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpPlink-Win32.svnExe" Name="SharpPlink-Win32.svnExe" Id="SharpPlink_Win32.svnExe" />
<File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpSvn-DB44-20-Win32.dll" Name="SharpSvn-DB44-20-Win32.dll" Id="SharpSvn_DB44_20_Win32.dll" />
<File Source="..\..\AddIns\VersionControl\SubversionAddin\SharpSvn-SASL21-23-Win32.dll" Name="SharpSvn-SASL21-23-Win32.dll" Id="SharpSvn_SASL21_23_Win32.dll" />
</Component> </Component>
</Directory> </Directory>
<Component Id="GitAddInDll" Guid="4AB2E967-7267-42F7-AED1-AB64809F0BC1" DiskId="1"> <Component Id="GitAddInDll" Guid="4AB2E967-7267-42F7-AED1-AB64809F0BC1" DiskId="1">

20
src/Setup/Setup.wxs

@ -176,6 +176,7 @@
<ComponentRef Id="SharpDevelopExe"/> <ComponentRef Id="SharpDevelopExe"/>
<ComponentRef Id="SharpDevelopExeFiles"/> <ComponentRef Id="SharpDevelopExeFiles"/>
<ComponentRef Id="SharpDevelopDocFiles"/> <ComponentRef Id="SharpDevelopDocFiles"/>
<ComponentRef Id="DependenciesHtml"/>
<ComponentRef Id="ICSharpCodeBuildTasksDll"/> <ComponentRef Id="ICSharpCodeBuildTasksDll"/>
<ComponentRef Id="BuildTasksTargetFiles"/> <ComponentRef Id="BuildTasksTargetFiles"/>
<ComponentRef Id="ICSharpCodeCoreDll"/> <ComponentRef Id="ICSharpCodeCoreDll"/>
@ -656,7 +657,24 @@
<!-- Using WixUI --> <!-- Using WixUI -->
<Property Id="WIXUI_INSTALLDIR">INSTALLDIR</Property> <Property Id="WIXUI_INSTALLDIR">INSTALLDIR</Property>
<UIRef Id="WixUI_FeatureTree"/> <UI>
<UIRef Id="WixUI_FeatureTree" />
<Publish
Dialog="ExitDialog"
Control="Finish"
Event="DoAction"
Value="ShowReadme">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Learn about dependencies you should install" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/>
<Property Id="WixShellExecTarget" Value="[#Dependencies.html]" />
<CustomAction
Id="ShowReadme"
BinaryKey="WixCA"
DllEntry="WixShellExec"
Impersonate="yes" />
<!-- <!--
If a newer version of SharpDevelop is installed, show an error message. If a newer version of SharpDevelop is installed, show an error message.

1
src/Setup/SharpDevelop.Setup.wixproj

@ -32,6 +32,7 @@
<ItemGroup> <ItemGroup>
<WixExtension Include="$(WixToolPath)\WixUIExtension.dll" /> <WixExtension Include="$(WixToolPath)\WixUIExtension.dll" />
<WixExtension Include="$(WixToolPath)\WixNetFxExtension.dll" /> <WixExtension Include="$(WixToolPath)\WixNetFxExtension.dll" />
<WixExtension Include="$(WixToolPath)\WixUtilExtension.dll" />
</ItemGroup> </ItemGroup>
<Import Project="$(WixTargetsPath)" Condition="Exists('$(WixTargetsPath)')" /> <Import Project="$(WixTargetsPath)" Condition="Exists('$(WixTargetsPath)')" />
</Project> </Project>

BIN
src/Tools/NUnit/lib/nunit-console-runner.dll

Binary file not shown.

BIN
src/Tools/NUnit/lib/nunit.core.dll

Binary file not shown.

BIN
src/Tools/NUnit/lib/nunit.core.interfaces.dll

Binary file not shown.

BIN
src/Tools/NUnit/lib/nunit.util.dll

Binary file not shown.

4
src/Tools/NUnit/license.txt

@ -1,4 +1,4 @@
Copyright © 2002-2012 Charlie Poole Copyright © 2002-2013 Charlie Poole
Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov
Copyright © 2000-2002 Philip A. Craig Copyright © 2000-2002 Philip A. Craig
@ -8,7 +8,7 @@ Permission is granted to anyone to use this software for any purpose, including
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required.
Portions Copyright © 2002-2012 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig Portions Copyright © 2002-2013 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.

BIN
src/Tools/NUnit/nunit-console-dotnet2-x86.exe

Binary file not shown.

BIN
src/Tools/NUnit/nunit-console-dotnet2.exe

Binary file not shown.

BIN
src/Tools/NUnit/nunit-console-x86.exe

Binary file not shown.

BIN
src/Tools/NUnit/nunit-console.exe

Binary file not shown.

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

Loading…
Cancel
Save