Browse Source

Order input bindings in such way so that if shorter gesture (this is about multi-key gestures) is matched all longer gestures wouldn't execute if additional chords are entered.

IsTemplateFor method fixes and unit tests

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/shortcuts@4375 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts^2
Sergej Andrejev 16 years ago
parent
commit
848652310f
  1. 19
      AddIns/ICSharpCode.SharpDevelop.addin
  2. BIN
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo
  3. 1
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj
  4. 14
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutManagementWindow.xaml.cs
  5. 3
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs
  6. 6
      src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Window1.xaml.cs
  7. 1
      src/Main/Core/Test/ICSharpCode.Core.Tests.csproj
  8. 19
      src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs
  9. 9
      src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs
  10. 39
      src/Main/ICSharpCode.Core.Presentation/Input/InputGestureCollectionExtensions.cs
  11. 169
      src/Main/ICSharpCode.Core.Presentation/Input/InputGestureExtensions.cs
  12. 3
      src/Main/ICSharpCode.Core.Presentation/Input/MultiKeyGesture.cs
  13. 56
      src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj
  14. 367
      src/Main/ICSharpCode.Core.Presentation/Test/InputGestureTests.cs
  15. 31
      src/Main/ICSharpCode.Core.Presentation/Test/Properties/AssemblyInfo.cs
  16. 229
      src/SharpDevelop.Tests.sln

19
AddIns/ICSharpCode.SharpDevelop.addin

@ -51,22 +51,6 @@ @@ -51,22 +51,6 @@
<Import assembly=":ICSharpCode.TextEditor"/>
</Runtime>
<Path name="/SharpDevelop/Categories">
<Category id="Debug" text="Debug" />
<Categoru id="MainMenu" text="Main menu">
<Category id="File" text="File" />
<Category id="Edit" text="Edit" />
<Category id="Project" text="Project" />
<Category id="Build" text="Build" />
<Category id="Debug" text="Debug" />
<Category id="Search" text="Search" />
<Category id="QualityTools" text="Quality Tools" />
<Category id="XML" text="XML" />
<Category id="Tools" text="Tools" />
<Category id="Window" text="Window" />
</Categoru>
</Path>
<Path name="/SharpDevelop/MenuLocations">
<MenuRoot path="/SharpDevelop/Workbench/MainMenu" name="Main Menu" />
@ -1647,10 +1631,9 @@ @@ -1647,10 +1631,9 @@
</Or>
<MenuItem id = "Build"
label = "${res:XML.MainMenu.BuildMenu.BuildSolution}"
shortcut = "F8"
icon = "Icons.16x16.BuildCombine"
class = "ICSharpCode.SharpDevelop.Project.Commands.Build"
command = "SDBuildCommands.BuildSolution"
category = "Test/Test"
/>
<MenuItem id = "Rebuild"
label = "${res:XML.MainMenu.BuildMenu.RebuildSolution}"

BIN
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo

Binary file not shown.

1
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj

@ -126,7 +126,6 @@ @@ -126,7 +126,6 @@
<DependentUpon>Window1.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Content Include="ShortcutsManagement.cd" />
</ItemGroup>
<ItemGroup>
<Compile Include="Src\Converters\BoolToVisibilityConverter.cs" />

14
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutManagementWindow.xaml.cs

