Browse Source

Merge branch 'master' into newNR.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
9a405f1499
  1. 1
      README.txt
  2. 4
      src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanel.xaml.cs
  3. 192
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd
  4. 328
      src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Resources/Ruby.xshd
  5. 1
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj
  6. 4
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs
  7. 21
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/XPathNavigatorExtensions.cs
  8. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  9. 2
      src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
  10. 6
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs
  11. 21
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs
  12. 8
      src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceViewModel.cs
  13. 5
      src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
  14. 30
      src/AddIns/Misc/PackageManagement/Project/Src/PackageLicenseViewModel.cs
  15. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs
  16. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
  17. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml
  18. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  19. 7
      src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs
  20. 2
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs
  21. 4
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs
  22. 15
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs
  23. 7
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs
  24. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  25. 4
      src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs
  26. 55
      src/AddIns/Misc/PackageManagement/Test/Src/IPackageExtensionsTests.cs
  27. 11
      src/AddIns/Misc/PackageManagement/Test/Src/LicenseAcceptanceViewModelTests.cs
  28. 4
      src/AddIns/Misc/PackageManagement/Test/Src/ManagePackagesViewModelTests.cs
  29. 12
      src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs
  30. 24
      src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs
  31. 23
      src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs
  32. 18
      src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs
  33. 14
      src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs
  34. 24
      src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs
  35. 80
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs
  36. 32
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplacePanel.cs
  37. 15
      src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs
  38. 16
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs
  39. 3
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs
  40. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HtmlClipboard.cs
  41. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs
  42. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs
  43. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

1
README.txt

@ -30,6 +30,7 @@ Extended Requirements (building SharpDevelop)
- Windows SDK 7.1 (?? not sure if this still is necessary...) - Windows SDK 7.1 (?? not sure if this still is necessary...)
- Windows SDK 7.0 (optional; C++ compiler needed for profiler) - Windows SDK 7.0 (optional; C++ compiler needed for profiler)
- Windows PowerShell - Windows PowerShell
- if you have cloned the SD git repository: git must be available on your PATH
Libraries and integrated tools: Libraries and integrated tools:
AvalonDock: New BSD License (BSD) (thanks to Adolfo Marinucci) AvalonDock: New BSD License (BSD) (thanks to Adolfo Marinucci)

4
src/AddIns/Analysis/CodeAnalysis/Src/AnalysisProjectOptionsPanel.xaml.cs

@ -36,12 +36,12 @@ namespace ICSharpCode.CodeAnalysis
} }
public ProjectProperty<string> CodeAnalysisRuleAssemblies { public ProjectProperty<string> CodeAnalysisRuleAssemblies {
get { return GetProperty("CodeAnalysisRuleAssemblies","",TextBoxEditMode.EditEvaluatedProperty); } get { return GetProperty("CodeAnalysisRuleAssemblies", "", TextBoxEditMode.EditEvaluatedProperty); }
} }
public ProjectProperty<string> CodeAnalysisRules { public ProjectProperty<string> CodeAnalysisRules {
get { return GetProperty("CodeAnalysisRules","",TextBoxEditMode.EditEvaluatedProperty); } get { return GetProperty("CodeAnalysisRules", "", TextBoxEditMode.EditRawProperty); }
} }
#region Rule Assemblies Property #region Rule Assemblies Property

192
src/AddIns/BackendBindings/Python/PythonBinding/Project/Resources/Python.xshd

