From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Fri, 02 Sep 2022 14:16:56 +0300 Subject: [PATCH] Обновление до версии 2.9.0 --- QtVsTools.Core/ProjectImporter.cs | 112 +++++++++++++++++++++++++++++--------------------------- 1 files changed, 58 insertions(+), 54 deletions(-) diff --git a/QtVsTools.Core/ProjectImporter.cs b/QtVsTools.Core/ProjectImporter.cs index bd5da86..8d14767 100644 --- a/QtVsTools.Core/ProjectImporter.cs +++ b/QtVsTools.Core/ProjectImporter.cs @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt VS Tools. @@ -26,18 +26,19 @@ ** ****************************************************************************/ -using EnvDTE; -using Microsoft.VisualStudio.VCProjectEngine; using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; +using Microsoft.VisualStudio.Shell; +using EnvDTE; +using Microsoft.VisualStudio.VCProjectEngine; namespace QtVsTools.Core { public class ProjectImporter { - private DTE dteObject; + private readonly DTE dteObject; const string projectFileExtension = ".vcxproj"; public ProjectImporter(DTE dte) @@ -47,6 +48,8 @@ public void ImportProFile(string qtVersion) { + ThreadHelper.ThrowIfNotOnUIThread(); + FileDialog toOpen = new OpenFileDialog(); toOpen.FilterIndex = 1; toOpen.CheckFileExists = true; @@ -78,6 +81,8 @@ private void ImportSolution(FileInfo mainInfo, string qtVersion) { + ThreadHelper.ThrowIfNotOnUIThread(); + var versionInfo = QtVersionManager.The().GetVersionInfo(qtVersion); var VCInfo = RunQmake(mainInfo, ".sln", true, versionInfo); if (null == VCInfo) @@ -88,7 +93,7 @@ if (CheckQtVersion(versionInfo)) { dteObject.Solution.Open(VCInfo.FullName); if (qtVersion != null) { - QtVersionManager.The().SaveSolutionQtVersion(dteObject.Solution, qtVersion); + Legacy.QtVersionManager.SaveSolutionQtVersion(dteObject.Solution, qtVersion); foreach (var prj in HelperFunctions.ProjectsInSolution(dteObject)) { QtVersionManager.The().SaveProjectQtVersion(prj, qtVersion); var qtPro = QtProject.Create(prj); @@ -100,12 +105,14 @@ Messages.Print("--- (Import): Finished opening " + VCInfo.Name); } catch (Exception e) { - Messages.DisplayCriticalErrorMessage(e); + Messages.DisplayErrorMessage(e); } } public void ImportProject(FileInfo mainInfo, string qtVersion) { + ThreadHelper.ThrowIfNotOnUIThread(); + var versionInfo = QtVersionManager.The().GetVersionInfo(qtVersion); var VCInfo = RunQmake(mainInfo, projectFileExtension, false, versionInfo); if (null == VCInfo) @@ -116,9 +123,11 @@ try { if (CheckQtVersion(versionInfo)) { // no need to add the project again if it's already there... - if (!HelperFunctions.IsProjectInSolution(dteObject, VCInfo.FullName)) { + var fullName = VCInfo.FullName; + var pro = HelperFunctions.ProjectFromSolution(dteObject, fullName); + if (pro == null) { try { - dteObject.Solution.AddFromFile(VCInfo.FullName, false); + pro = dteObject.Solution.AddFromFile(fullName, false); } catch (Exception /*exception*/) { Messages.Print("--- (Import): Generated project could not be loaded."); Messages.Print("--- (Import): Please look in the output above for errors and warnings."); @@ -129,13 +138,6 @@ Messages.Print("Project already in Solution"); } - Project pro = null; - foreach (var p in HelperFunctions.ProjectsInSolution(dteObject)) { - if (p.FullName.ToLower() == VCInfo.FullName.ToLower()) { - pro = p; - break; - } - } if (pro != null) { var qtPro = QtProject.Create(pro); qtPro.SetQtEnvironment(); @@ -151,21 +153,16 @@ Messages.Print("Can't select the platform " + platformName + "."); } - // try to figure out if the project is a plugin project - try { - var activeConfig = pro.ConfigurationManager.ActiveConfiguration.ConfigurationName; - var config = (VCConfiguration)((IVCCollection)qtPro.VCProject.Configurations).Item(activeConfig); - if (config.ConfigurationType == ConfigurationTypes.typeDynamicLibrary) { - var compiler = CompilerToolWrapper.Create(config); - var linker = (VCLinkerTool)((IVCCollection)config.Tools).Item("VCLinkerTool"); - if (compiler.GetPreprocessorDefinitions().IndexOf("QT_PLUGIN", StringComparison.Ordinal) > -1 - && compiler.GetPreprocessorDefinitions().IndexOf("QDESIGNER_EXPORT_WIDGETS", StringComparison.Ordinal) > -1 - && compiler.GetAdditionalIncludeDirectories().IndexOf("QtDesigner", StringComparison.Ordinal) > -1 - && linker.AdditionalDependencies.IndexOf("QtDesigner", StringComparison.Ordinal) > -1) { - qtPro.MarkAsDesignerPluginProject(); - } - } - } catch (Exception) { } + // figure out if the imported project is a plugin project + var tmp = qtPro.Project.ConfigurationManager.ActiveConfiguration + .ConfigurationName; + var vcConfig = (qtPro.VCProject.Configurations as IVCCollection).Item(tmp) + as VCConfiguration; + var def = CompilerToolWrapper.Create(vcConfig)?.GetPreprocessorDefinitions(); + if (!string.IsNullOrEmpty(def) + && def.IndexOf("QT_PLUGIN", StringComparison.Ordinal) > -1) { + QtProject.MarkAsQtPlugin(qtPro); + } qtPro.SetQtEnvironment(); ApplyPostImportSteps(qtPro); @@ -222,18 +219,19 @@ if (ok) ok = xmlProject.UpdateProjectFormatVersion(); - if (!ok) { - Messages.Print( - SR.GetString("ImportProject_CannotConvertProject", projectFile.Name)); + if (ok) { + xmlProject.Save(); + // Initialize Qt variables + xmlProject.BuildTarget("QtVarsDesignTime"); + } else { + Messages.Print($"Could not convert project file {projectFile.Name} to Qt/MSBuild."); } - xmlProject.Save(); - - // Initialize Qt variables - xmlProject.BuildTarget("QtVarsDesignTime"); } private static void ApplyPostImportSteps(QtProject qtProject) { + ThreadHelper.ThrowIfNotOnUIThread(); + qtProject.RemoveResFilesFromGeneratedFilesFilter(); qtProject.TranslateFilterNames(); @@ -249,32 +247,38 @@ private FileInfo RunQmake(FileInfo mainInfo, string ext, bool recursive, VersionInformation vi) { + ThreadHelper.ThrowIfNotOnUIThread(); + var name = mainInfo.Name.Remove(mainInfo.Name.IndexOf('.')); - var VCInfo = new FileInfo(mainInfo.DirectoryName + "\\" + name + ext); - - if (!VCInfo.Exists || DialogResult.Yes == MessageBox.Show(SR.GetString("ExportProject_ProjectExistsRegenerateOrReuse", VCInfo.Name), - SR.GetString("ProjectExists"), MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { - Messages.Print("--- (Import): Generating new project of " + mainInfo.Name + " file"); - - var waitDialog = WaitDialog.Start( - "Open Qt Project File", - "Generating Visual Studio project...", delay: 2); - - var qmake = new QMakeImport(vi, mainInfo.FullName, recursive, dteObject); - int exitCode = qmake.Run(setVCVars: true); - waitDialog.Stop(); - - if (exitCode == 0) - return VCInfo; + var vcxproj = new FileInfo(mainInfo.DirectoryName + "\\" + name + ext); + if (vcxproj.Exists) { + var result = MessageBox.Show($@"{vcxproj.Name} already exists. Select 'OK' to " + + "regenerate the file or 'Cancel' to quit importing the project.", + "Project file already exists.", + MessageBoxButtons.OKCancel, MessageBoxIcon.Question); + if (result == DialogResult.Cancel) + return null; } + Messages.Print("--- (Import): Generating new project of " + mainInfo.Name + " file"); + + var waitDialog = WaitDialog.Start("Open Qt Project File", + "Generating Visual Studio project...", delay: 2); + + var qmake = new QMakeImport(vi, mainInfo.FullName, recursive, dteObject); + int exitCode = qmake.Run(setVCVars: true); + + waitDialog.Stop(); + + if (exitCode == 0) + return vcxproj; return null; } private static bool CheckQtVersion(VersionInformation vi) { - if (!vi.qt5Version) { + if (vi.qtMajor < 5) { Messages.DisplayWarningMessage(SR.GetString("ExportProject_EditProjectFileManually")); return false; } -- Gitblit v1.9.1