@ -84,22 +84,12 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs @@ -84,22 +84,12 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs
/// </summary>
private void FilterSimilarShortcuts()
{
var templates = new InputGestureCollection();
foreach (var gesture in shortcutCopy.Gestures) {
var multiKeyGestureTemplate = gesture as MultiKeyGesture;
if (multiKeyGestureTemplate != null) {
if (multiKeyGestureTemplate.Chords != null && multiKeyGestureTemplate.Chords.Count > 0) {
templates.Add(multiKeyGestureTemplate.Chords.FirstOrDefault());
}
} else {
templates.Add(gesture);
}
}
var templates = new InputGestureCollection(shortcutCopy.Gestures);
// Find shortcuts with same gesture and hide them.
// Also hide modified shortcut from this list
var finder = new ShortcutsFinder(rootEntriesCopy);
finder.FilterGesture(templates, GestureCompareMode.StartsWith);
finder.FilterGesture(templates, GestureCompareMode.Conflicting);
finder.HideShortcut(shortcutCopy);
shortcutsManagementOptionsPanel.ExpandAll();

3
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs

@ -93,6 +93,7 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs @@ -93,6 +93,7 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs
{
// Create parent category section if it's not created yet
var parentCategoryName = StringParser.Parse(currentBindingCategory.ParentCategory.Name);
parentCategoryName = Regex.Replace(parentCategoryName, @"&([^\s])", @"$1");
parentCategorySection = new ShortcutCategory(parentCategoryName);
categoriesMap.Add(currentBindingCategory.ParentCategory, parentCategorySection);
@ -236,6 +237,7 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs @@ -236,6 +237,7 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs
{
// Create parent category section if it's not created yet
var parentCategoryName = StringParser.Parse(currentBindingCategory.ParentCategory.Name);
parentCategoryName = Regex.Replace(parentCategoryName, @"&([^\s])", @"$1");
parentCategorySection = new ShortcutCategory(parentCategoryName);
categoriesMap[addinSection].Add(currentBindingCategory.ParentCategory, parentCategorySection);
@ -279,7 +281,6 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs @@ -279,7 +281,6 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs
// Some commands have "&" sign to mark alternative key used to call this command from menu
// Strip this sign from shortcut entry text
shortcutText = Regex.Replace(shortcutText, @"&([^\s])", @"$1");
var shortcut = new Shortcut(shortcutText, inputBindingInfo.Gestures);

6
src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Window1.xaml.cs

@ -22,9 +22,9 @@ namespace ICSharpCode.ShortcutsManagement @@ -22,9 +22,9 @@ namespace ICSharpCode.ShortcutsManagement
var addin1 = new AddInSection("SharpDevelop");
rootEntries.Add(addin1);
addin1.Categories.Add(new ShortcutCategory("Editing"));
addin1.Categories[0].Shortcuts.Add(new Shortcut("MultiKey", GetGestures("Ctrl+C, Ctrl+K")));
addin1.Categories[0].Shortcuts.Add(new Shortcut("Copy", GetGestures("Ctrl + C")));
addin1.Categories[0].Shortcuts.Add(new Shortcut("Paste", GetGestures("Ctrl + C ; Ctrl+Insert")));
addin1.Categories[0].Shortcuts.Add(new Shortcut("MultiKey", GetGestures("Ctrl+N, Ctrl+F")));
addin1.Categories[0].Shortcuts.Add(new Shortcut("Copy", GetGestures("")));
addin1.Categories[0].Shortcuts.Add(new Shortcut("Paste", GetGestures("Ctrl + N, Ctrl+S")));
//addin1.Categories[0].Shortcuts.Add(new Shortcut("Cut", GetGestures("Ctrl + X")));
//addin1.Categories[0].Shortcuts.Add(new Shortcut("Undo", GetGestures("Ctrl + Z")));

1
src/Main/Core/Test/ICSharpCode.Core.Tests.csproj

@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
<RegisterForComInterop>False</RegisterForComInterop>
<PlatformTarget>AnyCPU</PlatformTarget>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<SourceAnalysisOverrideSettingsFile>C:\Documents and Settings\Administrator\Application Data\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>

19
src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs

@ -340,6 +340,25 @@ namespace ICSharpCode.Core.Presentation @@ -340,6 +340,25 @@ namespace ICSharpCode.Core.Presentation
}
}
internal static void OrderClassInputBindingsByChords(Type ownerType)
{
var fieldInfo = typeof(System.Windows.Input.CommandManager).GetField("_classInputBindings", BindingFlags.Static | BindingFlags.NonPublic);
var fieldData = (HybridDictionary)fieldInfo.GetValue(null);
var classInputBindings = (InputBindingCollection)fieldData[ownerType];
if(classInputBindings != null) {
classInputBindings.SortByChords();
}
}
internal static void OrderInstanceInputBindingsByChords(UIElement ownerType)
{
if(ownerType.InputBindings != null) {
ownerType.InputBindings.SortByChords();
}
}
/// <summary>
/// Remove command binding associated with type
/// </summary>

9
src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs

@ -18,6 +18,7 @@ namespace ICSharpCode.Core.Presentation @@ -18,6 +18,7 @@ namespace ICSharpCode.Core.Presentation
IsModifyed = true;
OldInputBindings = new InputBindingCollection();
NewInputBindings = new InputBindingCollection();
Gestures = new InputGestureCollection();
Categories = new List<InputBindingCategory>();
}
@ -137,10 +138,6 @@ namespace ICSharpCode.Core.Presentation @@ -137,10 +138,6 @@ namespace ICSharpCode.Core.Presentation
/// </summary>
public InputGestureCollection Gestures {
get {
if(_gestures == null) {
return new InputGestureCollection();
}
return _gestures;
}
set {
@ -217,6 +214,8 @@ namespace ICSharpCode.Core.Presentation @@ -217,6 +214,8 @@ namespace ICSharpCode.Core.Presentation
System.Windows.Input.CommandManager.RegisterClassInputBinding(OwnerType, binding);
}
CommandManager.OrderClassInputBindingsByChords(OwnerType);
IsModifyed = false;
}
};
@ -231,6 +230,8 @@ namespace ICSharpCode.Core.Presentation @@ -231,6 +230,8 @@ namespace ICSharpCode.Core.Presentation
OwnerInstance.InputBindings.AddRange(NewInputBindings);
CommandManager.OrderInstanceInputBindingsByChords(OwnerInstance);
IsModifyed = false;
}
};