@ -1,105 +1,135 @@
<SyntaxDefinition name="Python" extensions=".py"> <SyntaxDefinition name="Python" extensions=".py" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Digits" foreground="DarkBlue" exampleText="0123456789" />
<Color name="DocComment" foreground="Green" exampleText='""" comment' />
<Color name="SingleQuoteDocComment" foreground="Green" exampleText="''' comment" />
<Color name="LineComment" foreground="Green" exampleText="# comment" />
<Color name="String" foreground="Blue" exampleText='name = "Joe"' />
<Color name="Char" foreground="Magenta" exampleText="char linefeed = '\n'" />
<Color name="Punctuation" exampleText="a(b.c);" />
<Color name="MethodCall" fontWeight="bold" foreground="MidnightBlue" exampleText="method(" />
<Color name="BuiltInStatements" fontWeight="bold" foreground="MidnightBlue" exampleText="print 'hello'" />
<Color name="ClassStatement" foreground="Blue" fontWeight="bold" exampleText="class Foo: pass" />
<Color name="ExceptionHandlingStatements" fontWeight="bold" foreground="Teal" exampleText="raise 'error'" />
<Color name="FunctionDefinition" fontWeight="bold" foreground="Blue" exampleText="def MyFunction" />
<Color name="Imports" fontWeight="bold" foreground="Green" exampleText="import System.Xml" />
<Color name="IterationStatements" fontWeight="bold" foreground="Blue" exampleText="for num in range(10,20):" />
<Color name="JumpStatements" foreground="Navy" exampleText="return val" />
<Color name="OperatorStatements" fontWeight="bold" foreground="DarkCyan" exampleText="not(a &amp;&amp; b)" />
<Color name="PassStatement" foreground="Gray" exampleText="pass" />
<Color name="NullStatement" foreground="Gray" exampleText="return None" />
<Color name="SelectionStatements" fontWeight="bold" foreground="Blue" exampleText="if (a):" />
<Color name="WithStatement" foreground="DarkViolet" exampleText='with open("a.txt") as file:' />
<Properties>
<Property name="LineComment" value="#"/> <Property name="LineComment" value="#"/>
</Properties>
<Digits name="Digits" color="DarkBlue"/> <RuleSet ignoreCase="false">
<RuleSets> <Span color="DocComment" multiline="true">
<RuleSet ignorecase="false">
<Delimiters>()[]{}@,:.`=;+-*/% &amp;|^&gt;&lt;</Delimiters>
<Span name="DocComment" color="Green">
<Begin>"""</Begin> <Begin>"""</Begin>
<End>"""</End> <End>"""</End>
</Span> </Span>
<Span name="SingleQuoteDocComment" color="Green"> <Span color="SingleQuoteDocComment" multiline="true">
<Begin>'''</Begin> <Begin>'''</Begin>
<End>'''</End> <End>'''</End>
</Span> </Span>
<Span name="LineComment" stopateol="true" color="Green"> <Span color="LineComment">
<Begin>#</Begin> <Begin>\#</Begin>
</Span> </Span>
<Span name="String" stopateol="true" color="Blue" escapecharacter="\"> <Span color="String">
<Begin>"</Begin> <Begin>"</Begin>
<End>"</End> <End>"</End>
<RuleSet>
<!-- span for escape sequences -->
<Span begin="\\" end="."/>
</RuleSet>
</Span> </Span>
<Span name="Char" stopateol="true" color="Magenta" escapecharacter="\"> <Span color="Char">
<Begin>'</Begin> <Begin>'</Begin>
<End>'</End> <End>'</End>
<RuleSet>
<!-- span for escape sequences -->
<Span begin="\\" end="."/>
</RuleSet>
</Span> </Span>
<MarkPrevious bold="true" color="MidnightBlue">(</MarkPrevious> <Keywords color="BuiltInStatements">
<Word>assert</Word>
<KeyWords name="BuiltInStatements" bold="true" color="MidnightBlue"> <Word>del</Word>
<Key word="assert"/> <Word>exec</Word>
<Key word="del"/> <Word>global</Word>
<Key word="exec"/> <Word>lambda</Word>
<Key word="global"/> <Word>print</Word>
<Key word="lambda"/> </Keywords>
<Key word="print"/>
</KeyWords> <Keywords color="ClassStatement">
<Word>class</Word>
<KeyWords name="ClassStatement" color="Blue" bold="true"> </Keywords>
<Key word="class"/>
</KeyWords> <Keywords color="ExceptionHandlingStatements">
<Word>except</Word>
<KeyWords name="ExceptionHandlingStatements" bold="true" color="Teal"> <Word>finally</Word>
<Key word="except"/> <Word>raise</Word>
<Key word="finally"/> <Word>try</Word>
<Key word="raise"/> </Keywords>
<Key word="try"/>
</KeyWords> <Keywords color="FunctionDefinition">
<Word>def</Word>
<KeyWords name="FunctionDefinition" bold="true" color="Blue"> </Keywords>
<Key word="def"/>
</KeyWords> <Keywords color="Imports">
<Word>import</Word>
<KeyWords name="Imports" bold="true" color="Green"> <Word>from</Word>
<Key word="import"/> </Keywords>
<Key word="from"/>
</KeyWords> <Keywords color="IterationStatements">
<Word>for</Word>
<KeyWords name="IterationStatements" bold="true" color="Blue"> <Word>in</Word>
<Key word="for"/> <Word>while</Word>
<Key word="in"/> </Keywords>
<Key word="while"/>
</KeyWords> <Keywords color="JumpStatements">
<Word>break</Word>
<KeyWords name="JumpStatements" color="Navy"> <Word>continue</Word>
<Key word="break"/> <Word>yield</Word>
<Key word="continue"/> <Word>return</Word>
<Key word="yield"/> </Keywords>
<Key word="return"/>
</KeyWords> <Keywords color="OperatorStatements">
<Word>and</Word>
<KeyWords name="OperatorStatements" bold="true" color="DarkCyan"> <Word>as</Word>
<Key word="and"/> <Word>is</Word>
<Key word="as"/> <Word>not</Word>
<Key word="is"/> <Word>or</Word>
<Key word="not"/> </Keywords>
<Key word="or"/>
</KeyWords> <Keywords color="PassStatement">
<Word>pass</Word>
<KeyWords name="PassStatement" color="Gray"> </Keywords>
<Key word="pass"/>
</KeyWords> <Keywords color="SelectionStatements">
<Word>elif</Word>
<KeyWords name="SelectionStatements" bold="true" color="Blue"> <Word>else</Word>
<Key word="elif"/> <Word>if</Word>
<Key word="else"/> </Keywords>
<Key word="if"/>
</KeyWords> <Keywords color="WithStatement">
<Word>with</Word>
<KeyWords name="WithStatement" color="DarkViolet"> </Keywords>
<Key word="with"/>
</KeyWords> <Keywords color="NullStatement">
<Word>None</Word>
</Keywords>
<Rule color="MethodCall">\b[\d\w_]+(?=(\s*\())</Rule>
<Rule color="Digits">\b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>
<Rule color="Punctuation">
[?,.;()\[\]{}+\-/%*&lt;&gt;^+~!|&amp;]+
</Rule>
</RuleSet> </RuleSet>
</RuleSets>
</SyntaxDefinition> </SyntaxDefinition>

328
src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Resources/Ruby.xshd

@ -1,174 +1,202 @@
<SyntaxDefinition name="Ruby" extensions=".rb"> <SyntaxDefinition name="Ruby" extensions=".rb" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Digits" foreground="DarkBlue" exampleText="0123456789" />
<Color name="Char" foreground="Magenta" exampleText="char linefeed = '\n'" />
<Color name="DocComment" foreground="Green" exampleText='""" comment' />
<Color name="MultiLineComment" foreground="Green" exampleText="= comment" />
<Color name="LineComment" foreground="Green" exampleText="// comment" />
<Color name="String" foreground="Blue" exampleText='name = "Joe"' />
<Color name="Punctuation" exampleText="a(b.c);" />
<Color name="MethodCall" fontWeight="bold" foreground="MidnightBlue" exampleText="method(" />
<Color name="BuiltInStatements" fontWeight="bold" foreground="MidnightBlue" exampleText="print 'hello'" />
<Color name="ClassStatement" foreground="Blue" fontWeight="bold" exampleText="class Foo" />
<Color name="ExceptionHandlingStatements" fontWeight="bold" foreground="Teal" exampleText="raise 'error'" />
<Color name="FunctionDefinition" fontWeight="bold" foreground="Blue" exampleText="def MyFunction" />
<Color name="Imports" fontWeight="bold" foreground="Green" exampleText='require "System.Xml"' />
<Color name="IterationStatements" fontWeight="bold" foreground="Blue" exampleText="for i in 0..5" />
<Color name="JumpStatements" foreground="Navy" exampleText="return val" />
<Color name="OperatorStatements" fontWeight="bold" foreground="DarkCyan" exampleText="not(a &amp;&amp; b)" />
<Color name="NullStatement" foreground="Gray" exampleText="return nil" />
<Color name="SelectionStatements" fontWeight="bold" foreground="Blue" exampleText="if (a)" />
<Color name="BooleanStatements" foreground="DarkViolet" exampleText="return true" />
<Color name="DefinedStatement" foreground="DarkViolet" exampleText="defined? a" />
<Color name="ClassSelfStatement" foreground="DarkViolet" exampleText="self.a = ''" />
<Color name="ClassInheritanceStatement" foreground="DarkViolet" exampleText="super(value)" />
<Properties>
<Property name="LineComment" value="#"/> <Property name="LineComment" value="#"/>
</Properties>
<Digits name="Digits" color="DarkBlue"/> <RuleSet ignoreCase="false">
<RuleSets> <Span color="Char">
<RuleSet ignorecase="false">
<Delimiters>()[]{}@,:.`=;+-*/%~ &amp;|^&gt;&lt;</Delimiters>
<Span name="Char" stopateol="true" color="Magenta" escapecharacter="\">
<Begin>'</Begin> <Begin>'</Begin>
<End>'</End> <End>'</End>
<RuleSet>
<!-- span for escape sequences -->
<Span begin="\\" end="."/>
</RuleSet>
</Span> </Span>
<Span name="DocComment" color="Green"> <Span color="DocComment" multiline="true">
<Begin>"""</Begin> <Begin>"""</Begin>
<End>"""</End> <End>"""</End>
</Span> </Span>
<Span name="MultiLineComment" color="Green"> <Span color="MultiLineComment" multiline="true">
<Begin>=begin</Begin> <Begin>=begin</Begin>
<End>=end</End> <End>=end</End>
</Span> </Span>
<Span name="LineComment" stopateol="true" color="Green"> <Span color="LineComment">
<Begin>#</Begin> <Begin>\#</Begin>
</Span> </Span>
<Span name="String" stopateol="true" color="Blue" escapecharacter="\"> <Span color="String">
<Begin>"</Begin> <Begin>"</Begin>
<End>"</End> <End>"</End>
<RuleSet>
<!-- span for escape sequences -->
<Span begin="\\" end="."/>
</RuleSet>
</Span> </Span>
<MarkPrevious bold="true" color="MidnightBlue">(</MarkPrevious> <Keywords color="BuiltInStatements">
<Word>abort</Word>
<KeyWords name="BuiltInStatements" bold="true" color="MidnightBlue"> <Word>Array</Word>
<Key word="abort"/> <Word>at_exit</Word>
<Key word="Array"/> <Word>autoload</Word>
<Key word="at_exit"/> <Word>binding</Word>
<Key word="autoload"/> <Word>callcc</Word>
<Key word="binding"/> <Word>caller</Word>
<Key word="callcc"/> <Word>chomp</Word>
<Key word="caller"/> <Word>chop</Word>
<Key word="chomp"/> <Word>eval</Word>
<Key word="chop"/> <Word>exec</Word>
<Key word="eval"/> <Word>exit</Word>
<Key word="exec"/> <Word>fail</Word>
<Key word="exit"/> <Word>Float</Word>
<Key word="fail"/> <Word>fork</Word>
<Key word="Float"/> <Word>format</Word>
<Key word="fork"/> <Word>gets</Word>
<Key word="format"/> <Word>global_variables</Word>
<Key word="gets"/> <Word>gsub</Word>
<Key word="global_variables"/> <Word>Integer</Word>
<Key word="gsub"/> <Word>lambda</Word>
<Key word="Integer"/> <Word>proc</Word>
<Key word="lambda"/> <Word>load</Word>
<Key word="proc"/> <Word>local_variables</Word>
<Key word="load"/> <Word>loop</Word>
<Key word="local_variables"/> <Word>open</Word>
<Key word="loop"/> <Word>p</Word>
<Key word="open"/> <Word>print</Word>
<Key word="p"/> <Word>print</Word>
<Key word="print"/> <Word>printf</Word>
<Key word="print"/> <Word>putc</Word>
<Key word="printf"/> <Word>puts</Word>
<Key word="putc"/> <Word>rand</Word>
<Key word="puts"/> <Word>readline</Word>
<Key word="rand"/> <Word>scan</Word>
<Key word="readline"/> <Word>select</Word>
<Key word="scan"/> <Word>set_trace_func</Word>
<Key word="select"/> <Word>sleep</Word>
<Key word="set_trace_func"/> <Word>split</Word>
<Key word="sleep"/> <Word>sprintf</Word>
<Key word="split"/> <Word>srand</Word>
<Key word="sprintf"/> <Word>String</Word>
<Key word="srand"/> <Word>syscall</Word>
<Key word="String"/> <Word>system</Word>
<Key word="syscall"/> <Word>sub</Word>
<Key word="system"/> <Word>test</Word>
<Key word="sub"/> <Word>throw</Word>
<Key word="test"/> <Word>trace_var</Word>
<Key word="throw"/> <Word>trap</Word>
<Key word="trace_var"/> <Word>untrace_var</Word>
<Key word="trap"/> </Keywords>
<Key word="untrace_var"/>
</KeyWords> <Keywords color="ClassStatement">
<Word>class</Word>
<KeyWords name="ClassStatement" color="Blue" bold="true"> <Word>module</Word>
<Key word="class"/> <Word>public</Word>
<Key word="module"/> <Word>protected</Word>
<Key word="public"/> <Word>private</Word>
<Key word="protected"/> </Keywords>
<Key word="private"/>
</KeyWords> <Keywords color="ExceptionHandlingStatements">
<Word>begin</Word>
<KeyWords name="ExceptionHandlingStatements" bold="true" color="Teal"> <Word>rescue</Word>
<Key word="begin"/> <Word>ensure</Word>
<Key word="rescue"/> <Word>raise</Word>
<Key word="ensure"/> <Word>catch</Word>
<Key word="raise"/> </Keywords>
<Key word="catch"/>
</KeyWords> <Keywords color="FunctionDefinition">
<Word>def</Word>
<KeyWords name="FunctionDefinition" bold="true" color="Blue"> <Word>end</Word>
<Key word="def"/> <Word>undef</Word>
<Key word="end"/> </Keywords>
<Key word="undef"/>
</KeyWords> <Keywords color="Imports">
<Word>require</Word>
<KeyWords name="Imports" bold="true" color="Green"> <Word>alias</Word>
<Key word="import"/> </Keywords>
<Key word="alias"/>
</KeyWords> <Keywords color="IterationStatements">
<Word>for</Word>
<KeyWords name="IterationStatements" bold="true" color="Blue"> <Word>do</Word>
<Key word="for"/> <Word>in</Word>
<Key word="do"/> <Word>while</Word>
<Key word="in"/> <Word>until</Word>
<Key word="while"/> </Keywords>
<Key word="until"/>
</KeyWords> <Keywords color="JumpStatements">
<Word>break</Word>
<KeyWords name="JumpStatements" color="Navy"> <Word>yield</Word>
<Key word="break"/> <Word>redo</Word>
<Key word="yield"/> <Word>return</Word>
<Key word="redo"/> <Word>retry</Word>
<Key word="return"/> <Word>next</Word>
<Key word="retry"/> </Keywords>
<Key word="next"/>
</KeyWords> <Keywords color="OperatorStatements">
<Word>and</Word>
<KeyWords name="OperatorStatements" bold="true" color="DarkCyan"> <Word>not</Word>
<Key word="and"/> <Word>or</Word>
<Key word="not"/> </Keywords>
<Key word="or"/>
</KeyWords> <Keywords color="NullStatement">
<Word>nil</Word>
<KeyWords name="NullStatement" color="Gray"> </Keywords>
<Key word="nil"/>
</KeyWords> <Keywords color="SelectionStatements">
<Word>elsif</Word>
<KeyWords name="SelectionStatements" bold="true" color="Blue"> <Word>else</Word>
<Key word="elsif"/> <Word>if</Word>
<Key word="else"/> <Word>then</Word>
<Key word="if"/> <Word>case</Word>
<Key word="then"/> <Word>unless</Word>
<Key word="case"/> </Keywords>
<Key word="unless"/>
</KeyWords> <Keywords color="BooleanStatements">
<Word>true</Word>
<KeyWords name="BooleanStatements" color="DarkViolet"> <Word>false</Word>
<Key word="true"/> </Keywords>
<Key word="false"/>
</KeyWords> <Keywords color="DefinedStatement">
<Word>defined</Word>
<KeyWords name="DefinedStatement" color="DarkViolet"> </Keywords>
<Key word="defined"/>
</KeyWords> <Keywords color="ClassSelfStatement">
<Word>self</Word>
<KeyWords name="ClassSelfStatement" color="DarkViolet"> </Keywords>
<Key word="self"/>
</KeyWords> <Keywords color="ClassInheritanceStatement">
<Word>super</Word>
<KeyWords name="ClassInheritanceStatement" color="DarkViolet"> </Keywords>
<Key word="super"/>
</KeyWords> <Rule color="MethodCall">\b[\d\w_]+(?=(\s*\())</Rule>
<Rule color="Digits">\b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>
<Rule color="Punctuation">
[?,.;()\[\]{}+\-/%*&lt;&gt;^+~!|&amp;]+
</Rule>
</RuleSet> </RuleSet>
</RuleSets>
</SyntaxDefinition> </SyntaxDefinition>

1
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj

@ -78,6 +78,7 @@
<Compile Include="Shapes\RouteInheritanceShape.cs" /> <Compile Include="Shapes\RouteInheritanceShape.cs" />
<Compile Include="Shapes\RouteShape.cs" /> <Compile Include="Shapes\RouteShape.cs" />
<Compile Include="Shapes\PropertyShape.cs" /> <Compile Include="Shapes\PropertyShape.cs" />
<Compile Include="Src\XPathNavigatorExtensions.cs" />
<EmbeddedResource Include="Src\ClassCanvas.resx"> <EmbeddedResource Include="Src\ClassCanvas.resx">
<DependentUpon>ClassCanvas.Designer.cs</DependentUpon> <DependentUpon>ClassCanvas.Designer.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>

4
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/Src/ClassCanvasItem.cs

@ -625,7 +625,7 @@ namespace ClassDiagram
{ {
base.LoadFromXml(navigator); base.LoadFromXml(navigator);
Collapsed = bool.Parse(navigator.GetAttribute("Collapsed", "")); Collapsed = navigator.GetBooleanAttribute("Collapsed");
XPathNodeIterator compNI = navigator.Select("Compartments/Compartment"); XPathNodeIterator compNI = navigator.Select("Compartments/Compartment");
while (compNI.MoveNext()) while (compNI.MoveNext())
@ -634,7 +634,7 @@ namespace ClassDiagram
InteractiveHeaderedItem grp; InteractiveHeaderedItem grp;
if (groupsByName.TryGetValue(compNav.GetAttribute("Name", ""), out grp)) if (groupsByName.TryGetValue(compNav.GetAttribute("Name", ""), out grp))
{ {
grp.Collapsed = bool.Parse(compNav.GetAttribute("Collapsed", "")); grp.Collapsed = compNav.GetBooleanAttribute("Collapsed");
} }
} }
} }

