diff --git a/README.txt b/README.txt index fd7f3bb78f..fb3a105414 100644 --- a/README.txt +++ b/README.txt @@ -30,7 +30,8 @@ Extended Requirements (building SharpDevelop) - Windows SDK 7.1 (?? not sure if this still is necessary...) - Windows SDK 7.0 (optional; C++ compiler needed for profiler) - Windows PowerShell - + - if you have cloned the SD git repository: git must be available on your PATH + Libraries and integrated tools: AvalonDock: New BSD License (BSD) (thanks to Adolfo Marinucci) GraphSharp @@ -70,4 +71,4 @@ SharpDevelop Contributors: Siegfried Pammer Peter Forstmeier (SharpDevelop Reports) - (for a full list see https://github.com/icsharpcode/SharpDevelop/wiki/Contributors) \ No newline at end of file + (for a full list see https://github.com/icsharpcode/SharpDevelop/wiki/Contributors) diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanel.xaml.cs b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanel.xaml.cs index bd2a6bcc0f..5f891d6b18 100644 --- a/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanel.xaml.cs +++ b/src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanel.xaml.cs @@ -36,12 +36,12 @@ namespace ICSharpCode.CodeAnalysis } public ProjectProperty CodeAnalysisRuleAssemblies { - get { return GetProperty("CodeAnalysisRuleAssemblies","",TextBoxEditMode.EditEvaluatedProperty); } + get { return GetProperty("CodeAnalysisRuleAssemblies", "", TextBoxEditMode.EditEvaluatedProperty); } } public ProjectProperty CodeAnalysisRules { - get { return GetProperty("CodeAnalysisRules","",TextBoxEditMode.EditEvaluatedProperty); } + get { return GetProperty("CodeAnalysisRules", "", TextBoxEditMode.EditRawProperty); } } #region Rule Assemblies Property diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd index c7dc7234d8..2f7076e5c4 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd @@ -1,105 +1,135 @@ - - - - - - - + - - - - ()[]{}@,:.`=;+-*/% &|^>< - - - """ - """ - - - - ''' - ''' - + + + + + + + + + + + + + + + + + + + + - - # - - - - " - " - - - - ' - ' - - - ( + - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + """ + """ + + + + ''' + ''' + + + + \# + + + + " + " + + + + + + + + ' + ' + + + + + + + + assert + del + exec + global + lambda + print + + + + class + + + + except + finally + raise + try + + + + def + + + + import + from + + + + for + in + while + + + + break + continue + yield + return + + + + and + as + is + not + or + + + + pass + + + + elif + else + if + + + + with + + + + None + + + \b[\d\w_]+(?=(\s*\()) + \b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)? + + + [?,.;()\[\]{}+\-/%*<>^+~!|&]+ + + diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Resources/Ruby.xshd b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Resources/Ruby.xshd index 9f3b282a16..f9b1cc75dd 100644 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Resources/Ruby.xshd +++ b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Resources/Ruby.xshd @@ -1,174 +1,202 @@ - + - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - ()[]{}@,:.`=;+-*/%~ &|^>< - - - ' - ' - - - - """ - """ - - - - =begin - =end - - - - # - - - - " - " - - - ( + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + ' + ' + + + + + + + + """ + """ + + + + =begin + =end + + + + \# + + + + " + " + + + + + + + + abort + Array + at_exit + autoload + binding + callcc + caller + chomp + chop + eval + exec + exit + fail + Float + fork + format + gets + global_variables + gsub + Integer + lambda + proc + load + local_variables + loop + open + p + print + print + printf + putc + puts + rand + readline + scan + select + set_trace_func + sleep + split + sprintf + srand + String + syscall + system + sub + test + throw + trace_var + trap + untrace_var + + + + class + module + public + protected + private + + + + begin + rescue + ensure + raise + catch + + + + def + end + undef + + + + require + alias + + + + for + do + in + while + until + + + + break + yield + redo + return + retry + next + + + + and + not + or + + + + nil + + + + elsif + else + if + then + case + unless + + + + true + false + + + + defined + + + + self + + + + super + + + \b[\d\w_]+(?=(\s*\()) + \b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)? + + + [?,.;()\[\]{}+\-/%*<>^+~!|&]+ + + diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj index 6934cb8827..d2c30e8591 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj @@ -78,6 +78,7 @@ + ClassCanvas.Designer.cs diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs index bdd450f963..e02d34ce4e 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs @@ -625,7 +625,7 @@ namespace ClassDiagram { base.LoadFromXml(navigator); - Collapsed = bool.Parse(navigator.GetAttribute("Collapsed", "")); + Collapsed = navigator.GetBooleanAttribute("Collapsed"); XPathNodeIterator compNI = navigator.Select("Compartments/Compartment"); while (compNI.MoveNext()) @@ -634,7 +634,7 @@ namespace ClassDiagram InteractiveHeaderedItem grp; if (groupsByName.TryGetValue(compNav.GetAttribute("Name", ""), out grp)) { - grp.Collapsed = bool.Parse(compNav.GetAttribute("Collapsed", "")); + grp.Collapsed = compNav.GetBooleanAttribute("Collapsed"); } } } diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/XPathNavigatorExtensions.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/XPathNavigatorExtensions.cs new file mode 100644 index 0000000000..44ff473669 --- /dev/null +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/XPathNavigatorExtensions.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.Xml.XPath; + +namespace ClassDiagram +{ + public static class XPathNavigatorExtensions + { + public static bool GetBooleanAttribute(this XPathNavigator navigator, string name, string namespaceUri = "") + { + string attributeValue = navigator.GetAttribute(name, namespaceUri); + bool result = false; + if (bool.TryParse(attributeValue, out result)) { + return true; + } + return false; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 7dc8c26465..f00dfc4d90 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -149,6 +149,7 @@ + @@ -220,6 +221,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs index 11272f1338..7a144063b5 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs @@ -21,7 +21,7 @@ namespace ICSharpCode.PackageManagement : base(registeredPackageRepositories, packageViewModelFactory, taskFactory) { IsSearchable = true; - ShowPackageSources = registeredPackageRepositories.HasMultiplePackageSources; + ShowPackageSources = true; } protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs index 4f95dbb025..25ca9d0005 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs @@ -70,9 +70,11 @@ namespace ICSharpCode.PackageManagement.Design PackageSources.AddRange(sources); } - public FakePackage AddFakePackageWithVersionToAggregrateRepository(string version) + public FakePackage AddFakePackageWithVersionToActiveRepository(string version) { - return AddFakePackageWithVersionToAggregrateRepository("Test", version); + var package = FakePackage.CreatePackageWithVersion("Test", version); + FakeActiveRepository.FakePackages.Add(package); + return package; } public FakePackage AddFakePackageWithVersionToAggregrateRepository(string id, string version) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs new file mode 100644 index 0000000000..5ddc014a53 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.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 NuGet; + +namespace ICSharpCode.PackageManagement +{ + public static class IPackageExtensions + { + /// + /// Returns description if summary is missing. + /// + public static string SummaryOrDescription(this IPackage package) + { + if (String.IsNullOrEmpty(package.Summary)) + return package.Description; + return package.Summary; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceViewModel.cs index 04d91af7bc..cc368db0f3 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceViewModel.cs @@ -10,14 +10,16 @@ namespace ICSharpCode.PackageManagement { public class LicenseAcceptanceViewModel : ViewModelBase { - IList packages; + IList packages; public LicenseAcceptanceViewModel(IEnumerable packages) { - this.packages = packages.ToList(); + this.packages = packages + .Select(p => new PackageLicenseViewModel(p)) + .ToList(); } - public IEnumerable Packages { + public IEnumerable Packages { get { return packages; } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs index 7936717173..d92cd16fee 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs @@ -169,5 +169,10 @@ namespace ICSharpCode.PackageManagement { return package.GetSupportedFrameworks(); } + + public override string ToString() + { + return package.ToString(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageLicenseViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageLicenseViewModel.cs new file mode 100644 index 0000000000..e077304a18 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageLicenseViewModel.cs @@ -0,0 +1,30 @@ +// 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 NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class PackageLicenseViewModel : ViewModelBase + { + IPackage package; + + public PackageLicenseViewModel(IPackage package) + { + this.package = package; + } + + public string Id { + get { return package.Id; } + } + + public string Summary { + get { return package.SummaryOrDescription(); } + } + + public Uri LicenseUrl { + get { return package.LicenseUrl; } + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs index be95abfacb..aa05822a7e 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs @@ -69,13 +69,13 @@ namespace ICSharpCode.PackageManagement public IPackageRepository CreateAggregateRepository() { - IEnumerable allRepositories = CreateAllRepositories(); + IEnumerable allRepositories = CreateAllEnabledRepositories(); return CreateAggregateRepository(allRepositories); } - IEnumerable CreateAllRepositories() + IEnumerable CreateAllEnabledRepositories() { - foreach (PackageSource source in registeredPackageSources) { + foreach (PackageSource source in registeredPackageSources.GetEnabledPackageSources()) { yield return CreateRepository(source.Source); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index 0b86281138..5a3fdb1b90 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -130,7 +130,7 @@ namespace ICSharpCode.PackageManagement } public string Summary { - get { return package.Summary; } + get { return package.SummaryOrDescription(); } } public SemanticVersion Version { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml index a7429e0b2a..05694252a6 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml @@ -310,7 +310,7 @@ + Visibility="{Binding Path=ShowPackageSources, Converter={StaticResource BoolToVisibility}}"> @@ -330,6 +330,7 @@ + Margin="4" + Visibility="{Binding Path=IsSearchable, Converter={StaticResource BoolToVisibility}}"> diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs index 511a4587d2..01246df9c9 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs @@ -345,7 +345,7 @@ namespace ICSharpCode.PackageManagement foreach (PackageSource packageSource in registeredPackageRepositories.PackageSources.GetEnabledPackageSources()) { yield return packageSource; } - if (registeredPackageRepositories.PackageSources.HasMultiplePackageSources) { + if (registeredPackageRepositories.PackageSources.HasMultipleEnabledPackageSources) { yield return RegisteredPackageSourceSettings.AggregatePackageSource; } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs index cb827da187..943e8808b9 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs @@ -41,11 +41,16 @@ namespace ICSharpCode.PackageManagement IEnumerable GetRegisteredPackageRepositories() { - foreach (PackageSource packageSource in registeredPackageSources.PackageSources) { + foreach (PackageSource packageSource in GetEnabledPackageSources()) { yield return CreateRepository(packageSource.Source); } } + public IEnumerable GetEnabledPackageSources() + { + return registeredPackageSources.PackageSources.GetEnabledPackageSources(); + } + public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem) { throw new NotImplementedException(); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs index 0add26e9fd..0637ef34e9 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs @@ -43,7 +43,7 @@ namespace ICSharpCode.PackageManagement } public bool HasMultiplePackageSources { - get { return registeredPackageSources.HasMultiplePackageSources; } + get { return registeredPackageSources.HasMultipleEnabledPackageSources; } } public PackageSource ActivePackageSource { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs index 4596ccea84..dabec52ea3 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs @@ -48,8 +48,8 @@ namespace ICSharpCode.PackageManagement get { return Count == 0; } } - public bool HasMultiplePackageSources { - get { return Count > 1; } + public bool HasMultipleEnabledPackageSources { + get { return GetEnabledPackageSources().Count() > 1; } } public IEnumerable GetEnabledPackageSources() diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs index 0d605f85d1..0b9cc60bf2 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs @@ -170,7 +170,7 @@ namespace ICSharpCode.PackageManagement } public bool CanRemovePackageSource { - get { return selectedPackageSourceViewModel != null; } + get { return IsPackageSourceSelected(); } } void RemoveSelectedPackageSourceViewModel() @@ -192,10 +192,17 @@ namespace ICSharpCode.PackageManagement public bool CanMovePackageSourceUp { get { - return HasAtLeastTwoPackageSources() && !IsFirstPackageSourceSelected(); + return HasAtLeastTwoPackageSources() && + IsPackageSourceSelected() && + !IsFirstPackageSourceSelected(); } } + bool IsPackageSourceSelected() + { + return selectedPackageSourceViewModel != null; + } + bool IsFirstPackageSourceSelected() { return selectedPackageSourceViewModel == packageSourceViewModels[0]; @@ -210,7 +217,9 @@ namespace ICSharpCode.PackageManagement public bool CanMovePackageSourceDown { get { - return HasAtLeastTwoPackageSources() && !IsLastPackageSourceSelected(); + return HasAtLeastTwoPackageSources() && + IsPackageSourceSelected() && + !IsLastPackageSourceSelected(); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs index 408a605894..feaa614be4 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs @@ -18,7 +18,7 @@ namespace ICSharpCode.PackageManagement public UpdatedPackagesViewModel( IPackageManagementSolution solution, IRegisteredPackageRepositories registeredPackageRepositories, - UpdatedPackageViewModelFactory packageViewModelFactory, + UpdatedPackageViewModelFactory packageViewModelFactory, ITaskFactory taskFactory) : base( registeredPackageRepositories, @@ -26,14 +26,15 @@ namespace ICSharpCode.PackageManagement taskFactory) { this.selectedProjects = new PackageManagementSelectedProjects(solution); + ShowPackageSources = true; } protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() { try { - IPackageRepository aggregateRepository = RegisteredPackageRepositories.CreateAggregateRepository(); - IQueryable installedPackages = GetInstalledPackages(aggregateRepository); - updatedPackages = new UpdatedPackages(installedPackages, aggregateRepository); + IPackageRepository repository = RegisteredPackageRepositories.ActiveRepository; + IQueryable installedPackages = GetInstalledPackages(repository); + updatedPackages = new UpdatedPackages(installedPackages, repository); } catch (Exception ex) { errorMessage = ex.Message; } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index c9770d7d18..ead1877239 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -134,6 +134,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs index 0f1fd884cb..600b38d9a5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs @@ -221,13 +221,13 @@ namespace PackageManagement.Tests } [Test] - public void ShowPackageSources_OnePackageSources_ReturnsFalse() + public void ShowPackageSources_OnePackageSources_ReturnsTrue() { CreateRegisteredPackageRepositories(); AddOnePackageSourceToRegisteredSources(); CreateViewModel(registeredPackageRepositories); - Assert.IsFalse(viewModel.ShowPackageSources); + Assert.IsTrue(viewModel.ShowPackageSources); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/IPackageExtensionsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/IPackageExtensionsTests.cs new file mode 100644 index 0000000000..65c535cf10 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/IPackageExtensionsTests.cs @@ -0,0 +1,55 @@ +// 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 ICSharpCode.PackageManagement; +using ICSharpCode.SharpDevelop; +using ICSharpCode.PackageManagement.Design; +using NuGet; +using NUnit.Framework; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class IPackageExtensionsTests + { + FakePackage package; + + void CreatePackageWithSummary(string summary) + { + package = new FakePackage() { Summary = summary }; + } + + [Test] + public void SummaryOrDescription_PackageHasSummary_ReturnsSummary() + { + CreatePackageWithSummary("summary"); + + string result = package.SummaryOrDescription(); + + Assert.AreEqual("summary", result); + } + + [Test] + public void SummaryOrDescription_PackageHasDescriptionButNullSummary_ReturnsDescription() + { + CreatePackageWithSummary(null); + package.Description = "description"; + + string result = package.SummaryOrDescription(); + + Assert.AreEqual("description", result); + } + + [Test] + public void SummaryOrDescription_PackageHasDescriptionButEmptySummary_ReturnsDescription() + { + CreatePackageWithSummary(String.Empty); + package.Description = "description"; + + string result = package.SummaryOrDescription(); + + Assert.AreEqual("description", result); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/LicenseAcceptanceViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/LicenseAcceptanceViewModelTests.cs index 2e5685cdbf..9a4d20962f 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/LicenseAcceptanceViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/LicenseAcceptanceViewModelTests.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; +using System.Linq; + using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; using NuGet; @@ -65,7 +67,14 @@ namespace PackageManagement.Tests { CreateViewModelWithOnePackage(); - CollectionAssert.AreEqual(packages, viewModel.Packages); + List packageViewModels = viewModel.Packages.ToList(); + PackageLicenseViewModel firstPackageViewModel = packageViewModels.FirstOrDefault(); + + FakePackage expectedPackage = packages[0]; + Assert.AreEqual(1, packageViewModels.Count); + Assert.AreEqual(expectedPackage.Id, firstPackageViewModel.Id); + Assert.AreEqual(expectedPackage.LicenseUrl, firstPackageViewModel.LicenseUrl); + Assert.AreEqual(expectedPackage.SummaryOrDescription(), firstPackageViewModel.Summary); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ManagePackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ManagePackagesViewModelTests.cs index 1454540bab..e01af7e2de 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/ManagePackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/ManagePackagesViewModelTests.cs @@ -175,11 +175,11 @@ namespace PackageManagement.Tests Id = "Test", Version = new SemanticVersion("2.0.0.0") }; - fakeRegisteredPackageRepositories.FakeAggregateRepository.FakePackages.Add(newPackage); + fakeRegisteredPackageRepositories.FakeActiveRepository.FakePackages.Add(newPackage); CreateViewModel(fakeSolution); - List expectedPackages = fakeRegisteredPackageRepositories.FakeAggregateRepository.FakePackages; + List expectedPackages = fakeRegisteredPackageRepositories.FakeActiveRepository.FakePackages; PackageCollectionAssert.AreEqual(expectedPackages, viewModel.UpdatedPackagesViewModel.PackageViewModels); } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs index 5d7e72fb72..bcd25c1407 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs @@ -395,5 +395,17 @@ namespace PackageManagement.Tests Assert.AreEqual(1, supportedFrameworks.Count); Assert.AreEqual(expectedFramework, supportedFrameworks[0]); } + + [Test] + public void ToString_PackageHasIdAndVersion_ReturnsWrappedPackageToString() + { + CreatePackage(); + fakePackage.Id = "MyPackage"; + fakePackage.Version = new SemanticVersion("1.1"); + + string result = package.ToString(); + + Assert.AreEqual("MyPackage 1.1", result); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs index f9044d8a61..5bdbabacab 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs @@ -159,6 +159,30 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedRepository, aggregateRepository); } + [Test] + public void CreateAggregatePackageRepository_TwoRegisteredPackageSourcesButOneDisabled_ReturnsAggregateRepositoryCreatedWithOnlyEnabledPackageSource() + { + CreatePackageSources(); + packageSourcesHelper.AddTwoPackageSources("Source1", "Source2"); + packageSourcesHelper.RegisteredPackageSources[0].IsEnabled = false; + CreateCacheUsingPackageSources(); + FakePackageRepository repository1 = AddFakePackageRepositoryForPackageSource("Source1"); + FakePackageRepository repository2 = AddFakePackageRepositoryForPackageSource("Source2"); + var expectedRepositories = new FakePackageRepository[] { + repository2 + }; + + cache.CreateAggregateRepository(); + + IEnumerable repositoriesUsedToCreateAggregateRepository = + fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository; + + var actualRepositoriesAsList = new List(repositoriesUsedToCreateAggregateRepository); + IPackageRepository[] actualRepositories = actualRepositoriesAsList.ToArray(); + + CollectionAssert.AreEqual(expectedRepositories, actualRepositories); + } + [Test] public void CreateAggregatePackageRepository_TwoRegisteredPackageRepositories_AllRegisteredRepositoriesUsedToCreateAggregateRepositoryFromFactory() { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs index 810901c44d..8b250c30c3 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs @@ -1246,5 +1246,28 @@ namespace PackageManagement.Tests ILogger actualLogger = project.Logger; Assert.AreEqual(expectedLogger, actualLogger); } + + [Test] + public void Summary_PackageHasSummary_PackageSummaryReturned() + { + CreateViewModel(); + fakePackage.Summary = "Expected summary"; + + string summary = viewModel.Summary; + + Assert.AreEqual("Expected summary", summary); + } + + [Test] + public void Summary_PackageHasDescriptionButNoSummary_PackageDescriptionReturned() + { + CreateViewModel(); + fakePackage.Summary = String.Empty; + fakePackage.Description = "Expected description"; + + string summary = viewModel.Summary; + + Assert.AreEqual("Expected description", summary); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs index 8e5b32b48a..b809f811c9 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs @@ -83,5 +83,23 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedRepositories, repositories); } + + [Test] + public void CreateAggregatePackageRepository_TwoRegisteredPackageSourcesButOneDisabled_ReturnsAggregateRepositoryCreatedWithOnlyEnabledPackageSource() + { + CreateCache(); + ClearRegisteredPackageSources(); + FakePackageRepository fakeRepository1 = AddRegisteredPackageRepository("http://sharpdevelop.com", "Test"); + FakePackageRepository fakeRepository2 = AddRegisteredPackageRepository("http://test", "Test2"); + registeredPackageSources.PackageSources[0].IsEnabled = false; + + IPackageRepository repository = cache.CreateAggregateRepository(); + + IEnumerable repositories = fakeMainCache.RepositoriesPassedToCreateAggregateRepository; + var expectedRepositories = new List(); + expectedRepositories.Add(fakeRepository2); + + Assert.AreEqual(expectedRepositories, repositories); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs index 00e4ad3959..d146db0938 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs @@ -80,6 +80,7 @@ namespace PackageManagement.Tests { CreateRegisteredPackageRepositories(); packageSourcesHelper.AddOnePackageSource(); + bool result = registeredRepositories.HasMultiplePackageSources; Assert.IsFalse(result); @@ -90,11 +91,24 @@ namespace PackageManagement.Tests { CreateRegisteredPackageRepositories(); packageSourcesHelper.AddTwoPackageSources(); + bool result = registeredRepositories.HasMultiplePackageSources; Assert.IsTrue(result); } + [Test] + public void HasMultiplePackageSources_TwoPackageSourcesButOneIsDisabled_ReturnsFalse() + { + CreateRegisteredPackageRepositories(); + packageSourcesHelper.AddTwoPackageSources(); + packageSourcesHelper.RegisteredPackageSources[0].IsEnabled = false; + + bool result = registeredRepositories.HasMultiplePackageSources; + + Assert.IsFalse(result); + } + [Test] public void ActivePackageSource_TwoPackageSources_ByDefaultReturnsFirstPackageSource() { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs index 34256818e4..cc915dac12 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs @@ -445,6 +445,30 @@ namespace PackageManagement.Tests Assert.IsFalse(result); } + [Test] + public void CanMovePackageSourceUp_TwoPackageSourcesAndNothingIsSelected_ReturnsFalse() + { + CreateViewModelWithTwoPackageSources(); + viewModel.Load(); + viewModel.SelectedPackageSourceViewModel = null; + + bool result = viewModel.CanMovePackageSourceUp; + + Assert.IsFalse(result); + } + + [Test] + public void CanMovePackageSourceDown_TwoPackageSourcesAndNothingIsSelected_ReturnsFalse() + { + CreateViewModelWithTwoPackageSources(); + viewModel.Load(); + viewModel.SelectedPackageSourceViewModel = null; + + bool result = viewModel.CanMovePackageSourceDown; + + Assert.IsFalse(result); + } + [Test] public void SelectedPackageSourceViewModel_PropertyChanged_FiresPropertyChangedEvent() { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs index 77ffb2c70c..6090de0390 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs @@ -4,6 +4,7 @@ using System; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; +using NuGet; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -36,9 +37,14 @@ namespace PackageManagement.Tests } void CreateViewModel(FakePackageManagementSolution solution) + { + CreateRegisteredPackageRepositories(); + CreateViewModel(solution, registeredPackageRepositories); + } + + void CreateViewModel(FakePackageManagementSolution solution, FakeRegisteredPackageRepositories registeredPackageRepositories) { taskFactory = new FakeTaskFactory(); - registeredPackageRepositories = new FakeRegisteredPackageRepositories(); var packageViewModelFactory = new FakePackageViewModelFactory(); var updatedPackageViewModelFactory = new UpdatedPackageViewModelFactory(packageViewModelFactory); viewModel = new UpdatedPackagesViewModel( @@ -48,6 +54,17 @@ namespace PackageManagement.Tests taskFactory); } + void CreateRegisteredPackageRepositories() + { + registeredPackageRepositories = new FakeRegisteredPackageRepositories(); + } + + void CreateViewModel(FakeRegisteredPackageRepositories registeredPackageRepositories) + { + CreateSolution(); + CreateViewModel(solution, registeredPackageRepositories); + } + void CreateExceptionThrowingSolution() { exceptionThrowingSolution = new ExceptionThrowingPackageManagementSolution(); @@ -66,9 +83,9 @@ namespace PackageManagement.Tests return package; } - FakePackage AddPackageToAggregateRepository(string version) + FakePackage AddPackageToActiveRepository(string version) { - return registeredPackageRepositories.AddFakePackageWithVersionToAggregrateRepository(version); + return registeredPackageRepositories.AddFakePackageWithVersionToActiveRepository(version); } FakePackage AddPackageToSolution(string version) @@ -78,12 +95,35 @@ namespace PackageManagement.Tests return package; } + void AddOnePackageSourceToRegisteredSources() + { + registeredPackageRepositories.ClearPackageSources(); + registeredPackageRepositories.AddOnePackageSource(); + registeredPackageRepositories.HasMultiplePackageSources = false; + } + + void AddTwoPackageSourcesToRegisteredSources() + { + var expectedPackageSources = new PackageSource[] { + new PackageSource("http://first.com", "First"), + new PackageSource("http://second.com", "Second") + }; + AddPackageSourcesToRegisteredSources(expectedPackageSources); + registeredPackageRepositories.HasMultiplePackageSources = true; + } + + void AddPackageSourcesToRegisteredSources(PackageSource[] sources) + { + registeredPackageRepositories.ClearPackageSources(); + registeredPackageRepositories.AddPackageSources(sources); + } + [Test] public void ReadPackages_OneNewerPackageVersionAvailable_NewerPackageVersionDisplayed() { CreateViewModel(); AddPackageToLocalRepository("1.0.0.0"); - FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); + FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0"); viewModel.ReadPackages(); CompleteReadPackagesTask(); @@ -100,8 +140,8 @@ namespace PackageManagement.Tests { CreateViewModel(); AddPackageToLocalRepository("1.0.0.0"); - AddPackageToAggregateRepository("1.0.0.0"); - FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); + AddPackageToActiveRepository("1.0.0.0"); + FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0"); viewModel.ReadPackages(); CompleteReadPackagesTask(); @@ -118,7 +158,7 @@ namespace PackageManagement.Tests { CreateViewModel(); AddPackageToLocalRepository("1.0.0.0"); - FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); + FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0"); viewModel.ReadPackages(); @@ -148,7 +188,7 @@ namespace PackageManagement.Tests NoProjectsSelected(); CreateViewModel(solution); AddPackageToSolution("1.0.0.0"); - FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); + FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0"); viewModel.ReadPackages(); CompleteReadPackagesTask(); @@ -167,7 +207,7 @@ namespace PackageManagement.Tests NoProjectsSelected(); CreateViewModel(solution); AddPackageToSolution("1.0.0.0"); - FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); + FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0"); viewModel.ReadPackages(); CompleteReadPackagesTask(); @@ -192,12 +232,32 @@ namespace PackageManagement.Tests CreateViewModel(); AddPackageToLocalRepository("1.0.0"); - FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0-alpha"); + FakePackage newerPackage = AddPackageToActiveRepository("1.1.0-alpha"); viewModel.ReadPackages(); CompleteReadPackagesTask(); Assert.AreEqual(0, viewModel.PackageViewModels.Count); } + + [Test] + public void ShowSources_TwoPackageSources_ReturnsTrue() + { + CreateRegisteredPackageRepositories(); + AddTwoPackageSourcesToRegisteredSources(); + CreateViewModel(registeredPackageRepositories); + + Assert.IsTrue(viewModel.ShowPackageSources); + } + + [Test] + public void ShowPackageSources_OnePackageSources_ReturnsTrue() + { + CreateRegisteredPackageRepositories(); + AddOnePackageSourceToRegisteredSources(); + CreateViewModel(registeredPackageRepositories); + + Assert.IsTrue(viewModel.ShowPackageSources); + } } } diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplacePanel.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplacePanel.cs index 6c38c7f246..f824523508 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplacePanel.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplacePanel.cs @@ -100,33 +100,37 @@ namespace SearchAndReplace void FindAllButtonClicked(object sender, EventArgs e) { WritebackOptions(); - using (var monitor = SD.StatusBar.CreateProgressMonitor()) { - monitor.TaskName = StringParser.Parse("${res:AddIns.SearchReplace.SearchProgressTitle}"); - try { - var location = new SearchLocation(SearchOptions.SearchTarget, SearchOptions.LookIn, SearchOptions.LookInFiletypes, SearchOptions.IncludeSubdirectories, SearchOptions.SearchTarget == SearchTarget.CurrentSelection ? SearchManager.GetActiveSelection(false) : null); - var strategy = SearchStrategyFactory.Create(SearchOptions.FindPattern, !SearchOptions.MatchCase, SearchOptions.MatchWholeWord, SearchOptions.SearchMode); - var results = SearchManager.FindAllParallel(strategy, location, monitor); - SearchManager.ShowSearchResults(SearchOptions.FindPattern, results); - } catch (SearchPatternException ex) { - MessageService.ShowError(ex.Message); - } catch (OperationCanceledException) {} + var location = new SearchLocation(SearchOptions.SearchTarget, SearchOptions.LookIn, SearchOptions.LookInFiletypes, SearchOptions.IncludeSubdirectories, SearchOptions.SearchTarget == SearchTarget.CurrentSelection ? SearchManager.GetActiveSelection(false) : null); + ISearchStrategy strategy; + try { + strategy = SearchStrategyFactory.Create(SearchOptions.FindPattern, !SearchOptions.MatchCase, SearchOptions.MatchWholeWord, SearchOptions.SearchMode); + } catch (SearchPatternException ex) { + MessageService.ShowError(ex.Message); + return; } + // No using block for the monitor; it is disposed when the asynchronous search finishes + var monitor = WorkbenchSingleton.StatusBar.CreateProgressMonitor(); + monitor.TaskName = StringParser.Parse("${res:AddIns.SearchReplace.SearchProgressTitle}"); + var results = SearchManager.FindAllParallel(strategy, location, monitor); + SearchManager.ShowSearchResults(SearchOptions.FindPattern, results); } void BookmarkAllButtonClicked(object sender, EventArgs e) { WritebackOptions(); - using (var monitor = SD.StatusBar.CreateProgressMonitor()) { - monitor.TaskName = StringParser.Parse("${res:AddIns.SearchReplace.SearchProgressTitle}"); - try { - var location = new SearchLocation(SearchOptions.SearchTarget, SearchOptions.LookIn, SearchOptions.LookInFiletypes, SearchOptions.IncludeSubdirectories, SearchOptions.SearchTarget == SearchTarget.CurrentSelection ? SearchManager.GetActiveSelection(false) : null); - var strategy = SearchStrategyFactory.Create(SearchOptions.FindPattern, !SearchOptions.MatchCase, SearchOptions.MatchWholeWord, SearchOptions.SearchMode); - var results = SearchManager.FindAllParallel(strategy, location, monitor); - SearchManager.MarkAll(results); - } catch (SearchPatternException ex) { - MessageService.ShowError(ex.Message); - } catch (OperationCanceledException) {} + var location = new SearchLocation(SearchOptions.SearchTarget, SearchOptions.LookIn, SearchOptions.LookInFiletypes, SearchOptions.IncludeSubdirectories, SearchOptions.SearchTarget == SearchTarget.CurrentSelection ? SearchManager.GetActiveSelection(false) : null); + ISearchStrategy strategy; + try { + strategy = SearchStrategyFactory.Create(SearchOptions.FindPattern, !SearchOptions.MatchCase, SearchOptions.MatchWholeWord, SearchOptions.SearchMode); + } catch (SearchPatternException ex) { + MessageService.ShowError(ex.Message); + return; } + // No using block for the monitor; it is disposed when the asynchronous search finishes + var monitor = WorkbenchSingleton.StatusBar.CreateProgressMonitor(); + monitor.TaskName = StringParser.Parse("${res:AddIns.SearchReplace.SearchProgressTitle}"); + var results = SearchManager.FindAllParallel(strategy, location, monitor); + SearchManager.MarkAll(results); } void ReplaceAllButtonClicked(object sender, EventArgs e) diff --git a/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs b/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs index 2c0d01df39..d516b2fc79 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs @@ -158,15 +158,18 @@ namespace SearchAndReplace public class SearchAndReplaceBinding : DefaultLanguageBinding { + TextArea textArea; SearchInputHandler handler; public override void Attach(ITextEditor editor) { - TextArea textArea = editor.GetService(typeof(TextArea)) as TextArea; - if (textArea == null) return; - handler = new SearchInputHandler(textArea); - textArea.DefaultInputHandler.NestedInputHandlers.Add(handler); - handler.SearchOptionsChanged += SearchOptionsChanged; + base.Attach(editor); + textArea = editor.GetService(typeof(TextArea)) as TextArea; + if (textArea != null) { + handler = new SearchInputHandler(textArea); + textArea.DefaultInputHandler.NestedInputHandlers.Add(handler); + handler.SearchOptionsChanged += SearchOptionsChanged; + } } void SearchOptionsChanged(object sender, SearchOptionsChangedEventArgs e) @@ -179,10 +182,12 @@ namespace SearchAndReplace public override void Detach() { - if (handler != null) { - handler.SearchOptionsChanged -= SearchOptionsChanged; + base.Detach(); + if (textArea != null) { + textArea.DefaultInputHandler.NestedInputHandlers.Remove(handler); + textArea = null; + handler = null; } - handler = null; } } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs index 98d707c519..d8d0de240c 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs @@ -211,14 +211,14 @@ namespace ICSharpCode.AvalonEdit.Editing { void Activate(out int clientId); void Deactivate(); - void CreateDocumentMgr(out object docMgr); - void EnumDocumentMgrs(out object enumDocMgrs); - void GetFocus(out object docMgr); - void SetFocus(object docMgr); - void AssociateFocus(IntPtr hwnd, object newDocMgr, out object prevDocMgr); + void CreateDocumentMgr(out IntPtr docMgr); + void EnumDocumentMgrs(out IntPtr enumDocMgrs); + void GetFocus(out IntPtr docMgr); + void SetFocus(IntPtr docMgr); + void AssociateFocus(IntPtr hwnd, IntPtr newDocMgr, out IntPtr prevDocMgr); void IsThreadFocus([MarshalAs(UnmanagedType.Bool)] out bool isFocus); - void GetFunctionProvider(ref Guid classId, out object funcProvider); - void EnumFunctionProviders(out object enumProviders); - void GetGlobalCompartment(out object compartmentMgr); + void GetFunctionProvider(ref Guid classId, out IntPtr funcProvider); + void EnumFunctionProviders(out IntPtr enumProviders); + void GetGlobalCompartment(out IntPtr compartmentMgr); } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs index 3a5e87ebd3..10fa063524 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs @@ -3,6 +3,7 @@ using System; using System.ComponentModel; +using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -77,7 +78,7 @@ namespace ICSharpCode.AvalonEdit.Editing if (threadMgr != null) { // Even though the docu says passing null is invalid, this seems to help // activating the IME on the default input context that is shared with WPF - threadMgr.SetFocus(null); + threadMgr.SetFocus(IntPtr.Zero); } } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs index a9c6540c29..f8bc3e924d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs @@ -23,7 +23,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting static string BuildHeader(int startHTML, int endHTML, int startFragment, int endFragment) { StringBuilder b = new StringBuilder(); - b.AppendLine("Version:1.0"); + b.AppendLine("Version:0.9"); b.AppendLine("StartHTML:" + startHTML.ToString("d8", CultureInfo.InvariantCulture)); b.AppendLine("EndHTML:" + endHTML.ToString("d8", CultureInfo.InvariantCulture)); b.AppendLine("StartFragment:" + startFragment.ToString("d8", CultureInfo.InvariantCulture)); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs index bda001d9ba..b7c125528e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs @@ -73,9 +73,7 @@ namespace ICSharpCode.AvalonEdit.Search void ExecuteFind(object sender, ExecutedRoutedEventArgs e) { - if (panel.IsClosed) { - panel.Open(); - } + panel.Open(); panel.SearchPattern = TextArea.Selection.GetText(); Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, (Action)delegate { panel.Reactivate(); }); } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs index b3522537af..ec9119b0cf 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs @@ -379,10 +379,12 @@ namespace ICSharpCode.AvalonEdit.Search /// public void Open() { + if (!IsClosed) return; var layer = AdornerLayer.GetAdornerLayer(textArea); if (layer != null) layer.Add(adorner); textArea.TextView.BackgroundRenderers.Add(renderer); + IsClosed = false; } /// @@ -391,7 +393,7 @@ namespace ICSharpCode.AvalonEdit.Search public event EventHandler SearchOptionsChanged; /// - /// Raises the event. + /// Raises the event. /// protected virtual void OnSearchOptionsChanged(SearchOptionsChangedEventArgs e) { diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin index 27795c23a2..be11ffb016 100755 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin @@ -588,12 +588,14 @@ icon = "Icons.16x16.PasteIcon" loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"/> - + + +