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/ProjectExporter.cs |   85 +++++++++++++++++++++++++++++-------------
 1 files changed, 58 insertions(+), 27 deletions(-)

diff --git a/QtVsTools.Core/ProjectExporter.cs b/QtVsTools.Core/ProjectExporter.cs
index 681bd33..357c713 100644
--- a/QtVsTools.Core/ProjectExporter.cs
+++ b/QtVsTools.Core/ProjectExporter.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,15 +26,16 @@
 **
 ****************************************************************************/
 
-using EnvDTE;
-using EnvDTE80;
-using Microsoft.VisualStudio.VCProjectEngine;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using System.Text.RegularExpressions;
 using System.Windows.Forms;
+using Microsoft.VisualStudio.Shell;
+using Microsoft.VisualStudio.VCProjectEngine;
+using EnvDTE;
+using EnvDTE80;
 
 namespace QtVsTools.Core
 {
@@ -43,7 +44,7 @@
     /// </summary>
     public class ProjectExporter
     {
-        private DTE dteObject;
+        private readonly DTE dteObject;
 
         public ProjectExporter(DTE dte)
         {
@@ -91,13 +92,15 @@
 
         private ProSolution CreateProFileSolution(Solution sln)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             ProFileContent content;
             var prosln = new ProSolution(sln);
 
             foreach (var proj in HelperFunctions.ProjectsInSolution(sln.DTE)) {
                 try {
                     // only add qt projects
-                    if (HelperFunctions.IsQtProject(proj)) {
+                    if (HelperFunctions.IsVsToolsProject(proj)) {
                         content = CreateProFileContent(proj);
                         prosln.ProFiles.Add(content);
                     } else if (proj.Kind == ProjectKinds.vsProjectKindSolutionFolder) {
@@ -113,9 +116,11 @@
 
         private void addProjectsInFolder(Project solutionFolder, ProSolution sln)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             foreach (ProjectItem pi in solutionFolder.ProjectItems) {
                 var containedProject = pi.Object as Project;
-                if (HelperFunctions.IsQtProject(containedProject)) {
+                if (HelperFunctions.IsVsToolsProject(containedProject)) {
                     var content = CreateProFileContent(containedProject);
                     sln.ProFiles.Add(content);
                 } else if (containedProject.Kind == ProjectKinds.vsProjectKindSolutionFolder) {
@@ -126,6 +131,8 @@
 
         private static ProFileContent CreateProFileContent(Project project)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             ProFileOption option;
             var qtPro = QtProject.Create(project);
             var content = new ProFileContent(qtPro.VCProject);
@@ -192,8 +199,7 @@
             if (config.ConfigurationType == ConfigurationTypes.typeStaticLibrary)
                 option.List.Add("staticlib");
             if (linker != null) {
-                var linkerRule = linker as IVCRulePropertyStorage;
-                var generateDebugInformation = (linkerRule != null) ?
+                var generateDebugInformation = (linker is IVCRulePropertyStorage linkerRule) ?
                     linkerRule.GetUnevaluatedPropertyValue("GenerateDebugInformation") : null;
                 if (generateDebugInformation != "false")
                     option.List.Add("debug");
@@ -213,10 +219,12 @@
                 }
             }
 
-            if (qtPro.IsDesignerPluginProject()) {
-                option.List.Add("designer");
+            var legacyDesigner = Legacy.QtProject.IsDesignerPluginProject(qtPro);
+            var plugin = legacyDesigner | Core.QtProject.IsQtPlugin(qtPro);
+            if (plugin)
                 option.List.Add("plugin");
-            }
+            if (legacyDesigner)
+                option.List.Add("designer");
 
             // add defines
             option = new ProFileOption("DEFINES");
@@ -323,12 +331,18 @@
                 option.List.Add(project.Name + ".rc");
             }
 
-            if (qtPro.IsDesignerPluginProject()) {
+            if (plugin) {
                 option = new ProFileOption("target.path");
-                option.ShortComment = "Install the plugin in the designer plugins directory.";
+                if (legacyDesigner)
+                    option.ShortComment = "Installs the plugin in the designer plugins directory.";
+                else
+                    option.ShortComment = "Installs the plugin in the plugins directory.";
                 option.IncludeComment = true;
                 option.AssignSymbol = ProFileOption.AssignType.AT_Equals;
-                option.List.Add("$$[QT_INSTALL_PLUGINS]/designer");
+                if (legacyDesigner)
+                    option.List.Add("$$[QT_INSTALL_PLUGINS]/designer");
+                else
+                    option.List.Add("$$[QT_INSTALL_PLUGINS]");
                 content.Options.Add(option);
 
                 option = new ProFileOption("INSTALLS");
@@ -343,6 +357,8 @@
 
         private static ProFileContent CreatePriFileContent(Project project, string priFileDirectory)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             ProFileOption option;
             var qtPro = QtProject.Create(project);
             var content = new ProFileContent(qtPro.VCProject);
@@ -417,6 +433,8 @@
 
         private static void AddIncludePaths(Project project, ProFileOption option, string includePaths)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             if (QtProject.GetFormatVersion(project) >= Resources.qtMinFormatVersion_ClProperties)
                 return;
 
@@ -437,10 +455,7 @@
                 if (!d.StartsWith("$(qtdir)\\include", StringComparison.OrdinalIgnoreCase) &&
                     !d.StartsWith(qtDir + "\\include", StringComparison.OrdinalIgnoreCase) &&
                     !d.EndsWith("win32-msvc2005", StringComparison.OrdinalIgnoreCase)) {
-
-                    var vcConfig = project.ConfigurationManager.ActiveConfiguration.Object
-                        as VCConfiguration;
-                    if (vcConfig != null)
+                    if (project.ConfigurationManager.ActiveConfiguration.Object is VCConfiguration vcConfig)
                         HelperFunctions.ExpandString(ref d, vcConfig);
                     if (HelperFunctions.IsAbsoluteFilePath(d))
                         d = HelperFunctions.GetRelativePath(project.FullName, d);
@@ -461,8 +476,9 @@
                 qtDir = Environment.GetEnvironmentVariable("QTDIR");
             if (qtDir == null)
                 qtDir = "";
-
             qtDir = HelperFunctions.NormalizeRelativeFilePath(qtDir);
+
+            ThreadHelper.ThrowIfNotOnUIThread();
 
             if (paths != null) {
                 foreach (var s in paths.Split(';', ',')) {
@@ -491,7 +507,14 @@
 
         private static void AddModules(QtProject qtPrj, ProFileOption optionQT, ProFileOption optionCONFIG)
         {
-            foreach (var module in QtModules.Instance.GetAvailableModules()) {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
+            var vm = QtVersionManager.The();
+            var versionInfo = vm.GetVersionInfo(qtPrj.Project);
+            if (versionInfo == null)
+                versionInfo = vm.GetVersionInfo(vm.GetDefaultVersion());
+
+            foreach (var module in QtModules.Instance.GetAvailableModules(versionInfo.qtMajor)) {
                 if (!qtPrj.HasModule(module.Id))
                     continue;
 
@@ -504,6 +527,8 @@
 
         private void WriteProSolution(ProSolution prosln, bool openFile)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             var sln = prosln.ProjectSolution;
             if (string.IsNullOrEmpty(sln.FileName))
                 return;
@@ -573,6 +598,8 @@
 
         private void WriteProFile(ProFileContent content, string proFile, string priFileToInclude, bool openFile)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             StreamWriter sw;
             if (File.Exists(proFile)) {
                 if (MessageBox.Show(SR.GetString("ExportProject_ExistsOverwriteQuestion", proFile),
@@ -605,8 +632,7 @@
                 WriteProFileOptions(sw, content.Options);
             }
 
-            // open the file in vs
-            if (openFile)
+            if (openFile) // open the file in vs
                 dteObject.OpenFile(Constants.vsViewKindTextView, proFile).Activate();
         }
 
@@ -705,6 +731,8 @@
         public static void SyncIncludeFiles(VCProject vcproj, List<string> priFiles,
             List<string> projFiles, DTE dte, bool flat, FakeFilter fakeFilter)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             var cmpPriFiles = new List<string>(priFiles.Count);
             foreach (var s in priFiles)
                 cmpPriFiles.Add(HelperFunctions.NormalizeFilePath(s).ToLower());
@@ -779,7 +807,7 @@
 
         public void ExportToProFile()
         {
-            var expDlg = new ExportProjectDialog();
+            ThreadHelper.ThrowIfNotOnUIThread();
 
             var sln = dteObject.Solution;
             var prosln = CreateProFileSolution(sln);
@@ -789,6 +817,7 @@
                 return;
             }
 
+            var expDlg = new ExportProjectDialog();
             expDlg.ProFileSolution = prosln;
             expDlg.StartPosition = FormStartPosition.CenterParent;
             var ww = new MainWinWrapper(dteObject);
@@ -814,9 +843,10 @@
 
         public string ExportToPriFile(Project proj)
         {
-            VCProject vcproj;
+            ThreadHelper.ThrowIfNotOnUIThread();
 
-            if (HelperFunctions.IsQtProject(proj)) {
+            VCProject vcproj;
+            if (HelperFunctions.IsVsToolsProject(proj)) {
                 try {
                     vcproj = (VCProject)proj.Object;
                 } catch (Exception e) {
@@ -844,8 +874,9 @@
 
         public void ExportToPriFile(Project proj, string fileName)
         {
-            var priFile = new FileInfo(fileName);
+            ThreadHelper.ThrowIfNotOnUIThread();
 
+            var priFile = new FileInfo(fileName);
             var content = CreatePriFileContent(proj, priFile.DirectoryName);
             WritePriFile(content, priFile.FullName);
         }

--
Gitblit v1.9.1