21
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;
}
}
}

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

@ -149,6 +149,7 @@
<Compile Include="Src\EnvDTE\Window.cs" /> <Compile Include="Src\EnvDTE\Window.cs" />
<Compile Include="Src\IClassKindUpdater.cs" /> <Compile Include="Src\IClassKindUpdater.cs" />
<Compile Include="Src\IDocumentNamespaceCreator.cs" /> <Compile Include="Src\IDocumentNamespaceCreator.cs" />
<Compile Include="Src\IPackageExtensions.cs" />
<Compile Include="Src\IProjectBuilder.cs" /> <Compile Include="Src\IProjectBuilder.cs" />
<Compile Include="Src\IProjectContentExtensions.cs" /> <Compile Include="Src\IProjectContentExtensions.cs" />
<Compile Include="Src\IVirtualMethodUpdater.cs" /> <Compile Include="Src\IVirtualMethodUpdater.cs" />
@ -220,6 +221,7 @@
<Compile Include="Src\ManagePackagesUserPrompts.cs" /> <Compile Include="Src\ManagePackagesUserPrompts.cs" />
<Compile Include="Src\ManagePackagesViewTitle.cs" /> <Compile Include="Src\ManagePackagesViewTitle.cs" />
<Compile Include="Src\MSBuildBasedProjectExtensions.cs" /> <Compile Include="Src\MSBuildBasedProjectExtensions.cs" />
<Compile Include="Src\PackageLicenseViewModel.cs" />
<Compile Include="Src\PackageManagementServiceProvider.cs" /> <Compile Include="Src\PackageManagementServiceProvider.cs" />
<Compile Include="Src\ProjectBuilder.cs" /> <Compile Include="Src\ProjectBuilder.cs" />
<Compile Include="Src\VirtualMethodUpdater.cs" /> <Compile Include="Src\VirtualMethodUpdater.cs" />

