From 848652310fb310c2ff779680c55a8d22fba99baa Mon Sep 17 00:00:00 2001 From: Sergej Andrejev Date: Tue, 30 Jun 2009 14:17:46 +0000 Subject: [PATCH] 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 --- AddIns/ICSharpCode.SharpDevelop.addin | 19 +- .../ShortcutsManagement.suo | Bin 98304 -> 98816 bytes .../ShortcutsManagement.csproj | 1 - .../Dialogs/ShortcutManagementWindow.xaml.cs | 14 +- .../ShortcutsManagementOptionsPanel.xaml.cs | 3 +- .../ShortcutsManagement/Window1.xaml.cs | 6 +- .../Core/Test/ICSharpCode.Core.Tests.csproj | 1 + .../CommandsService/CommandManager.cs | 19 + .../CommandsService/InputBindingInfo.cs | 9 +- .../Input/InputGestureCollectionExtensions.cs | 39 ++ .../Input/InputGestureExtensions.cs | 173 ++++----- .../Input/MultiKeyGesture.cs | 3 +- ...ICSharpCode.Core.Presentation.Tests.csproj | 56 +++ .../Test/InputGestureTests.cs | 367 ++++++++++++++++++ .../Test/Properties/AssemblyInfo.cs | 31 ++ src/SharpDevelop.Tests.sln | 229 +++++------ 16 files changed, 728 insertions(+), 242 deletions(-) create mode 100644 src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj create mode 100644 src/Main/ICSharpCode.Core.Presentation/Test/InputGestureTests.cs create mode 100644 src/Main/ICSharpCode.Core.Presentation/Test/Properties/AssemblyInfo.cs diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index a5964f2fd2..7faaf23dc5 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -51,22 +51,6 @@ - - - - - - - - - - - - - - - - @@ -1647,10 +1631,9 @@ c*w;3a;r0R4V^s>BZoRT@sTwF%XOy)ETVQLm*w8@+b(RSxSf`q<&x%d3tb9(PR z*X`E2_iDSWBA9TdI4w0+5QG>ajtB&U!O1jc5mSf+qM1OaXxB&3WInL~Z;3(Jg|{?G z1~p(e=~{_)X;VaRR?5Jk!Rw$Q*(CRcChfZ5X*grYaq@Quqk4f*cZ-+B7PPZ=>?#eP73*&FcQC> z%`!a+JPxY*??^5q4CC}6B**htkt;w)6$H&BGRI~}Mw_HVXH>B+k~HdH9Mx*uNqQc| zhoVf{k+O~Pc2PP;NpO?d0)g(Tjo?Ytd2AA%Sg7avh0nobm3-N^fJN3q40FE+CQZfL zC7vwFlOuUcLG;KXcJ##Xn39JY4tYVq;IbXigFBZ0q8~nl^sxnSXZ~-Yc%^7Dx>q^D z%>P>zCV6V4_A)2L^AF3`0R9wZ!>8{&lD^+>U&rs+&Ec#w5-Lzml(?h5Lyudg7NUGu z<}Ev28f-t8hjJhe9rZ?D@7yd(N$>Bugm+z?ayexkyN4@Dev8N%ryn5s3DGc4&wIDa z5)Rz9a_gSo0c9-WMMru7Q)+V1SZm^|-9GRPiN3uPLbNXq2NO09a^nI21oY)*^X!+` z0L6#<(chYaTdv1p->F&Lf7Gs%(kRR5VQ}Y(zrv)eKb{=oWoPTdus<>m+qRp-1d+T( ze)!SR>G)-|kuOlfMLnpeJe@3~OQ7@o8oVOS;ZM&SvQTWO!M+PicxQSA`22rpAq0IyiQ_C^giP4Swu&%qj+Zp2h%-bF@fC57I8CTG{Trf-$RoN5 zAG<0-(qtD+FA{3>mggVFtx5#n~ARxGlxT zddopZ+kBZ7Z-7|k&Gpa^`ej0aFqbIsmVwCHN})+@{#&<8_fGc{{Wy zEluDG@#;Xr^^0AKD+OA>YXH%x9d3HzAN64oqJ$Rg%SdC#qrs%yNr3axzbA#hM6FfPel=ch5EKQ#R@|k^>$M zJ2G;->$TC2&MD5t8>@AAWTkQ9_;;(X8rF@e0z)$gnPV*=_7}#mGbY$G#;86i%qWG zOTme4cZ~eS-#fwENQY*c2Z`A6K!^SJQ~9O)%c-cDPyhe` delta 1969 zcma*odvHuw90&08yL+=qWV2Qf!6K7HywW6scr?u{5mJIAOze2HONn|##0D|MR?~X5 z%Kl7ltJ5+&y73k{xTr@;DC&{6v|cqvO{ddo*)iH;Mz-IZl4<)_@14)R=bqoW=RVHw z-0P_{dpzcvB!$}XOGyAA=Jw-rWI|otBDq8zL0q4k%AQs#KMqM%O(cX&GG8FNEuVz0Rokm* zSOCMtbm10-Vv3j}%24jklOM#(I?EwarV%f(Rw$h#pZR>pKAUXjr5lCY3nGndKG19 z>)=$>riYzl@4noRs%qE<+hGUngk7*3_P}1KfqhU5686IZI0!l%g2QkGK8K@l435JI zsDm%yB%FeJI8CBRoI&ABI1A_CJbVQg;38at%g_K{!#D6PT!HKG9efYhz<8<~*x!U( z@Wb=E#tla(Gy>i>Pu98X{xWMQk!~}vPy}O36<7o`LifnS0yI4_!w|C9qTMM^Z z_MwMJF!G159E@#aB+h53r~%`#jex9MEkev&w;j5^{IRsH4zyrzpIn(+v7cD^Wfce3#c|2G7;dOemVqi~nA#0}H{ZH+ zZ@wL&uB@5imW4ZKMRc7lijn^du;z(UF;A4>s1$RfT=c+c6QDb0$GrP(LwX=Kh2N^` z#+%yOWV#-y@F}%7yAO|1s4Jg1l_DPUgybnHnt;Ho}otD{? z`sow2JAVL$k+bWoM1e z(;RP*SGO&rVpCI5LowhlAjLOG(e~P?Uaz-O230vJM>T#3&DpBEoivWrR{yL^F@7N* zDcE4iLdwp?It6JwO^n8VE)w`(3lF~5iF@a){pWk%7)-7v}clxyoFDMRx_ki%~y zrTW4^Qv5DbqQyY`mj;Ms=&yI$e+H(Vh3-)3^Rdz~R#wWIiK&w;M&b_2u{VA)3viJ# z)EcFUB2`Srv`QAEaM#nsOni4|B2tQ&z`Zw5wKtol8e;#ix4*9^#4z+Q6Yrq}S9BwV ojk0l-VlhL!ifs|DnvCDyyr%ec#QagD`e%{FAB_iI3^8Q>3xirQs{jB1 diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj index a77feedad9..3e4054d68e 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj @@ -126,7 +126,6 @@ Window1.xaml Code - diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutManagementWindow.xaml.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutManagementWindow.xaml.cs index 972f5bd36f..f80c514ab5 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutManagementWindow.xaml.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutManagementWindow.xaml.cs @@ -84,22 +84,12 @@ namespace ICSharpCode.ShortcutsManagement.Dialogs /// 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(); diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs index ee82e22cb9..d4bc4ac9c0 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/ShortcutsManagementOptionsPanel.xaml.cs @@ -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 { // 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 // 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); diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Window1.xaml.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Window1.xaml.cs index 2f9419fa07..abd791b913 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Window1.xaml.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Window1.xaml.cs @@ -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"))); diff --git a/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj b/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj index 450dae3f57..d9a183b395 100644 --- a/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj +++ b/src/Main/Core/Test/ICSharpCode.Core.Tests.csproj @@ -21,6 +21,7 @@ False AnyCPU false + C:\Documents and Settings\Administrator\Application Data\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis true diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs index c1f0f56e87..4a9500cb1b 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/CommandManager.cs @@ -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(); + } + } + /// /// Remove command binding associated with type /// diff --git a/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs b/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs index b692519077..4a9b528022 100644 --- a/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs +++ b/src/Main/ICSharpCode.Core.Presentation/CommandsService/InputBindingInfo.cs @@ -18,6 +18,7 @@ namespace ICSharpCode.Core.Presentation IsModifyed = true; OldInputBindings = new InputBindingCollection(); NewInputBindings = new InputBindingCollection(); + Gestures = new InputGestureCollection(); Categories = new List(); } @@ -137,10 +138,6 @@ namespace ICSharpCode.Core.Presentation /// public InputGestureCollection Gestures { get { - if(_gestures == null) { - return new InputGestureCollection(); - } - return _gestures; } set { @@ -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 OwnerInstance.InputBindings.AddRange(NewInputBindings); + CommandManager.OrderInstanceInputBindingsByChords(OwnerInstance); + IsModifyed = false; } }; diff --git a/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureCollectionExtensions.cs b/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureCollectionExtensions.cs index 0b305596bf..75fdad34b4 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureCollectionExtensions.cs +++ b/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureCollectionExtensions.cs @@ -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 return false; } + + /// + /// Sort key gestures within input gesture collection by length and type + /// Shorter gestures should be first so they could be matched first. + /// + 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); + } + } } } diff --git a/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureExtensions.cs b/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureExtensions.cs index 80133e79e9..7b0f87ba7e 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureExtensions.cs +++ b/src/Main/ICSharpCode.Core.Presentation/Input/InputGestureExtensions.cs @@ -14,12 +14,9 @@ namespace ICSharpCode.Core.Presentation { public enum GestureCompareMode { - /// - /// Match is successful if template gesture strictly matches compared gesture - /// - StrictlyMatches, - ExactlyMatches, + + Conflicting, /// /// Match is successfull if template gesture partly matches compared geture. @@ -27,10 +24,15 @@ namespace ICSharpCode.Core.Presentation /// PartlyMatches, + PartlyMatchesFullChords, + + /// /// match is successfull if matched gesture starts with provided template /// - StartsWith + StartsWith, + + StartsWithFullChords, } /// @@ -48,6 +50,12 @@ namespace ICSharpCode.Core.Presentation /// Returns true if template matches compared geture 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,109 +63,92 @@ 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(); + + // 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 { partialKeyGestureTemplate }); - } - else - { - partialKeyGestureTemplate = new PartialKeyGesture(keyGestureTemplate); - multiKeyGestureTemplate = new MultiKeyGesture(new List {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(); - - // 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) - { - previousChords.RemoveFirst(); - } + // Compare two chord sequences in a loop + var multiKeyGesturesMatch = true; - // Only start comparing with template when needed amount of previous chords where collected - if (previousChords.Count == multiKeyGestureTemplate.Chords.Count) + var i = 0; + while (previousChordsEnumerator.MoveNext() && multiKeyGestureTemplateEnumerator.MoveNext()) { - var multiKeyGestureTemplateEnumerator = multiKeyGestureTemplate.Chords.GetEnumerator(); - var previousChordsEnumerator = previousChords.GetEnumerator(); - - multiKeyGestureTemplateEnumerator.Reset(); - - // Compare two chord sequences in a loop - var multiKeyGesturesMatch = true; + var template = multiKeyGestureTemplateEnumerator.Current; + var gesture = previousChordsEnumerator.Current; - 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 - 1) + || (mode == GestureCompareMode.PartlyMatches && i == 0)) { - 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(!((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) - { + break; + } + } 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 (mode == GestureCompareMode.PartlyMatches || mode == GestureCompareMode.StartsWith) - { - return (templateModifiers == ModifierKeys.None || templateModifiers == gestureModifiers) - && (templateKey == Key.None || templateKey == gestureKey); - } + if(multiKeyGesturesMatch) + { + return true; + } - return templateModifiers == gestureModifiers && templateKey == gestureKey; + if (mode == GestureCompareMode.StartsWith || mode == GestureCompareMode.StartsWithFullChords) + { + break; + } + } } - + return false; } diff --git a/src/Main/ICSharpCode.Core.Presentation/Input/MultiKeyGesture.cs b/src/Main/ICSharpCode.Core.Presentation/Input/MultiKeyGesture.cs index 9021219a17..f11096c47c 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Input/MultiKeyGesture.cs +++ b/src/Main/ICSharpCode.Core.Presentation/Input/MultiKeyGesture.cs @@ -97,12 +97,13 @@ 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; } diff --git a/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj b/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj new file mode 100644 index 0000000000..2336af5b48 --- /dev/null +++ b/src/Main/ICSharpCode.Core.Presentation/Test/ICSharpCode.Core.Presentation.Tests.csproj @@ -0,0 +1,56 @@ + + + {18FD5FC0-C57D-4A8F-8972-AC467B4FE83E} + Debug + AnyCPU + Library + ICSharpCode.Core.Presentation.Tests + ICSharpCode.Core.Presentation.Tests + v3.5 + Properties + C:\Documents and Settings\Administrator\Application Data\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis + + + bin\Debug\ + True + Full + False + True + DEBUG;TRACE + + + bin\Release\ + False + None + True + False + TRACE + + + + + ..\..\..\Tools\NUnit\nunit.framework.dll + + + 3.0 + + + + 3.5 + + + + 3.5 + + + + + + + + + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} + ICSharpCode.Core.Presentation + + + \ No newline at end of file diff --git a/src/Main/ICSharpCode.Core.Presentation/Test/InputGestureTests.cs b/src/Main/ICSharpCode.Core.Presentation/Test/InputGestureTests.cs new file mode 100644 index 0000000000..610571968d --- /dev/null +++ b/src/Main/ICSharpCode.Core.Presentation/Test/InputGestureTests.cs @@ -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 +{ + /// + /// Description of InputGestureTests. + /// + [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)); + } + } +} diff --git a/src/Main/ICSharpCode.Core.Presentation/Test/Properties/AssemblyInfo.cs b/src/Main/ICSharpCode.Core.Presentation/Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..eec2463629 --- /dev/null +++ b/src/Main/ICSharpCode.Core.Presentation/Test/Properties/AssemblyInfo.cs @@ -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.*")] diff --git a/src/SharpDevelop.Tests.sln b/src/SharpDevelop.Tests.sln index 6a65422a5b..b797ce1732 100644 --- a/src/SharpDevelop.Tests.sln +++ b/src/SharpDevelop.Tests.sln @@ -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 {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