39
src/Main/ICSharpCode.Core.Presentation/Input/InputGestureCollectionExtensions.cs

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
using System;
using System.Windows.Input;
using System.Linq;
using System.Collections;
namespace ICSharpCode.Core.Presentation
{
@ -28,5 +30,42 @@ namespace ICSharpCode.Core.Presentation @@ -28,5 +30,42 @@ namespace ICSharpCode.Core.Presentation
return false;
}
/// <summary>
/// Sort key gestures within input gesture collection by length and type
/// Shorter gestures should be first so they could be matched first.
/// </summary>
public static void SortByChords(this InputBindingCollection inputGestureCollection)
{
ArrayList.Adapter(inputGestureCollection).Sort(new ChordsCountComparer());
}
private class ChordsCountComparer : IComparer
{
public int Compare(object x, object y)
{
var xInputBinding = (InputBinding)x;
var yInputBinding = (InputBinding)y;
var xMultiKeyGesture = xInputBinding.Gesture as MultiKeyGesture;
var yMultiKeyGesture = yInputBinding.Gesture as MultiKeyGesture;
var xLength = 0;
if(xMultiKeyGesture != null) {
xLength = xMultiKeyGesture.Chords != null ? xMultiKeyGesture.Chords.Count : 0;
} else if(xInputBinding.Gesture is KeyGesture) {
xLength = 1;
}
var yLength = 0;
if(yMultiKeyGesture != null) {
yLength = yMultiKeyGesture.Chords != null ? yMultiKeyGesture.Chords.Count : 0;
} else if(yInputBinding.Gesture is KeyGesture) {
yLength = 1;
}
return xLength.CompareTo(yLength);
}
}
}
}

169
src/Main/ICSharpCode.Core.Presentation/Input/InputGestureExtensions.cs