2
src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.PackageManagement
: base(registeredPackageRepositories, packageViewModelFactory, taskFactory) : base(registeredPackageRepositories, packageViewModelFactory, taskFactory)
{ {
IsSearchable = true; IsSearchable = true;
ShowPackageSources = registeredPackageRepositories.HasMultiplePackageSources; ShowPackageSources = true;
} }
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()

6
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs

@ -70,9 +70,11 @@ namespace ICSharpCode.PackageManagement.Design
PackageSources.AddRange(sources); 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) public FakePackage AddFakePackageWithVersionToAggregrateRepository(string id, string version)

21
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
{
/// <summary>
/// Returns description if summary is missing.
/// </summary>
public static string SummaryOrDescription(this IPackage package)
{
if (String.IsNullOrEmpty(package.Summary))
return package.Description;
return package.Summary;
}
}
}

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

@ -10,14 +10,16 @@ namespace ICSharpCode.PackageManagement
{ {
public class LicenseAcceptanceViewModel : ViewModelBase<LicenseAcceptanceViewModel> public class LicenseAcceptanceViewModel : ViewModelBase<LicenseAcceptanceViewModel>
{ {
IList<IPackage> packages; IList<PackageLicenseViewModel> packages;
public LicenseAcceptanceViewModel(IEnumerable<IPackage> packages) public LicenseAcceptanceViewModel(IEnumerable<IPackage> packages)
{ {
this.packages = packages.ToList(); this.packages = packages
.Select(p => new PackageLicenseViewModel(p))
.ToList();
} }
public IEnumerable<IPackage> Packages { public IEnumerable<PackageLicenseViewModel> Packages {
get { return packages; } get { return packages; }
} }

5
src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs

@ -169,5 +169,10 @@ namespace ICSharpCode.PackageManagement
{ {
return package.GetSupportedFrameworks(); return package.GetSupportedFrameworks();
} }
public override string ToString()
{
return package.ToString();
}
} }
} }

