From 64e6c7b0d576b2e86ca3d41c36f42d2a2bf8ba44 Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Fri, 14 Jan 2022 16:22:15 +0100 Subject: Implement templated Qt translation (.ts) file wizard Change-Id: I0efb2b66c5d7a9e9607b9334bea0212ed8d9cd16 Reviewed-by: Miguel Costa --- .gitignore | 2 + QtVsTools.Package/QtVsTools.Package.csproj | 7 + QtVsTools.Package/source.extension.vsixmanifest_TT | 4 + .../ItemWizard/Translation/TranslationPage.xaml | 163 +++++++++++++++++++++ .../ItemWizard/Translation/TranslationPage.xaml.cs | 76 ++++++++++ .../ItemWizard/Translation/TranslationWizard.cs | 115 +++++++++++++++ QtVsTools.Wizards/QtVsTools.Wizards.csproj | 8 + Templates/translation/Properties/AssemblyInfo.cs | 67 +++++++++ .../translation/QtTemplate.Item.Translation.csproj | 133 +++++++++++++++++ Templates/translation/translation.ico | Bin 0 -> 370070 bytes Templates/translation/translation.ts | 4 + Templates/translation/translation.vstemplate_TT | 69 +++++++++ vstools.sln | 59 +++++--- 13 files changed, 688 insertions(+), 19 deletions(-) create mode 100644 QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml create mode 100644 QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml.cs create mode 100644 QtVsTools.Wizards/ItemWizard/Translation/TranslationWizard.cs create mode 100644 Templates/translation/Properties/AssemblyInfo.cs create mode 100644 Templates/translation/QtTemplate.Item.Translation.csproj create mode 100644 Templates/translation/translation.ico create mode 100644 Templates/translation/translation.ts create mode 100644 Templates/translation/translation.vstemplate_TT diff --git a/.gitignore b/.gitignore index a91868f5..9b2efd8a 100644 --- a/.gitignore +++ b/.gitignore @@ -319,3 +319,5 @@ templates/widgetsclass/Properties/AssemblyInfo.tt.cs templates/widgetsclass/widgetsclass.vstemplate templates/qtclass/Properties/AssemblyInfo.tt.cs templates/qtclass/qtclass.vstemplate +templates/translation/Properties/AssemblyInfo.tt.cs +templates/translation/translation.vstemplate diff --git a/QtVsTools.Package/QtVsTools.Package.csproj b/QtVsTools.Package/QtVsTools.Package.csproj index c99d4be4..016d6b99 100644 --- a/QtVsTools.Package/QtVsTools.Package.csproj +++ b/QtVsTools.Package/QtVsTools.Package.csproj @@ -181,6 +181,13 @@ false TemplateProjectOutputGroup%3b + + {202F4A6D-77CD-4992-AA53-01B585463287} + QtTemplate.Item.Translation + ItemTemplates + false + TemplateProjectOutputGroup%3b + {020422DA-33AB-4495-A439-7DAC2690795C} QtTemplate.Item.WidgetsClass diff --git a/QtVsTools.Package/source.extension.vsixmanifest_TT b/QtVsTools.Package/source.extension.vsixmanifest_TT index 0ade6e5f..57f90b05 100644 --- a/QtVsTools.Package/source.extension.vsixmanifest_TT +++ b/QtVsTools.Package/source.extension.vsixmanifest_TT @@ -202,6 +202,10 @@ Type="Microsoft.VisualStudio.ItemTemplate" d:Source="Project" d:ProjectName="QtClass" d:TargetPath="|QtTemplate.Item.QtClass;TemplateProjectOutputGroup|" Path="ItemTemplates" d:VsixSubPath="ItemTemplates" /> + diff --git a/QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml b/QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml new file mode 100644 index 00000000..b87402d9 --- /dev/null +++ b/QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml.cs b/QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml.cs new file mode 100644 index 00000000..aeb82cef --- /dev/null +++ b/QtVsTools.Wizards/ItemWizard/Translation/TranslationPage.xaml.cs @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt VS Tools. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using QtVsTools.Wizards.Common; + +namespace QtVsTools.Wizards.ItemWizard +{ + public partial class TranslationPage : WizardPage + { + public TranslationPage() + { + InitializeComponent(); + DataContext = this; + Loaded += OnTranslationPageLoaded; + } + + private void OnTranslationPageLoaded(object sender, RoutedEventArgs e) + { + var view = CollectionViewSource.GetDefaultView(LanguageListBox.ItemsSource); + view.Filter = obj => + { + if (string.IsNullOrEmpty(searchBox.Text)) + return true; + + var item = (KeyValuePair)obj; + return item.Value.IndexOf(searchBox.Text, StringComparison.OrdinalIgnoreCase) >= 0; + }; + LanguageListBox.SelectedIndex = 0; + } + + private void OnSearchBoxTextChanged(object sender, TextChangedEventArgs e) + { + CollectionViewSource.GetDefaultView(LanguageListBox.ItemsSource).Refresh(); + if (LanguageListBox.Items.Count == 1 || LanguageListBox.SelectedItem == null) + LanguageListBox.SelectedIndex = 0; + } + + private void OnLanguageBoxSelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (e.RemovedItems != null && (e.AddedItems == null || e.AddedItems.Count == 0)) { + if (LanguageListBox.Items.Count != 0) + LanguageListBox.SelectedIndex = 0; + } + } + } +} diff --git a/QtVsTools.Wizards/ItemWizard/Translation/TranslationWizard.cs b/QtVsTools.Wizards/ItemWizard/Translation/TranslationWizard.cs new file mode 100644 index 00000000..32a44e9b --- /dev/null +++ b/QtVsTools.Wizards/ItemWizard/Translation/TranslationWizard.cs @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt VS Tools. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using EnvDTE; +using QtVsTools.Common; +using QtVsTools.Core; +using QtVsTools.Wizards.Common; +using QtVsTools.Wizards.ProjectWizard; + +namespace QtVsTools.Wizards.ItemWizard +{ + using static EnumExt; + + public sealed class TsWizardData : WizardData + { + public string TsFile { get; set; } + public string CultureInfoName { get; set; } + public List> CultureInfos { get; set; } + } + + public sealed class TranslationWizard : ProjectTemplateWizard + { + protected override Options TemplateType => Options.ConsoleSystem | Options.GUISystem; + + enum NewTranslationItem + { + [String("safeitemname")] SafeItemName, + [String("tsfilename")] TsFileName, + [String("cultureinfoname")] CultureInfoName + } + + WizardData _WizardData; + protected override WizardData WizardData => _WizardData + ?? (_WizardData = new TsWizardData + { + DefaultModules = new List { "QtCore"} + }); + + WizardWindow _WizardWindow; + protected override WizardWindow WizardWindow => _WizardWindow + ?? (_WizardWindow = new WizardWindow(title: "Qt Translation File Wizard") + { + new TranslationPage + { + Data = WizardData, + Header = @"Welcome to the Qt Translation File Wizard", + Message = @"This wizard will add a new Qt empty translation file to your " + + @"project. The wizard creates a .ts for the selected language.", + PreviousButtonEnabled = false, + NextButtonEnabled = false, + FinishButtonEnabled = true, + CancelButtonEnabled = true + }, + }); + + protected override void BeforeWizardRun() + { + var tmp = WizardData as TsWizardData; + tmp.TsFile = Parameter[NewTranslationItem.SafeItemName]; + tmp.CultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures) + .ToDictionary( + mc => mc.Name.Replace("-", "_"), + mc => mc.EnglishName, + StringComparer.OrdinalIgnoreCase + ).OrderBy(item => item.Value).ToList(); + } + + protected override void BeforeTemplateExpansion() + { + var tmp = WizardData as TsWizardData; + Parameter[NewTranslationItem.CultureInfoName] = tmp.CultureInfoName; + Parameter[NewTranslationItem.TsFileName] = tmp.TsFile + "_" + tmp.CultureInfoName + ".ts"; + } + + protected override void Expand() + { + // do not call the base class method here + } + + public override void ProjectItemFinishedGenerating(ProjectItem projectItem) + { + Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread(); + QtProject.AdjustWhitespace(Dte, projectItem.Properties.Item("FullPath").Value.ToString()); + } + } +} diff --git a/QtVsTools.Wizards/QtVsTools.Wizards.csproj b/QtVsTools.Wizards/QtVsTools.Wizards.csproj index 76aabcf8..f518c06b 100644 --- a/QtVsTools.Wizards/QtVsTools.Wizards.csproj +++ b/QtVsTools.Wizards/QtVsTools.Wizards.csproj @@ -124,6 +124,10 @@ + + TranslationPage.xaml + + ConfigPage.xaml @@ -185,6 +189,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Templates/translation/Properties/AssemblyInfo.cs b/Templates/translation/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b46b598f --- /dev/null +++ b/Templates/translation/Properties/AssemblyInfo.cs @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt VS Tools. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************** +<#@output extension="tt.cs" #> +<#@include file="$(SolutionDir)\version.tt" #> +** <#=WARNING_GENERATED_FILE#> +****************************************************************************/ + +using System.Reflection; +using System.Runtime.InteropServices; + +// 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("Translation")] +[assembly: AssemblyDescription("The Qt Visual Studio Tools allow developers to use the standard development environment without having to worry about any Qt-related build steps or tools.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("The Qt Company Ltd.")] +[assembly: AssemblyProduct("Qt Visual Studio Tools")] +[assembly: AssemblyCopyright("Copyright (C) 2016-2022 The Qt Company Ltd.")] +[assembly: AssemblyTrademark("The Qt Company Ltd. Qt and their respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("131278ae-99ef-45c0-8455-423ee8f123dc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("<#=QT_VS_TOOLS_VERSION_ASSEMBLY#>")] +[assembly: AssemblyFileVersion("<#=QT_VS_TOOLS_VERSION_ASSEMBLY_FILE#>")] diff --git a/Templates/translation/QtTemplate.Item.Translation.csproj b/Templates/translation/QtTemplate.Item.Translation.csproj new file mode 100644 index 00000000..c692fa82 --- /dev/null +++ b/Templates/translation/QtTemplate.Item.Translation.csproj @@ -0,0 +1,133 @@ + + + + + $(VisualStudioVersion) + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + translation.ico + + + + Debug + AnyCPU + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {202F4A6D-77CD-4992-AA53-01B585463287} + Library + Properties + Translation + Translation + v4.7.2 + 512 + false + false + false + false + false + false + false + false + false + false + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + + + + + + + + + + TextTemplatingFileGenerator + Properties\AssemblyInfo.tt.cs + $(SolutionDir)\version.tt;$(SolutionDir)\common.tt + AssemblyInfo.tt.cs + + + True + True + AssemblyInfo.cs + + + + + + + + TextTemplatingFileGenerator + translation.vstemplate + $(SolutionDir)\version.tt;$(SolutionDir)\common.tt + translation.vstemplate + + + Designer + Qt + True + True + translation.vstemplate_TT + + + + + + + + + + \ No newline at end of file diff --git a/Templates/translation/translation.ico b/Templates/translation/translation.ico new file mode 100644 index 00000000..1c4fb80d Binary files /dev/null and b/Templates/translation/translation.ico differ diff --git a/Templates/translation/translation.ts b/Templates/translation/translation.ts new file mode 100644 index 00000000..2d374b45 --- /dev/null +++ b/Templates/translation/translation.ts @@ -0,0 +1,4 @@ + + + + diff --git a/Templates/translation/translation.vstemplate_TT b/Templates/translation/translation.vstemplate_TT new file mode 100644 index 00000000..c5bb243a --- /dev/null +++ b/Templates/translation/translation.vstemplate_TT @@ -0,0 +1,69 @@ + + + + + + Qt Translation File + Qt Translation File (.ts) + VC + Translation.ts + true + Enabled + true + translation.ico + Cpp + Windows + Linux + Qt + Desktop + VisualC + QtVsTools + QtVsTools-QTranslation + + + translation.ts + + + + QtVsTools.Wizards.ItemWizard.TranslationWizard + + diff --git a/vstools.sln b/vstools.sln index 873f732e..5b02f7a4 100644 --- a/vstools.sln +++ b/vstools.sln @@ -43,6 +43,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QtTemplate.Item.Resource", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QtTemplate.Project.Server", "Templates\server\QtTemplate.Project.Server.csproj", "{8AE9D385-A379-4F5F-A703-3DF643DA6742}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QtTemplate.Item.Translation", "Templates\translation\QtTemplate.Item.Translation.csproj", "{202F4A6D-77CD-4992-AA53-01B585463287}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QtTemplate.Item.Widget", "Templates\widget\QtTemplate.Item.Widget.csproj", "{40ADFD6A-64EA-4C77-9D4B-3A91D6AB76B4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QtTemplate.Item.WidgetsClass", "Templates\widgetsclass\QtTemplate.Item.WidgetsClass.csproj", "{020422DA-33AB-4495-A439-7DAC2690795C}" @@ -380,6 +382,24 @@ Global {7AF6C34B-65D2-4010-92F6-420E59DDE9BF}.Tests|x64.Build.0 = Release|Any CPU {7AF6C34B-65D2-4010-92F6-420E59DDE9BF}.Tests|x86.ActiveCfg = Release|Any CPU {7AF6C34B-65D2-4010-92F6-420E59DDE9BF}.Tests|x86.Build.0 = Release|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x64.ActiveCfg = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x64.Build.0 = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.ActiveCfg = Debug|x86 + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.Build.0 = Debug|x86 + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|Any CPU.Build.0 = Release|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x64.ActiveCfg = Release|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x64.Build.0 = Release|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.ActiveCfg = Release|x86 + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.Build.0 = Release|x86 + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|Any CPU.ActiveCfg = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|Any CPU.Build.0 = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x64.ActiveCfg = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x64.Build.0 = Debug|Any CPU + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.ActiveCfg = Debug|x86 + {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.Build.0 = Debug|x86 {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16}.Debug|Any CPU.Build.0 = Debug|Any CPU {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -593,24 +613,24 @@ Global {E809DDE3-AE76-4F7A-8DC5-775AC4900138}.Tests|x64.Build.0 = Release|Any CPU {E809DDE3-AE76-4F7A-8DC5-775AC4900138}.Tests|x86.ActiveCfg = Release|Any CPU {E809DDE3-AE76-4F7A-8DC5-775AC4900138}.Tests|x86.Build.0 = Release|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x64.ActiveCfg = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x64.Build.0 = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.ActiveCfg = Debug|x86 - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Debug|x86.Build.0 = Debug|x86 - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|Any CPU.Build.0 = Release|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x64.ActiveCfg = Release|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x64.Build.0 = Release|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.ActiveCfg = Release|x86 - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Release|x86.Build.0 = Release|x86 - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|Any CPU.ActiveCfg = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|Any CPU.Build.0 = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x64.ActiveCfg = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x64.Build.0 = Debug|Any CPU - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.ActiveCfg = Debug|x86 - {4981AAE8-9AC7-4758-87EA-FB2397D6C404}.Tests|x86.Build.0 = Debug|x86 + {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|Any CPU.Build.0 = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x64.ActiveCfg = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x64.Build.0 = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x86.ActiveCfg = Debug|x86 + {202F4A6D-77CD-4992-AA53-01B585463287}.Debug|x86.Build.0 = Debug|x86 + {202F4A6D-77CD-4992-AA53-01B585463287}.Release|Any CPU.ActiveCfg = Release|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Release|Any CPU.Build.0 = Release|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x64.ActiveCfg = Release|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x64.Build.0 = Release|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x86.ActiveCfg = Release|x86 + {202F4A6D-77CD-4992-AA53-01B585463287}.Release|x86.Build.0 = Release|x86 + {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|Any CPU.ActiveCfg = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|Any CPU.Build.0 = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x64.ActiveCfg = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x64.Build.0 = Debug|Any CPU + {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x86.ActiveCfg = Debug|x86 + {202F4A6D-77CD-4992-AA53-01B585463287}.Tests|x86.Build.0 = Debug|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -626,6 +646,7 @@ Global {20055427-1352-44FB-8442-BF7F15F9C59E} = {A7918293-56E9-465A-AE1C-0724576ADD66} {DC1AE91B-45CE-4C5B-8F77-CDB58566038F} = {A7918293-56E9-465A-AE1C-0724576ADD66} {7AF6C34B-65D2-4010-92F6-420E59DDE9BF} = {A7918293-56E9-465A-AE1C-0724576ADD66} + {4981AAE8-9AC7-4758-87EA-FB2397D6C404} = {A7918293-56E9-465A-AE1C-0724576ADD66} {4833E4C7-FFFF-4DA5-A7A5-36C6C3840F16} = {DD307619-BF80-4E5D-AE54-196057187702} {BDA1CD69-624B-4D9D-9B88-ACBEB14AC471} = {A7918293-56E9-465A-AE1C-0724576ADD66} {8AE9D385-A379-4F5F-A703-3DF643DA6742} = {DD307619-BF80-4E5D-AE54-196057187702} @@ -643,7 +664,7 @@ Global {A5320606-37B8-4F15-97E2-16314109CAF9} = {D6FB29A4-8921-46F5-B170-B15538AB4D69} {12857847-9877-466C-B056-DD286A219093} = {D6FB29A4-8921-46F5-B170-B15538AB4D69} {E809DDE3-AE76-4F7A-8DC5-775AC4900138} = {D6FB29A4-8921-46F5-B170-B15538AB4D69} - {4981AAE8-9AC7-4758-87EA-FB2397D6C404} = {A7918293-56E9-465A-AE1C-0724576ADD66} + {202F4A6D-77CD-4992-AA53-01B585463287} = {A7918293-56E9-465A-AE1C-0724576ADD66} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {17FF4AFE-273C-47CD-8D84-F0D023B10BE5} -- cgit v1.2.3