@ -14,23 +14,25 @@ namespace ICSharpCode.Core.Presentation @@ -14,23 +14,25 @@ namespace ICSharpCode.Core.Presentation
{
public enum GestureCompareMode
{
/// <summary>
/// Match is successful if template gesture strictly matches compared gesture
/// </summary>
StrictlyMatches,
ExactlyMatches,
Conflicting,
/// <summary>
/// Match is successfull if template gesture partly matches compared geture.
/// Template is found in any place within matched gesture
/// </summary>
PartlyMatches,
PartlyMatchesFullChords,
/// <summary>
/// match is successfull if matched gesture starts with provided template
/// </summary>
StartsWith
StartsWith,
StartsWithFullChords,
}
/// <summary>
@ -48,6 +50,12 @@ namespace ICSharpCode.Core.Presentation @@ -48,6 +50,12 @@ namespace ICSharpCode.Core.Presentation
/// <returns>Returns true if template matches compared geture</returns>
public static bool IsTemplateFor(this InputGesture inputGestureTemplate, InputGesture inputGesture, GestureCompareMode mode)
{
if(mode == GestureCompareMode.Conflicting) {
return
inputGestureTemplate.IsTemplateFor(inputGesture, GestureCompareMode.StartsWithFullChords)
|| inputGesture.IsTemplateFor(inputGestureTemplate, GestureCompareMode.StartsWithFullChords);
}
var multiKeyGesture = inputGesture as MultiKeyGesture;
var multiKeyGestureTemplate = inputGestureTemplate as MultiKeyGesture;
var partialKeyGesture = inputGesture as PartialKeyGesture;
@ -55,107 +63,90 @@ namespace ICSharpCode.Core.Presentation @@ -55,107 +63,90 @@ namespace ICSharpCode.Core.Presentation
var keyGesture = inputGesture as KeyGesture;
var keyGestureTemplate = inputGestureTemplate as KeyGesture;
// If multi key gesture is matched to a template
if (multiKeyGesture != null && keyGestureTemplate != null)
// Create partial key gestures from key gestures
if(multiKeyGesture == null && partialKeyGesture == null && keyGesture != null) {
partialKeyGesture = new PartialKeyGesture(keyGesture);
}
if(multiKeyGestureTemplate == null && partialKeyGestureTemplate == null && keyGestureTemplate != null) {
partialKeyGestureTemplate = new PartialKeyGesture(keyGestureTemplate);
}
// Create multi key gestures from gestures
if(multiKeyGesture == null && partialKeyGesture != null) {
multiKeyGesture = new MultiKeyGesture(new [] { partialKeyGesture });
}
if(multiKeyGestureTemplate == null && partialKeyGestureTemplate != null) {
multiKeyGestureTemplate = new MultiKeyGesture(new [] { partialKeyGestureTemplate });
}
if(multiKeyGesture == null
|| multiKeyGestureTemplate == null
|| multiKeyGesture.Chords == null
|| multiKeyGestureTemplate.Chords == null
|| multiKeyGestureTemplate.Chords.Count == 0
|| multiKeyGesture.Chords.Count == 0
|| (mode == GestureCompareMode.ExactlyMatches && multiKeyGestureTemplate.Chords.Count != multiKeyGesture.Chords.Count)) {
return false;
}
// Stores N previous chords
var previousChords = new LinkedList<PartialKeyGesture>();
// Search whether chord sequece matches template sequenc in any place
foreach (PartialKeyGesture chord in multiKeyGesture.Chords)
{
// Make a multi key gesture template out of single key gesture template
if(multiKeyGestureTemplate == null)
// Accumulates previous chords
previousChords.AddLast(chord);
if (previousChords.Count > multiKeyGestureTemplate.Chords.Count)
{
if (partialKeyGestureTemplate != null)
{
multiKeyGestureTemplate = new MultiKeyGesture(new List<PartialKeyGesture> { partialKeyGestureTemplate });
}
else
{
partialKeyGestureTemplate = new PartialKeyGesture(keyGestureTemplate);
multiKeyGestureTemplate = new MultiKeyGesture(new List<PartialKeyGesture> {partialKeyGestureTemplate});
}
previousChords.RemoveFirst();
}
// Check for common missmatches
if(multiKeyGestureTemplate.Chords == null
|| multiKeyGesture.Chords == null
|| multiKeyGestureTemplate.Chords.Count == 0
|| multiKeyGesture.Chords.Count == 0
|| multiKeyGestureTemplate.Chords.Count > multiKeyGesture.Chords.Count)
// Only start comparing with template when needed amount of previous chords where collected
if (previousChords.Count == multiKeyGestureTemplate.Chords.Count)
{
return false;
}
var multiKeyGestureTemplateEnumerator = multiKeyGestureTemplate.Chords.GetEnumerator();
var previousChordsEnumerator = previousChords.GetEnumerator();
if (mode == GestureCompareMode.ExactlyMatches && multiKeyGestureTemplate.Chords.Count != multiKeyGesture.Chords.Count)
{
return false;
}
multiKeyGestureTemplateEnumerator.Reset();
// Stores N previous chords
var previousChords = new LinkedList<PartialKeyGesture>();
// Compare two chord sequences in a loop
var multiKeyGesturesMatch = true;
// Search whether chord sequece matches template sequenc in any place
foreach (PartialKeyGesture chord in multiKeyGesture.Chords)
{
// Accumulates previous chords
previousChords.AddLast(chord);
if (previousChords.Count > multiKeyGestureTemplate.Chords.Count)
var i = 0;
while (previousChordsEnumerator.MoveNext() && multiKeyGestureTemplateEnumerator.MoveNext())
{
previousChords.RemoveFirst();
}
var template = multiKeyGestureTemplateEnumerator.Current;
var gesture = previousChordsEnumerator.Current;
// Only start comparing with template when needed amount of previous chords where collected
if (previousChords.Count == multiKeyGestureTemplate.Chords.Count)
{
var multiKeyGestureTemplateEnumerator = multiKeyGestureTemplate.Chords.GetEnumerator();
var previousChordsEnumerator = previousChords.GetEnumerator();
multiKeyGestureTemplateEnumerator.Reset();
// Compare two chord sequences in a loop
var multiKeyGesturesMatch = true;
var i = 0;
while (previousChordsEnumerator.MoveNext() && multiKeyGestureTemplateEnumerator.MoveNext())
{
var templateGesture = multiKeyGestureTemplateEnumerator.Current;
var gesture = previousChordsEnumerator.Current;
if (((mode == GestureCompareMode.StartsWith || mode == GestureCompareMode.PartlyMatches) && i == previousChords.Count)
|| (mode == GestureCompareMode.PartlyMatches && i == 0)) {
if(!templateGesture.IsTemplateFor(gesture, GestureCompareMode.PartlyMatches)) {
multiKeyGesturesMatch = false;
break;
}
} else if (templateGesture.Modifiers != gesture.Modifiers || templateGesture.Key != gesture.Key) {
if (((mode == GestureCompareMode.StartsWith || mode == GestureCompareMode.PartlyMatches) && i == previousChords.Count - 1)
|| (mode == GestureCompareMode.PartlyMatches && i == 0)) {
if(!((template.Modifiers == ModifierKeys.None || gesture.Modifiers - (gesture.Modifiers ^ template.Modifiers) >= 0)
&& (template.Key == Key.None || template.Key == gesture.Key))) {
multiKeyGesturesMatch = false;
break;
}
}
if(multiKeyGesturesMatch)
{
return true;
}
if (mode == GestureCompareMode.StartsWith)
{
}
} else if (template.Modifiers != gesture.Modifiers || template.Key != gesture.Key) {
multiKeyGesturesMatch = false;
break;
}
i++;
}
}
}
else if (multiKeyGestureTemplate == null && keyGesture != null && keyGestureTemplate != null)
{
var gestureModifiers = partialKeyGesture != null ? partialKeyGesture.Modifiers : keyGesture.Modifiers;
var gestureKey = partialKeyGesture != null ? partialKeyGesture.Key : keyGesture.Key;
var templateModifiers = partialKeyGestureTemplate != null ? partialKeyGestureTemplate.Modifiers : keyGestureTemplate.Modifiers;
var templateKey = partialKeyGestureTemplate != null ? partialKeyGestureTemplate.Key : keyGestureTemplate.Key;
if(multiKeyGesturesMatch)
{
return true;
}
if (mode == GestureCompareMode.PartlyMatches || mode == GestureCompareMode.StartsWith)
{
return (templateModifiers == ModifierKeys.None || templateModifiers == gestureModifiers)
&& (templateKey == Key.None || templateKey == gestureKey);
if (mode == GestureCompareMode.StartsWith || mode == GestureCompareMode.StartsWithFullChords)
{
break;
}
}
return templateModifiers == gestureModifiers && templateKey == gestureKey;
}
return false;

3
src/Main/ICSharpCode.Core.Presentation/Input/MultiKeyGesture.cs

@ -98,11 +98,12 @@ namespace ICSharpCode.Core.Presentation @@ -98,11 +98,12 @@ namespace ICSharpCode.Core.Presentation
currentGestureIndex++;
lastGestureInput = DateTime.Now;
inputEventArgs.Handled = true;
// Check whether this is last gesture in sequence
if(currentGestureIndex == chords.Count)
{
ResetAllGestures();
inputEventArgs.Handled = true;
return true;
}

56
src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.Core.Presentation.Tests</RootNamespace>
<AssemblyName>ICSharpCode.Core.Presentation.Tests</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<AppDesignerFolder>Properties</AppDesignerFolder>
<SourceAnalysisOverrideSettingsFile>C:\Documents and Settings\Administrator\Application Data\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin\Debug\</OutputPath>
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\Release\</OutputPath>
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>True</Optimize>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<ItemGroup>
<Reference Include="nunit.framework">
<HintPath>..\..\..\Tools\NUnit\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="InputGestureTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.Core.Presentation.csproj">
<Project>{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}</Project>
<Name>ICSharpCode.Core.Presentation</Name>
</ProjectReference>
</ItemGroup>
</Project>

367
src/Main/ICSharpCode.Core.Presentation/Test/InputGestureTests.cs

@ -0,0 +1,367 @@ @@ -0,0 +1,367 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Input;
using NUnit.Framework;
using ICSharpCode.Core.Presentation;
namespace ICSharpCode.Core.Presentation.Tests
{
/// <summary>
/// Description of InputGestureTests.
/// </summary>
[TestFixture]
public class InputGestureTest
{
public MultiKeyGestureConverter multiKeyGestureConverter = new MultiKeyGestureConverter();
public PartialKeyGestureConverter partialKeyGestureConverter = new PartialKeyGestureConverter();
public KeyGestureConverter keyGestureConverter = new KeyGestureConverter();
[Test]
public void MultiKeyGesturesMatchExactlyTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var result1 = template1.IsTemplateFor(original1, GestureCompareMode.ExactlyMatches);
Assert.IsTrue(result1);
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+V");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+V");
var result2 = template2.IsTemplateFor(original2, GestureCompareMode.ExactlyMatches);
Assert.IsTrue(result2);
}
[Test]
public void MultiKeyGesturesDoNotMatchExactlyTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsFalse(template1.IsTemplateFor(original1, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original1.IsTemplateFor(template1, GestureCompareMode.ExactlyMatches));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+V");
Assert.IsFalse(template2.IsTemplateFor(original2, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original2.IsTemplateFor(template2, GestureCompareMode.ExactlyMatches));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsFalse(template3.IsTemplateFor(original3, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original3.IsTemplateFor(template3, GestureCompareMode.ExactlyMatches));
}
[Test]
public void KeyGesturesMatchExactlyTest()
{
var template1 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original1 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsTrue(template1.IsTemplateFor(original1, GestureCompareMode.ExactlyMatches));
Assert.IsTrue(original1.IsTemplateFor(template1, GestureCompareMode.ExactlyMatches));
var template2 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsTrue(template2.IsTemplateFor(original2, GestureCompareMode.ExactlyMatches));
Assert.IsTrue(original2.IsTemplateFor(template2, GestureCompareMode.ExactlyMatches));
var template3 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+E");
var original3 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl+E");
Assert.IsTrue(template3.IsTemplateFor(original3, GestureCompareMode.ExactlyMatches));
Assert.IsTrue(original3.IsTemplateFor(template3, GestureCompareMode.ExactlyMatches));
var template4 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("F");
var original4 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("F");
Assert.IsTrue(template4.IsTemplateFor(original4, GestureCompareMode.ExactlyMatches));
Assert.IsTrue(original4.IsTemplateFor(template4, GestureCompareMode.ExactlyMatches));
var template5 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift");
var original5 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift");
Assert.IsTrue(template5.IsTemplateFor(original5, GestureCompareMode.ExactlyMatches));
Assert.IsTrue(original5.IsTemplateFor(template5, GestureCompareMode.ExactlyMatches));
}
[Test]
public void KeyGesturesDoNotMatchExactlyTest()
{
var template1 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original1 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsFalse(template1.IsTemplateFor(original1, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original1.IsTemplateFor(template1, GestureCompareMode.ExactlyMatches));
var template2 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original2 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Alt+C");
Assert.IsFalse(template2.IsTemplateFor(original2, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original2.IsTemplateFor(template2, GestureCompareMode.ExactlyMatches));
var template3 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+E");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+F");
Assert.IsFalse(template3.IsTemplateFor(original3, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original3.IsTemplateFor(template3, GestureCompareMode.ExactlyMatches));
var template4 = (KeyGesture)keyGestureConverter.ConvertFromInvariantString("Ctrl+E");
var original4 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsFalse(template4.IsTemplateFor(original4, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original4.IsTemplateFor(template4, GestureCompareMode.ExactlyMatches));
var template5 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("F");
var original5 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("D");
Assert.IsFalse(template5.IsTemplateFor(original5, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original5.IsTemplateFor(template5, GestureCompareMode.ExactlyMatches));
var template6 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift");
var original6 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl");
Assert.IsFalse(template6.IsTemplateFor(original6, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original6.IsTemplateFor(template6, GestureCompareMode.ExactlyMatches));
var template7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,C");
var original7 = (PartialKeyGesture)partialKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsFalse(template7.IsTemplateFor(original7, GestureCompareMode.ExactlyMatches));
Assert.IsFalse(original7.IsTemplateFor(template7, GestureCompareMode.ExactlyMatches));
}
[Test]
public void MultiKeyGesturesMatchStartsWithTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsTrue(template1.IsTemplateFor(original1, GestureCompareMode.StartsWith));
Assert.IsTrue(original1.IsTemplateFor(template1, GestureCompareMode.StartsWith));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsTrue(template2.IsTemplateFor(original2, GestureCompareMode.StartsWith));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsTrue(template3.IsTemplateFor(original3, GestureCompareMode.StartsWith));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsTrue(template4.IsTemplateFor(original4, GestureCompareMode.StartsWith));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+D");
Assert.IsTrue(template5.IsTemplateFor(original5, GestureCompareMode.StartsWith));
}
[Test]
public void MultiKeyGesturesDoNotMatchStartsWithTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsFalse(template1.IsTemplateFor(original1, GestureCompareMode.StartsWith));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsFalse(template2.IsTemplateFor(original2, GestureCompareMode.StartsWith));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+E");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template3.IsTemplateFor(original3, GestureCompareMode.StartsWith));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Shift+D");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template4.IsTemplateFor(original4, GestureCompareMode.StartsWith));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,E");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template5.IsTemplateFor(original5, GestureCompareMode.StartsWith));
var template6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Alt+");
var original6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template6.IsTemplateFor(original6, GestureCompareMode.StartsWith));
var template7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("E");
var original7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template7.IsTemplateFor(original7, GestureCompareMode.StartsWith));
var template8 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Alt+");
var original8 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+D");
Assert.IsFalse(template8.IsTemplateFor(original8, GestureCompareMode.StartsWith));
}
[Test]
public void MultiKeyGesturesMatchPartlyTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsTrue(template1.IsTemplateFor(original1, GestureCompareMode.PartlyMatches));
Assert.IsTrue(original1.IsTemplateFor(template1, GestureCompareMode.PartlyMatches));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsTrue(template2.IsTemplateFor(original2, GestureCompareMode.PartlyMatches));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsTrue(template3.IsTemplateFor(original3, GestureCompareMode.PartlyMatches));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("D");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsTrue(template4.IsTemplateFor(original4, GestureCompareMode.PartlyMatches));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsTrue(template5.IsTemplateFor(original5, GestureCompareMode.PartlyMatches));
var template6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("C,Ctrl+");
var original6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsTrue(template6.IsTemplateFor(original6, GestureCompareMode.PartlyMatches));
var template7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D,D");
var original7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsTrue(template7.IsTemplateFor(original7, GestureCompareMode.PartlyMatches));
var template8 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+");
var original8 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+D");
Assert.IsTrue(template8.IsTemplateFor(original8, GestureCompareMode.PartlyMatches));
}
[Test]
public void MultiKeyGesturesDoNotMatchPartlyTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsFalse(template1.IsTemplateFor(original1, GestureCompareMode.PartlyMatches));
Assert.IsFalse(original1.IsTemplateFor(template1, GestureCompareMode.PartlyMatches));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+E");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsFalse(template2.IsTemplateFor(original2, GestureCompareMode.PartlyMatches));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("E");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template4.IsTemplateFor(original4, GestureCompareMode.PartlyMatches));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Alt+");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template5.IsTemplateFor(original5, GestureCompareMode.PartlyMatches));
var template6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("C,Ctrl+,D");
var original6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template6.IsTemplateFor(original6, GestureCompareMode.PartlyMatches));
var template7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Alt+D,D");
var original7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template7.IsTemplateFor(original7, GestureCompareMode.PartlyMatches));
}
[Test]
public void MultiKeyGesturesMatchStartsFullChordWithTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsTrue(template1.IsTemplateFor(original1, GestureCompareMode.StartsWithFullChords));
Assert.IsTrue(original1.IsTemplateFor(template1, GestureCompareMode.StartsWithFullChords));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsTrue(template2.IsTemplateFor(original2, GestureCompareMode.StartsWithFullChords));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsTrue(template3.IsTemplateFor(original3, GestureCompareMode.StartsWithFullChords));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+D");
Assert.IsTrue(template4.IsTemplateFor(original4, GestureCompareMode.StartsWithFullChords));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D,Ctrl+D");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D,Ctrl+D,Ctrl+E");
Assert.IsTrue(template5.IsTemplateFor(original5, GestureCompareMode.StartsWithFullChords));
var template6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D,D");
var original6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D,D,E");
Assert.IsTrue(template6.IsTemplateFor(original6, GestureCompareMode.StartsWithFullChords));
}
[Test]
public void MultiKeyGesturesDoNotMatchStartsWithFullChordTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
Assert.IsFalse(template1.IsTemplateFor(original1, GestureCompareMode.StartsWith));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsFalse(template2.IsTemplateFor(original2, GestureCompareMode.StartsWith));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+E");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template3.IsTemplateFor(original3, GestureCompareMode.StartsWith));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Shift+D");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template4.IsTemplateFor(original4, GestureCompareMode.StartsWith));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,E");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template5.IsTemplateFor(original5, GestureCompareMode.StartsWith));
var template6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Alt+");
var original6 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template6.IsTemplateFor(original6, GestureCompareMode.StartsWith));
var template7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("E");
var original7 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.IsFalse(template7.IsTemplateFor(original7, GestureCompareMode.StartsWith));
var template8 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Alt+");
var original8 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+D");
Assert.IsFalse(template8.IsTemplateFor(original8, GestureCompareMode.StartsWith));
}
[Test]
public void MultiKeyGesturesConflictingTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
Assert.IsTrue(template1.IsTemplateFor(original1, GestureCompareMode.Conflicting));
Assert.IsTrue(original1.IsTemplateFor(template1, GestureCompareMode.Conflicting));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsTrue(template2.IsTemplateFor(original2, GestureCompareMode.Conflicting));
Assert.IsTrue(original2.IsTemplateFor(template2, GestureCompareMode.Conflicting));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsTrue(template3.IsTemplateFor(original3, GestureCompareMode.StartsWith));
Assert.IsTrue(original3.IsTemplateFor(template3, GestureCompareMode.Conflicting));
}
[Test]
public void MultiKeyGesturesAreNotConflictingTest()
{
var template1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original1 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+E");
Assert.IsFalse(template1.IsTemplateFor(original1, GestureCompareMode.Conflicting));
Assert.IsFalse(original1.IsTemplateFor(template1, GestureCompareMode.Conflicting));
var template2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+D");
var original2 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D");
Assert.IsFalse(template2.IsTemplateFor(original2, GestureCompareMode.Conflicting));
Assert.IsFalse(original2.IsTemplateFor(template2, GestureCompareMode.Conflicting));
var template3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+E");
var original3 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+C,Ctrl+D,D");
Assert.IsFalse(template3.IsTemplateFor(original3, GestureCompareMode.StartsWith));
Assert.IsFalse(original3.IsTemplateFor(template3, GestureCompareMode.Conflicting));
var template4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+");
var original4 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,D");
Assert.False(template4.IsTemplateFor(original4, GestureCompareMode.Conflicting));
Assert.False(original4.IsTemplateFor(template4, GestureCompareMode.Conflicting));
var template5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+");
var original5 = (MultiKeyGesture)multiKeyGestureConverter.ConvertFromInvariantString("Ctrl+Shift+D,Ctrl+D");
Assert.IsFalse(template5.IsTemplateFor(original5, GestureCompareMode.Conflicting));
Assert.IsFalse(original5.IsTemplateFor(template5, GestureCompareMode.Conflicting));
}
}
}