30
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<PackageLicenseViewModel>
{
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; }
}
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs

@ -69,13 +69,13 @@ namespace ICSharpCode.PackageManagement
public IPackageRepository CreateAggregateRepository() public IPackageRepository CreateAggregateRepository()
{ {
IEnumerable<IPackageRepository> allRepositories = CreateAllRepositories(); IEnumerable<IPackageRepository> allRepositories = CreateAllEnabledRepositories();
return CreateAggregateRepository(allRepositories); return CreateAggregateRepository(allRepositories);
} }
IEnumerable<IPackageRepository> CreateAllRepositories() IEnumerable<IPackageRepository> CreateAllEnabledRepositories()
{ {
foreach (PackageSource source in registeredPackageSources) { foreach (PackageSource source in registeredPackageSources.GetEnabledPackageSources()) {
yield return CreateRepository(source.Source); yield return CreateRepository(source.Source);
} }
} }

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs

@ -130,7 +130,7 @@ namespace ICSharpCode.PackageManagement
} }
public string Summary { public string Summary {
get { return package.Summary; } get { return package.SummaryOrDescription(); }
} }
public SemanticVersion Version { public SemanticVersion Version {

6
src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml

@ -310,7 +310,7 @@
<RowDefinition /> <RowDefinition />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid <Grid
Visibility="{Binding Path=IsSearchable, Converter={StaticResource BoolToVisibility}}"> Visibility="{Binding Path=ShowPackageSources, Converter={StaticResource BoolToVisibility}}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition /> <ColumnDefinition />
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
@ -330,6 +330,7 @@
<TextBox <TextBox
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Visibility="{Binding Path=IsSearchable, Converter={StaticResource BoolToVisibility}}"
Text="{Binding Path=SearchTerms, UpdateSourceTrigger=PropertyChanged}"> Text="{Binding Path=SearchTerms, UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings> <TextBox.InputBindings>
<KeyBinding <KeyBinding
@ -340,7 +341,8 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Margin="4"> Margin="4"
Visibility="{Binding Path=IsSearchable, Converter={StaticResource BoolToVisibility}}">
<Hyperlink <Hyperlink
TextDecorations="{x:Null}" TextDecorations="{x:Null}"
Command="{Binding Path=SearchCommand}"> Command="{Binding Path=SearchCommand}">

2
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs

@ -345,7 +345,7 @@ namespace ICSharpCode.PackageManagement
foreach (PackageSource packageSource in registeredPackageRepositories.PackageSources.GetEnabledPackageSources()) { foreach (PackageSource packageSource in registeredPackageRepositories.PackageSources.GetEnabledPackageSources()) {
yield return packageSource; yield return packageSource;
} }
if (registeredPackageRepositories.PackageSources.HasMultiplePackageSources) { if (registeredPackageRepositories.PackageSources.HasMultipleEnabledPackageSources) {
yield return RegisteredPackageSourceSettings.AggregatePackageSource; yield return RegisteredPackageSourceSettings.AggregatePackageSource;
} }
} }

7
src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs

@ -41,11 +41,16 @@ namespace ICSharpCode.PackageManagement
IEnumerable<IPackageRepository> GetRegisteredPackageRepositories() IEnumerable<IPackageRepository> GetRegisteredPackageRepositories()
{ {
foreach (PackageSource packageSource in registeredPackageSources.PackageSources) { foreach (PackageSource packageSource in GetEnabledPackageSources()) {
yield return CreateRepository(packageSource.Source); yield return CreateRepository(packageSource.Source);
} }
} }
public IEnumerable<PackageSource> GetEnabledPackageSources()
{
return registeredPackageSources.PackageSources.GetEnabledPackageSources();
}
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem) public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem)
{ {
throw new NotImplementedException(); throw new NotImplementedException();

2
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.PackageManagement
} }
public bool HasMultiplePackageSources { public bool HasMultiplePackageSources {
get { return registeredPackageSources.HasMultiplePackageSources; } get { return registeredPackageSources.HasMultipleEnabledPackageSources; }
} }
public PackageSource ActivePackageSource { public PackageSource ActivePackageSource {

4
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs

@ -48,8 +48,8 @@ namespace ICSharpCode.PackageManagement
get { return Count == 0; } get { return Count == 0; }
} }
public bool HasMultiplePackageSources { public bool HasMultipleEnabledPackageSources {
get { return Count > 1; } get { return GetEnabledPackageSources().Count() > 1; }
} }
public IEnumerable<PackageSource> GetEnabledPackageSources() public IEnumerable<PackageSource> GetEnabledPackageSources()

15
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs

