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