31
src/Main/ICSharpCode.Core.Presentation/Test/Properties/AssemblyInfo.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
#region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ICSharpCode.Core.Presentation.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ICSharpCode.Core.Presentation.Tests")]
[assembly: AssemblyCopyright("Copyright 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]

229
src/SharpDevelop.Tests.sln

@ -1,136 +1,138 @@ @@ -1,136 +1,138 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
# SharpDevelop 3.1.0.4151
# SharpDevelop 3.1.0.4077
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{F94FA21D-78E6-410B-895D-E16D3E7240DB}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding.Tests", "AddIns\BackendBindings\CSharpBinding\Tests\CSharpBinding.Tests.csproj", "{52006F3F-3156-45DE-89D8-C4813694FBA4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{5DA95927-5F2D-46D8-9265-D092734B6F0E}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "AddIns\Misc\Debugger\Debugger.Tests\Project\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{5DA95927-5F2D-46D8-9265-D092734B6F0E}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "AddIns\Misc\Debugger\Debugger.Tests\Project\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{F94FA21D-78E6-410B-895D-E16D3E7240DB}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding.Tests", "AddIns\BackendBindings\CSharpBinding\Tests\CSharpBinding.Tests.csproj", "{52006F3F-3156-45DE-89D8-C4813694FBA4}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor.Tests", "Libraries\ICSharpCode.TextEditor\Test\ICSharpCode.TextEditor.Tests.csproj", "{6259D767-BA7C-484D-9472-68F350A20086}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation.Tests", "Main\ICSharpCode.Core.Presentation\Test\ICSharpCode.Core.Presentation.Tests.csproj", "{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E}"
EndProject
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "{970116b0-f96b-4257-8579-986b9cf086f5}"
EndProject
@ -356,66 +358,71 @@ Global @@ -356,66 +358,71 @@ Global
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Any CPU.Build.0 = Release|Any CPU
{52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E}.Release|Any CPU.Build.0 = Release|Any CPU
{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{52006F3F-3156-45DE-89D8-C4813694FBA4} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{F390DA70-1FE1-4715-81A0-389AB010C130} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{461606BD-E824-4D0A-8CBA-01810B1F5E02} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{5DA95927-5F2D-46D8-9265-D092734B6F0E} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{A569DCC1-C608-45FD-B770-4F79335EF154} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{388E7B64-0393-4EB4-A3E3-5C474F141853} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{F94FA21D-78E6-410B-895D-E16D3E7240DB} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{50A89267-A28B-4DF3-8E62-912E005143B8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{0162E499-42D0-409B-AA25-EED21F75336B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{8D732610-8FC6-43BA-94C9-7126FD7FE361} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{833904AB-3CD4-4071-9B48-5770E44685AA} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{23B517C9-1ECC-4419-A13F-0B7136D085CB} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{C9DE556D-325C-4544-B29F-16A9EB7C9830} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{50A89267-A28B-4DF3-8E62-912E005143B8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{F94FA21D-78E6-410B-895D-E16D3E7240DB} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{BF38FB72-B380-4196-AF8C-95749D726C61} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{388E7B64-0393-4EB4-A3E3-5C474F141853} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{A569DCC1-C608-45FD-B770-4F79335EF154} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{5DA95927-5F2D-46D8-9265-D092734B6F0E} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{461606BD-E824-4D0A-8CBA-01810B1F5E02} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{F390DA70-1FE1-4715-81A0-389AB010C130} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{52006F3F-3156-45DE-89D8-C4813694FBA4} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6259D767-BA7C-484D-9472-68F350A20086} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{870115DD-960A-4406-A6B9-600BCDC36A03} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{C9DE556D-325C-4544-B29F-16A9EB7C9830} = {5DA95927-5F2D-46D8-9265-D092734B6F0E}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{23B517C9-1ECC-4419-A13F-0B7136D085CB} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{833904AB-3CD4-4071-9B48-5770E44685AA} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{8D732610-8FC6-43BA-94C9-7126FD7FE361} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {F94FA21D-78E6-410B-895D-E16D3E7240DB}
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{7DB80259-24D4-46C3-A024-53FF1987733D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{4980B743-B32F-4aba-AABD-45E2CAD3568D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{870115DD-960A-4406-A6B9-600BCDC36A03} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6259D767-BA7C-484D-9472-68F350A20086} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{18FD5FC0-C57D-4A8F-8972-AC467B4FE83E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{4980B743-B32F-4aba-AABD-45E2CAD3568D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{7DB80259-24D4-46C3-A024-53FF1987733D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection
EndGlobal

Loading…
Cancel
Save