@ -170,7 +170,7 @@ namespace ICSharpCode.PackageManagement
} }
public bool CanRemovePackageSource { public bool CanRemovePackageSource {
get { return selectedPackageSourceViewModel != null; } get { return IsPackageSourceSelected(); }
} }
void RemoveSelectedPackageSourceViewModel() void RemoveSelectedPackageSourceViewModel()
@ -192,10 +192,17 @@ namespace ICSharpCode.PackageManagement
public bool CanMovePackageSourceUp { public bool CanMovePackageSourceUp {
get { get {
return HasAtLeastTwoPackageSources() && !IsFirstPackageSourceSelected(); return HasAtLeastTwoPackageSources() &&
IsPackageSourceSelected() &&
!IsFirstPackageSourceSelected();
} }
} }
bool IsPackageSourceSelected()
{
return selectedPackageSourceViewModel != null;
}
bool IsFirstPackageSourceSelected() bool IsFirstPackageSourceSelected()
{ {
return selectedPackageSourceViewModel == packageSourceViewModels[0]; return selectedPackageSourceViewModel == packageSourceViewModels[0];
@ -210,7 +217,9 @@ namespace ICSharpCode.PackageManagement
public bool CanMovePackageSourceDown { public bool CanMovePackageSourceDown {
get { get {
return HasAtLeastTwoPackageSources() && !IsLastPackageSourceSelected(); return HasAtLeastTwoPackageSources() &&
IsPackageSourceSelected() &&
!IsLastPackageSourceSelected();
} }
} }

7
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs

@ -26,14 +26,15 @@ namespace ICSharpCode.PackageManagement
taskFactory) taskFactory)
{ {
this.selectedProjects = new PackageManagementSelectedProjects(solution); this.selectedProjects = new PackageManagementSelectedProjects(solution);
ShowPackageSources = true;
} }
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{ {
try { try {
IPackageRepository aggregateRepository = RegisteredPackageRepositories.CreateAggregateRepository(); IPackageRepository repository = RegisteredPackageRepositories.ActiveRepository;
IQueryable<IPackage> installedPackages = GetInstalledPackages(aggregateRepository); IQueryable<IPackage> installedPackages = GetInstalledPackages(repository);
updatedPackages = new UpdatedPackages(installedPackages, aggregateRepository); updatedPackages = new UpdatedPackages(installedPackages, repository);
} catch (Exception ex) { } catch (Exception ex) {
errorMessage = ex.Message; errorMessage = ex.Message;
} }

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -134,6 +134,7 @@
<Compile Include="Src\Helpers\UsingHelper.cs" /> <Compile Include="Src\Helpers\UsingHelper.cs" />
<Compile Include="Src\Helpers\UsingScopeHelper.cs" /> <Compile Include="Src\Helpers\UsingScopeHelper.cs" />
<Compile Include="Src\InstalledPackageViewModelTests.cs" /> <Compile Include="Src\InstalledPackageViewModelTests.cs" />
<Compile Include="Src\IPackageExtensionsTests.cs" />
<Compile Include="Src\ManagePackagesCommandTests.cs" /> <Compile Include="Src\ManagePackagesCommandTests.cs" />
<Compile Include="Src\ConsolePackageActionRunnerTests.cs" /> <Compile Include="Src\ConsolePackageActionRunnerTests.cs" />
<Compile Include="Src\DefaultProjectTemplatePackageSourceTests.cs" /> <Compile Include="Src\DefaultProjectTemplatePackageSourceTests.cs" />

4
src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

@ -221,13 +221,13 @@ namespace PackageManagement.Tests
} }
[Test] [Test]
public void ShowPackageSources_OnePackageSources_ReturnsFalse() public void ShowPackageSources_OnePackageSources_ReturnsTrue()
{ {
CreateRegisteredPackageRepositories(); CreateRegisteredPackageRepositories();
AddOnePackageSourceToRegisteredSources(); AddOnePackageSourceToRegisteredSources();
CreateViewModel(registeredPackageRepositories); CreateViewModel(registeredPackageRepositories);
Assert.IsFalse(viewModel.ShowPackageSources); Assert.IsTrue(viewModel.ShowPackageSources);
} }
[Test] [Test]

55
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);
}
}
}

11
src/AddIns/Misc/PackageManagement/Test/Src/LicenseAcceptanceViewModelTests.cs

@ -3,6 +3,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Design;
using NuGet; using NuGet;
@ -65,7 +67,14 @@ namespace PackageManagement.Tests
{ {
CreateViewModelWithOnePackage(); CreateViewModelWithOnePackage();
CollectionAssert.AreEqual(packages, viewModel.Packages); List<PackageLicenseViewModel> 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] [Test]

4
src/AddIns/Misc/PackageManagement/Test/Src/ManagePackagesViewModelTests.cs

@ -175,11 +175,11 @@ namespace PackageManagement.Tests
Id = "Test", Id = "Test",
Version = new SemanticVersion("2.0.0.0") Version = new SemanticVersion("2.0.0.0")
}; };
fakeRegisteredPackageRepositories.FakeAggregateRepository.FakePackages.Add(newPackage); fakeRegisteredPackageRepositories.FakeActiveRepository.FakePackages.Add(newPackage);
CreateViewModel(fakeSolution); CreateViewModel(fakeSolution);
List<FakePackage> expectedPackages = fakeRegisteredPackageRepositories.FakeAggregateRepository.FakePackages; List<FakePackage> expectedPackages = fakeRegisteredPackageRepositories.FakeActiveRepository.FakePackages;
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.UpdatedPackagesViewModel.PackageViewModels); PackageCollectionAssert.AreEqual(expectedPackages, viewModel.UpdatedPackagesViewModel.PackageViewModels);
} }

12
src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs

@ -395,5 +395,17 @@ namespace PackageManagement.Tests
Assert.AreEqual(1, supportedFrameworks.Count); Assert.AreEqual(1, supportedFrameworks.Count);
Assert.AreEqual(expectedFramework, supportedFrameworks[0]); 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);
}
} }
} }

24
src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs

@ -159,6 +159,30 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedRepository, aggregateRepository); 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<IPackageRepository> repositoriesUsedToCreateAggregateRepository =
fakePackageRepositoryFactory.RepositoriesPassedToCreateAggregateRepository;
var actualRepositoriesAsList = new List<IPackageRepository>(repositoriesUsedToCreateAggregateRepository);
IPackageRepository[] actualRepositories = actualRepositoriesAsList.ToArray();
CollectionAssert.AreEqual(expectedRepositories, actualRepositories);
}
[Test] [Test]
public void CreateAggregatePackageRepository_TwoRegisteredPackageRepositories_AllRegisteredRepositoriesUsedToCreateAggregateRepositoryFromFactory() public void CreateAggregatePackageRepository_TwoRegisteredPackageRepositories_AllRegisteredRepositoriesUsedToCreateAggregateRepositoryFromFactory()
{ {

23
src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs

@ -1246,5 +1246,28 @@ namespace PackageManagement.Tests
ILogger actualLogger = project.Logger; ILogger actualLogger = project.Logger;
Assert.AreEqual(expectedLogger, actualLogger); 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);
}
} }
} }

18
src/AddIns/Misc/PackageManagement/Test/Src/ProjectTemplatePackageRepositoryCacheTests.cs

@ -83,5 +83,23 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedRepositories, repositories); 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<IPackageRepository> repositories = fakeMainCache.RepositoriesPassedToCreateAggregateRepository;
var expectedRepositories = new List<IPackageRepository>();
expectedRepositories.Add(fakeRepository2);
Assert.AreEqual(expectedRepositories, repositories);
}
} }
} }

14
src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs

