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