@ -80,6 +80,7 @@ namespace PackageManagement.Tests
{ {
CreateRegisteredPackageRepositories(); CreateRegisteredPackageRepositories();
packageSourcesHelper.AddOnePackageSource(); packageSourcesHelper.AddOnePackageSource();
bool result = registeredRepositories.HasMultiplePackageSources; bool result = registeredRepositories.HasMultiplePackageSources;
Assert.IsFalse(result); Assert.IsFalse(result);
@ -90,11 +91,24 @@ namespace PackageManagement.Tests
{ {
CreateRegisteredPackageRepositories(); CreateRegisteredPackageRepositories();
packageSourcesHelper.AddTwoPackageSources(); packageSourcesHelper.AddTwoPackageSources();
bool result = registeredRepositories.HasMultiplePackageSources; bool result = registeredRepositories.HasMultiplePackageSources;
Assert.IsTrue(result); 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] [Test]
public void ActivePackageSource_TwoPackageSources_ByDefaultReturnsFirstPackageSource() public void ActivePackageSource_TwoPackageSources_ByDefaultReturnsFirstPackageSource()
{ {

24
src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs

@ -445,6 +445,30 @@ namespace PackageManagement.Tests
Assert.IsFalse(result); 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] [Test]
public void SelectedPackageSourceViewModel_PropertyChanged_FiresPropertyChangedEvent() public void SelectedPackageSourceViewModel_PropertyChanged_FiresPropertyChangedEvent()
{ {

80
src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs

@ -4,6 +4,7 @@
using System; using System;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework; using NUnit.Framework;
using PackageManagement.Tests.Helpers; using PackageManagement.Tests.Helpers;
@ -36,9 +37,14 @@ namespace PackageManagement.Tests
} }
void CreateViewModel(FakePackageManagementSolution solution) void CreateViewModel(FakePackageManagementSolution solution)
{
CreateRegisteredPackageRepositories();
CreateViewModel(solution, registeredPackageRepositories);
}
void CreateViewModel(FakePackageManagementSolution solution, FakeRegisteredPackageRepositories registeredPackageRepositories)
{ {
taskFactory = new FakeTaskFactory(); taskFactory = new FakeTaskFactory();
registeredPackageRepositories = new FakeRegisteredPackageRepositories();
var packageViewModelFactory = new FakePackageViewModelFactory(); var packageViewModelFactory = new FakePackageViewModelFactory();
var updatedPackageViewModelFactory = new UpdatedPackageViewModelFactory(packageViewModelFactory); var updatedPackageViewModelFactory = new UpdatedPackageViewModelFactory(packageViewModelFactory);
viewModel = new UpdatedPackagesViewModel( viewModel = new UpdatedPackagesViewModel(
@ -48,6 +54,17 @@ namespace PackageManagement.Tests
taskFactory); taskFactory);
} }
void CreateRegisteredPackageRepositories()
{
registeredPackageRepositories = new FakeRegisteredPackageRepositories();
}
void CreateViewModel(FakeRegisteredPackageRepositories registeredPackageRepositories)
{
CreateSolution();
CreateViewModel(solution, registeredPackageRepositories);
}
void CreateExceptionThrowingSolution() void CreateExceptionThrowingSolution()
{ {
exceptionThrowingSolution = new ExceptionThrowingPackageManagementSolution(); exceptionThrowingSolution = new ExceptionThrowingPackageManagementSolution();
@ -66,9 +83,9 @@ namespace PackageManagement.Tests
return package; return package;
} }
FakePackage AddPackageToAggregateRepository(string version) FakePackage AddPackageToActiveRepository(string version)
{ {
return registeredPackageRepositories.AddFakePackageWithVersionToAggregrateRepository(version); return registeredPackageRepositories.AddFakePackageWithVersionToActiveRepository(version);
} }
FakePackage AddPackageToSolution(string version) FakePackage AddPackageToSolution(string version)
@ -78,12 +95,35 @@ namespace PackageManagement.Tests
return package; 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] [Test]
public void ReadPackages_OneNewerPackageVersionAvailable_NewerPackageVersionDisplayed() public void ReadPackages_OneNewerPackageVersionAvailable_NewerPackageVersionDisplayed()
{ {
CreateViewModel(); CreateViewModel();
AddPackageToLocalRepository("1.0.0.0"); AddPackageToLocalRepository("1.0.0.0");
FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0");
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
@ -100,8 +140,8 @@ namespace PackageManagement.Tests
{ {
CreateViewModel(); CreateViewModel();
AddPackageToLocalRepository("1.0.0.0"); AddPackageToLocalRepository("1.0.0.0");
AddPackageToAggregateRepository("1.0.0.0"); AddPackageToActiveRepository("1.0.0.0");
FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0");
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
@ -118,7 +158,7 @@ namespace PackageManagement.Tests
{ {
CreateViewModel(); CreateViewModel();
AddPackageToLocalRepository("1.0.0.0"); AddPackageToLocalRepository("1.0.0.0");
FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0");
viewModel.ReadPackages(); viewModel.ReadPackages();
@ -148,7 +188,7 @@ namespace PackageManagement.Tests
NoProjectsSelected(); NoProjectsSelected();
CreateViewModel(solution); CreateViewModel(solution);
AddPackageToSolution("1.0.0.0"); AddPackageToSolution("1.0.0.0");
FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0");
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
@ -167,7 +207,7 @@ namespace PackageManagement.Tests
NoProjectsSelected(); NoProjectsSelected();
CreateViewModel(solution); CreateViewModel(solution);
AddPackageToSolution("1.0.0.0"); AddPackageToSolution("1.0.0.0");
FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0.0"); FakePackage newerPackage = AddPackageToActiveRepository("1.1.0.0");
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
@ -192,12 +232,32 @@ namespace PackageManagement.Tests
CreateViewModel(); CreateViewModel();
AddPackageToLocalRepository("1.0.0"); AddPackageToLocalRepository("1.0.0");
FakePackage newerPackage = AddPackageToAggregateRepository("1.1.0-alpha"); FakePackage newerPackage = AddPackageToActiveRepository("1.1.0-alpha");
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count); 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);
}
} }
} }

32
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchAndReplacePanel.cs

@ -100,33 +100,37 @@ namespace SearchAndReplace
void FindAllButtonClicked(object sender, EventArgs e) void FindAllButtonClicked(object sender, EventArgs e)
{ {
WritebackOptions(); 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 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); ISearchStrategy strategy;
var results = SearchManager.FindAllParallel(strategy, location, monitor); try {
SearchManager.ShowSearchResults(SearchOptions.FindPattern, results); strategy = SearchStrategyFactory.Create(SearchOptions.FindPattern, !SearchOptions.MatchCase, SearchOptions.MatchWholeWord, SearchOptions.SearchMode);
} catch (SearchPatternException ex) { } catch (SearchPatternException ex) {
MessageService.ShowError(ex.Message); MessageService.ShowError(ex.Message);
} catch (OperationCanceledException) {} 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) void BookmarkAllButtonClicked(object sender, EventArgs e)
{ {
WritebackOptions(); 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 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); ISearchStrategy strategy;
var results = SearchManager.FindAllParallel(strategy, location, monitor); try {
SearchManager.MarkAll(results); strategy = SearchStrategyFactory.Create(SearchOptions.FindPattern, !SearchOptions.MatchCase, SearchOptions.MatchWholeWord, SearchOptions.SearchMode);
} catch (SearchPatternException ex) { } catch (SearchPatternException ex) {
MessageService.ShowError(ex.Message); MessageService.ShowError(ex.Message);
} catch (OperationCanceledException) {} 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) void ReplaceAllButtonClicked(object sender, EventArgs e)

15
src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs

@ -158,16 +158,19 @@ namespace SearchAndReplace
public class SearchAndReplaceBinding : DefaultLanguageBinding public class SearchAndReplaceBinding : DefaultLanguageBinding
{ {
TextArea textArea;
SearchInputHandler handler; SearchInputHandler handler;
public override void Attach(ITextEditor editor) public override void Attach(ITextEditor editor)
{ {
TextArea textArea = editor.GetService(typeof(TextArea)) as TextArea; base.Attach(editor);
if (textArea == null) return; textArea = editor.GetService(typeof(TextArea)) as TextArea;
if (textArea != null) {
handler = new SearchInputHandler(textArea); handler = new SearchInputHandler(textArea);
textArea.DefaultInputHandler.NestedInputHandlers.Add(handler); textArea.DefaultInputHandler.NestedInputHandlers.Add(handler);
handler.SearchOptionsChanged += SearchOptionsChanged; handler.SearchOptionsChanged += SearchOptionsChanged;
} }
}
void SearchOptionsChanged(object sender, SearchOptionsChangedEventArgs e) void SearchOptionsChanged(object sender, SearchOptionsChangedEventArgs e)
{ {
@ -179,10 +182,12 @@ namespace SearchAndReplace
public override void Detach() public override void Detach()
{ {
if (handler != null) { base.Detach();
handler.SearchOptionsChanged -= SearchOptionsChanged; if (textArea != null) {
} textArea.DefaultInputHandler.NestedInputHandlers.Remove(handler);
textArea = null;
handler = null; handler = null;
} }
} }
}
} }

16
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeNativeWrapper.cs

@ -211,14 +211,14 @@ namespace ICSharpCode.AvalonEdit.Editing
{ {
void Activate(out int clientId); void Activate(out int clientId);
void Deactivate(); void Deactivate();
void CreateDocumentMgr(out object docMgr); void CreateDocumentMgr(out IntPtr docMgr);
void EnumDocumentMgrs(out object enumDocMgrs); void EnumDocumentMgrs(out IntPtr enumDocMgrs);
void GetFocus(out object docMgr); void GetFocus(out IntPtr docMgr);
void SetFocus(object docMgr); void SetFocus(IntPtr docMgr);
void AssociateFocus(IntPtr hwnd, object newDocMgr, out object prevDocMgr); void AssociateFocus(IntPtr hwnd, IntPtr newDocMgr, out IntPtr prevDocMgr);
void IsThreadFocus([MarshalAs(UnmanagedType.Bool)] out bool isFocus); void IsThreadFocus([MarshalAs(UnmanagedType.Bool)] out bool isFocus);
void GetFunctionProvider(ref Guid classId, out object funcProvider); void GetFunctionProvider(ref Guid classId, out IntPtr funcProvider);
void EnumFunctionProviders(out object enumProviders); void EnumFunctionProviders(out IntPtr enumProviders);
void GetGlobalCompartment(out object compartmentMgr); void GetGlobalCompartment(out IntPtr compartmentMgr);
} }
} }

3
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs

@ -3,6 +3,7 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -77,7 +78,7 @@ namespace ICSharpCode.AvalonEdit.Editing
if (threadMgr != null) { if (threadMgr != null) {
// Even though the docu says passing null is invalid, this seems to help // 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 // activating the IME on the default input context that is shared with WPF
threadMgr.SetFocus(null); threadMgr.SetFocus(IntPtr.Zero);
} }
} }
} }

2
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) static string BuildHeader(int startHTML, int endHTML, int startFragment, int endFragment)
{ {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
b.AppendLine("Version:1.0"); b.AppendLine("Version:0.9");
b.AppendLine("StartHTML:" + startHTML.ToString("d8", CultureInfo.InvariantCulture)); b.AppendLine("StartHTML:" + startHTML.ToString("d8", CultureInfo.InvariantCulture));
b.AppendLine("EndHTML:" + endHTML.ToString("d8", CultureInfo.InvariantCulture)); b.AppendLine("EndHTML:" + endHTML.ToString("d8", CultureInfo.InvariantCulture));
b.AppendLine("StartFragment:" + startFragment.ToString("d8", CultureInfo.InvariantCulture)); b.AppendLine("StartFragment:" + startFragment.ToString("d8", CultureInfo.InvariantCulture));

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs

@ -73,9 +73,7 @@ namespace ICSharpCode.AvalonEdit.Search
void ExecuteFind(object sender, ExecutedRoutedEventArgs e) void ExecuteFind(object sender, ExecutedRoutedEventArgs e)
{ {
if (panel.IsClosed) {
panel.Open(); panel.Open();
}
panel.SearchPattern = TextArea.Selection.GetText(); panel.SearchPattern = TextArea.Selection.GetText();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, (Action)delegate { panel.Reactivate(); }); Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, (Action)delegate { panel.Reactivate(); });
} }

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs

@ -379,10 +379,12 @@ namespace ICSharpCode.AvalonEdit.Search
/// </summary> /// </summary>
public void Open() public void Open()
{ {
if (!IsClosed) return;
var layer = AdornerLayer.GetAdornerLayer(textArea); var layer = AdornerLayer.GetAdornerLayer(textArea);
if (layer != null) if (layer != null)
layer.Add(adorner); layer.Add(adorner);
textArea.TextView.BackgroundRenderers.Add(renderer); textArea.TextView.BackgroundRenderers.Add(renderer);
IsClosed = false;
} }
/// <summary> /// <summary>
@ -391,7 +393,7 @@ namespace ICSharpCode.AvalonEdit.Search
public event EventHandler<SearchOptionsChangedEventArgs> SearchOptionsChanged; public event EventHandler<SearchOptionsChangedEventArgs> SearchOptionsChanged;
/// <summary> /// <summary>
/// Raises the <see cref="SearchOptionsChanged" /> event. /// Raises the <see cref="SearchPanel.SearchOptionsChanged" /> event.
/// </summary> /// </summary>
protected virtual void OnSearchOptionsChanged(SearchOptionsChangedEventArgs e) protected virtual void OnSearchOptionsChanged(SearchOptionsChangedEventArgs e)
{ {

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -588,12 +588,14 @@
icon = "Icons.16x16.PasteIcon" icon = "Icons.16x16.PasteIcon"
loadclasslazy = "false" loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"/> class = "ICSharpCode.SharpDevelop.Project.Commands.PasteProjectBrowserNode"/>
</Condition>
<MenuItem id = "Remove" <MenuItem id = "Remove"
label = "${res:Global.RemoveButtonText}" label = "${res:Global.RemoveButtonText}"
type = "Item" type = "Item"
icon = "Icons.16x16.DeleteIcon" icon = "Icons.16x16.DeleteIcon"
loadclasslazy = "false" loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/> class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteProjectBrowserNode"/>
<Condition name="WriteableProject" action="Disable">
<MenuItem id = "Rename" <MenuItem id = "Rename"
label = "${res:ProjectComponent.ContextMenu.Rename}" label = "${res:ProjectComponent.ContextMenu.Rename}"
shortcut = "F2" shortcut = "F2"

Loading…
Cancel
Save