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/QtVSIPSettings.cs |  477 +++-------------------------------------------------------
 1 files changed, 31 insertions(+), 446 deletions(-)

diff --git a/QtVsTools.Core/QtVSIPSettings.cs b/QtVsTools.Core/QtVSIPSettings.cs
index bbd3a45..7eb4146 100644
--- a/QtVsTools.Core/QtVSIPSettings.cs
+++ b/QtVsTools.Core/QtVSIPSettings.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,11 +26,9 @@
 **
 ****************************************************************************/
 
+using Microsoft.VisualStudio.Shell;
 using Microsoft.VisualStudio.VCProjectEngine;
-using Microsoft.Win32;
-using QtVsTools.Core.QtMsBuild;
-using System;
-using System.Collections;
+using QtVsTools.Common;
 
 namespace QtVsTools.Core
 {
@@ -46,41 +44,26 @@
     {
         public static IQtVsToolsOptions Options { get; set; }
 
-        static Hashtable mocDirCache = new Hashtable();
-        static Hashtable uicDirCache = new Hashtable();
-        static Hashtable rccDirCache = new Hashtable();
-
         public static bool GetDisableAutoMocStepsUpdate()
         {
-            return GetBoolValue(Resources.disableAutoMocStepsUpdateKeyword, false);
-        }
-
-        public static void SaveDisableAutoMocStepsUpdate(bool b)
-        {
-            SetBoolValue(Resources.disableAutoMocStepsUpdateKeyword, b);
+            return QtVSIPSettingsShared.GetBoolValue(Resources.disableAutoMocStepsUpdateKeyword, false);
         }
 
         public static string GetUicDirectory(EnvDTE.Project project)
         {
-            return GetDirectory(project, Resources.uicDirKeyword);
-        }
-
-        public static void SaveUicDirectory(EnvDTE.Project project, string directory)
-        {
-            if (directory == null)
-                SaveDirectory(project, Resources.uicDirKeyword, GetDirectory(project, Resources.uicDirKeyword));
-            else
-                SaveDirectory(project, Resources.uicDirKeyword, directory);
+            ThreadHelper.ThrowIfNotOnUIThread();
+            return QtVSIPSettingsShared.GetDirectory(project, Resources.uicDirKeyword);
         }
 
         public static string GetMocDirectory()
         {
-            return GetDirectory(Resources.mocDirKeyword);
+            return QtVSIPSettingsShared.GetDirectory(Resources.mocDirKeyword);
         }
 
         public static string GetMocDirectory(EnvDTE.Project project)
         {
-            return GetDirectory(project, Resources.mocDirKeyword);
+            ThreadHelper.ThrowIfNotOnUIThread();
+            return QtVSIPSettingsShared.GetDirectory(project, Resources.mocDirKeyword);
         }
 
         public static string GetMocDirectory(
@@ -88,6 +71,8 @@
             string configName,
             string platformName, VCFile vCFile)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             string filePath = null;
             if (vCFile != null)
                 filePath = vCFile.FullPath;
@@ -100,7 +85,9 @@
             string platformName,
             string filePath = null)
         {
-            var dir = GetDirectory(project, Resources.mocDirKeyword);
+            ThreadHelper.ThrowIfNotOnUIThread();
+
+            var dir = QtVSIPSettingsShared.GetDirectory(project, Resources.mocDirKeyword);
             if (!string.IsNullOrEmpty(configName)
                 && !string.IsNullOrEmpty(platformName))
                 HelperFunctions.ExpandString(ref dir, project, configName, platformName, filePath);
@@ -109,458 +96,56 @@
 
         public static bool HasDifferentMocFilePerConfig(EnvDTE.Project project)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             var mocDir = GetMocDirectory(project);
             return mocDir.Contains("$(ConfigurationName)");
         }
 
         public static bool HasDifferentMocFilePerPlatform(EnvDTE.Project project)
         {
+            ThreadHelper.ThrowIfNotOnUIThread();
+
             var mocDir = GetMocDirectory(project);
             return mocDir.Contains("$(PlatformName)");
         }
 
-        public static string GetMocOptions()
-        {
-            return GetOption(Resources.mocOptionsKeyword);
-        }
-
         public static string GetMocOptions(EnvDTE.Project project)
         {
-            return GetOption(project, Resources.mocOptionsKeyword);
+            ThreadHelper.ThrowIfNotOnUIThread();
+            return QtVSIPSettingsShared.GetOption(project, Resources.mocOptionsKeyword);
         }
 
         public static bool GetLUpdateOnBuild(EnvDTE.Project project)
         {
-            if (GetProjectQtSetting(project, "QtRunLUpdateOnBuild") == "true")
+            ThreadHelper.ThrowIfNotOnUIThread();
+
+            if (QtVSIPSettingsShared.GetProjectQtSetting(project, "QtRunLUpdateOnBuild") == "true")
                 return true;
-            return GetBoolValue(project, Resources.lupdateKeyword);
-        }
-
-        public static string GetLUpdateOptions()
-        {
-            return GetOption(Resources.lupdateOptionsKeyword);
-        }
-
-        static string GetProjectQtSetting(EnvDTE.Project project, string propertyName)
-        {
-            var vcProject = project.Object as VCProject;
-            if (vcProject == null)
-                return null;
-
-            var vcConfigs = vcProject.Configurations as IVCCollection;
-            if (vcConfigs == null)
-                return null;
-
-            var activeConfig = project.ConfigurationManager.ActiveConfiguration;
-            if (activeConfig == null)
-                return null;
-
-            var activeConfigId = string.Format("{0}|{1}",
-                activeConfig.ConfigurationName, activeConfig.PlatformName);
-
-            var props = vcProject as IVCBuildPropertyStorage;
-            if (props == null)
-                return null;
-
-            try {
-                return props.GetPropertyValue(propertyName, activeConfigId, "ProjectFile");
-            } catch {
-                return null;
-            }
-        }
-
-        public static string GetLUpdateOptions(EnvDTE.Project project)
-        {
-            string qtLUpdateOptions = GetProjectQtSetting(project, "QtLUpdateOptions");
-            if (!string.IsNullOrEmpty(qtLUpdateOptions))
-                return qtLUpdateOptions;
-            return GetOption(project, Resources.lupdateOptionsKeyword);
-        }
-
-        public static string GetLReleaseOptions()
-        {
-            return GetOption(Resources.lreleaseOptionsKeyword);
-        }
-
-        public static string GetLReleaseOptions(EnvDTE.Project project)
-        {
-            string qtLReleaseOptions = GetProjectQtSetting(project, "QtLReleaseOptions");
-            if (!string.IsNullOrEmpty(qtLReleaseOptions))
-                return qtLReleaseOptions;
-            return GetOption(project, Resources.lreleaseOptionsKeyword);
-        }
-
-        public static bool GetAskBeforeCheckoutFile()
-        {
-            return GetBoolValue(Resources.askBeforeCheckoutFileKeyword, true);
-        }
-
-        public static void SaveAskBeforeCheckoutFile(bool value)
-        {
-            SetBoolValue(Resources.askBeforeCheckoutFileKeyword, value);
-        }
-
-        public static bool GetDisableCheckoutFiles()
-        {
-            return GetBoolValue(Resources.disableCheckoutFilesKeyword, false);
-        }
-
-        public static void SaveDisableCheckoutFiles(bool value)
-        {
-            SetBoolValue(Resources.disableCheckoutFilesKeyword, value);
-        }
-
-        public static void SaveMocDirectory(EnvDTE.Project project, string directory)
-        {
-            if (directory == null)
-                SaveDirectory(project, Resources.mocDirKeyword, GetDirectory(project, Resources.mocDirKeyword));
-            else
-                SaveDirectory(project, Resources.mocDirKeyword, directory);
-        }
-
-        public static void SaveMocOptions(EnvDTE.Project project, string options)
-        {
-            if (options == null)
-                options = GetMocOptions();
-            SaveOption(project, Resources.mocOptionsKeyword, options);
-        }
-
-        public static void SaveMocOptions(string options)
-        {
-            SaveOption(Resources.mocOptionsKeyword, options);
-        }
-
-        public static void SaveLUpdateOnBuild(EnvDTE.Project project)
-        {
-            SetBoolValue(project, Resources.lupdateKeyword, GetLUpdateOnBuild());
-        }
-
-        public static void SaveLUpdateOnBuild(EnvDTE.Project project, bool value)
-        {
-            SetBoolValue(project, Resources.lupdateKeyword, value);
-        }
-
-        public static void SaveLUpdateOptions(EnvDTE.Project project, string options)
-        {
-            if (options == null)
-                options = GetLUpdateOptions();
-
-            SaveOption(project, Resources.lupdateOptionsKeyword, options);
-        }
-
-        public static void SaveLUpdateOptions(string options)
-        {
-            SaveOption(Resources.lupdateOptionsKeyword, options);
-        }
-
-        public static void SaveLReleaseOptions(EnvDTE.Project project, string options)
-        {
-            if (options == null)
-                options = GetLReleaseOptions();
-            SaveOption(project, Resources.lreleaseOptionsKeyword, options);
-        }
-
-        public static void SaveLReleaseOptions(string options)
-        {
-            SaveOption(Resources.lreleaseOptionsKeyword, options);
+            return QtVSIPSettingsShared.GetBoolValue(project, Resources.lupdateKeyword);
         }
 
         public static string GetRccDirectory(EnvDTE.Project project)
         {
-            return GetDirectory(project, Resources.rccDirKeyword);
-        }
-
-        public static void SaveRccDirectory(string dir)
-        {
-            SaveDirectory(Resources.rccDirKeyword, dir);
-        }
-
-        public static void SaveRccDirectory(EnvDTE.Project project, string directory)
-        {
-            if (directory == null)
-                SaveDirectory(project, Resources.rccDirKeyword, GetDirectory(project, Resources.rccDirKeyword));
-            else
-                SaveDirectory(project, Resources.rccDirKeyword, directory);
-        }
-
-        private static string GetDirectory(string type)
-        {
-            try {
-                var key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-                if (key != null) {
-                    var path = (string)key.GetValue(type, null);
-                    if (path != null)
-                        return HelperFunctions.NormalizeRelativeFilePath(path);
-                }
-            } catch { }
-            if (type == Resources.mocDirKeyword)
-                return Resources.generatedFilesDir + "\\$(ConfigurationName)";
-            return Resources.generatedFilesDir;
-        }
-
-        private static string GetOption(string type)
-        {
-            try {
-                var key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-                if (key != null) {
-                    var opt = (string)key.GetValue(type, null);
-                    if (opt != null)
-                        return opt;
-                }
-            } catch { }
-            return null;
-        }
-
-        public static bool GetLUpdateOnBuild()
-        {
-            return GetBoolValue(Resources.lupdateKeyword, false);
+            ThreadHelper.ThrowIfNotOnUIThread();
+            return QtVSIPSettingsShared.GetDirectory(project, Resources.rccDirKeyword);
         }
 
         public static string GetRccDirectory()
         {
-            return GetDirectory(Resources.rccDirKeyword);
+            return QtVSIPSettingsShared.GetDirectory(Resources.rccDirKeyword);
         }
 
         public static string GetUicDirectory()
         {
-            return GetDirectory(Resources.uicDirKeyword);
-        }
-
-        private static string GetDirectory(EnvDTE.Project project, string type)
-        {
-            // check for directory in following order:
-            // - stored in project
-            // - stored in cache
-            // - retrieve from moc/uic steps
-            // - globally defined default directory
-            // - fallback on hardcoded directory
-            if (project != null) {
-                if (project.Globals.get_VariablePersists(type))
-                    return HelperFunctions.NormalizeRelativeFilePath((string)project.Globals[type]);
-
-                try {
-                    if (type == Resources.mocDirKeyword && mocDirCache.Contains(project.FullName))
-                        return (string)mocDirCache[project.FullName];
-                    if (type == Resources.uicDirKeyword && uicDirCache.Contains(project.FullName))
-                        return (string)uicDirCache[project.FullName];
-                    if (type == Resources.rccDirKeyword && rccDirCache.Contains(project.FullName))
-                        return (string)rccDirCache[project.FullName];
-
-                    QtCustomBuildTool tool = null;
-                    string configName = null;
-                    string platformName = null;
-                    var vcpro = (VCProject)project.Object;
-                    foreach (VCFile vcfile in (IVCCollection)vcpro.Files) {
-                        var name = vcfile.Name;
-                        if ((type == Resources.mocDirKeyword && HelperFunctions.IsHeaderFile(name))
-                            || (type == Resources.mocDirKeyword && HelperFunctions.IsMocFile(name))
-                            || (type == Resources.uicDirKeyword && HelperFunctions.IsUicFile(name))
-                            || (type == Resources.rccDirKeyword && HelperFunctions.IsQrcFile(name))) {
-                            foreach (VCFileConfiguration config in (IVCCollection)vcfile.FileConfigurations) {
-                                tool = new QtCustomBuildTool(config);
-                                configName = config.Name.Remove(config.Name.IndexOf('|'));
-                                var vcConfig = config.ProjectConfiguration as VCConfiguration;
-                                var platform = vcConfig.Platform as VCPlatform;
-                                platformName = platform.Name;
-                                if (tool != null && (tool.CommandLine.IndexOf("moc.exe", StringComparison.OrdinalIgnoreCase) != -1
-                                    || (tool.CommandLine.IndexOf("uic.exe", StringComparison.OrdinalIgnoreCase) != -1)
-                                    || (tool.CommandLine.IndexOf("rcc.exe", StringComparison.OrdinalIgnoreCase) != -1)))
-                                    break;
-                                tool = null;
-                            }
-
-                            if (tool != null)
-                                break;
-                        }
-                    }
-
-                    if (tool != null) {
-                        string dir = null;
-                        var lastindex = tool.Outputs.LastIndexOf('\\');
-                        if (tool.Outputs.LastIndexOf('/') > lastindex)
-                            lastindex = tool.Outputs.LastIndexOf('/');
-
-                        if (lastindex == -1)
-                            dir = ".";
-                        else
-                            dir = tool.Outputs.Substring(0, lastindex);
-                        dir = dir.Replace("\"", "");
-
-                        if (type == Resources.mocDirKeyword) {
-                            int index;
-                            if ((index = dir.IndexOf(configName, StringComparison.OrdinalIgnoreCase)) != -1)
-                                dir = dir.Replace(dir.Substring(index, configName.Length), "$(ConfigurationName)");
-                            if ((index = dir.IndexOf(platformName, StringComparison.OrdinalIgnoreCase)) != -1)
-                                dir = dir.Replace(dir.Substring(index, platformName.Length), "$(PlatformName)");
-
-                            mocDirCache.Add(project.FullName, HelperFunctions.NormalizeRelativeFilePath(dir));
-                        } else if (type == Resources.uicDirKeyword)
-                            uicDirCache.Add(project.FullName, HelperFunctions.NormalizeRelativeFilePath(dir));
-                        else if (type == Resources.rccDirKeyword)
-                            rccDirCache.Add(project.FullName, HelperFunctions.NormalizeRelativeFilePath(dir));
-
-                        cleanUpCache(project);
-
-                        return HelperFunctions.NormalizeRelativeFilePath(dir);
-                    }
-                } catch { }
-            }
-
-            return GetDirectory(type);
-        }
-
-        private static string GetOption(EnvDTE.Project project, string type)
-        {
-            // check for directory in following order:
-            // - stored in project
-            // - globally defined default option
-            // - empty options
-            if (project != null && project.Globals.get_VariablePersists(type))
-                return (string)project.Globals[type];
-            return GetOption(type);
-        }
-
-        private static bool GetBoolValue(EnvDTE.Project project, string type)
-        {
-            // check for directory in following order:
-            // - stored in project
-            // - globally defined default option
-            // - empty options
-            if (project != null && project.Globals.get_VariablePersists(type))
-                return Convert.ToInt32(project.Globals[type] as string) > 0;
-            return GetBoolValue(type, false);
-        }
-
-        private static void SaveDirectory(EnvDTE.Project project, string type, string dir)
-        {
-            dir = HelperFunctions.NormalizeRelativeFilePath(dir);
-            project.Globals[type] = dir;
-            if (!project.Globals.get_VariablePersists(type))
-                project.Globals.set_VariablePersists(type, true);
-
-            cleanUpCache(project);
-        }
-
-        private static void SaveOption(EnvDTE.Project project, string type, string option)
-        {
-            project.Globals[type] = option;
-            if (!project.Globals.get_VariablePersists(type))
-                project.Globals.set_VariablePersists(type, true);
-        }
-
-        private static void SetBoolValue(EnvDTE.Project project, string type, bool value)
-        {
-            project.Globals[type] = Convert.ToInt32(value).ToString();
-            if (!project.Globals.get_VariablePersists(type))
-                project.Globals.set_VariablePersists(type, true);
-        }
-
-        public static void SaveUicDirectory(string dir)
-        {
-            SaveDirectory(Resources.uicDirKeyword, dir);
-        }
-
-        public static void SaveMocDirectory(string dir)
-        {
-            SaveDirectory(Resources.mocDirKeyword, dir);
-        }
-
-        public static void SaveLUpdateOnBuild(bool val)
-        {
-            SetBoolValue(Resources.lupdateKeyword, val);
-        }
-
-        public static void cleanUpCache(EnvDTE.Project project)
-        {
-            try {
-                var mocEnumerator = mocDirCache.GetEnumerator();
-                while (mocEnumerator.MoveNext()) {
-                    if (!HelperFunctions.IsProjectInSolution(project.DTE, (string)mocEnumerator.Key)) {
-                        mocDirCache.Remove(mocEnumerator.Key);
-                        mocEnumerator = mocDirCache.GetEnumerator();
-                    }
-                }
-
-                var uicEnumerator = uicDirCache.GetEnumerator();
-                while (uicEnumerator.MoveNext()) {
-                    if (!HelperFunctions.IsProjectInSolution(project.DTE, (string)uicEnumerator.Key)) {
-                        uicDirCache.Remove(uicEnumerator.Key);
-                        uicEnumerator = uicDirCache.GetEnumerator();
-                    }
-                }
-
-                var rccEnumerator = rccDirCache.GetEnumerator();
-                while (rccEnumerator.MoveNext()) {
-                    if (!HelperFunctions.IsProjectInSolution(project.DTE, (string)rccEnumerator.Key)) {
-                        rccDirCache.Remove(rccEnumerator.Key);
-                        rccEnumerator = rccDirCache.GetEnumerator();
-                    }
-                }
-            } catch { }
-        }
-
-        private static void SaveDirectory(string type, string dir)
-        {
-            dir = HelperFunctions.NormalizeRelativeFilePath(dir);
-            var key = Registry.CurrentUser.CreateSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-            if (key == null)
-                return;
-            key.SetValue(type, dir);
-        }
-
-        private static void SaveOption(string type, string option)
-        {
-            var key = Registry.CurrentUser.CreateSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-            if (key == null)
-                return;
-            if (option == null)
-                option = "";
-            key.SetValue(type, option);
+            return QtVSIPSettingsShared.GetDirectory(Resources.uicDirKeyword);
         }
 
         public static bool AutoUpdateUicSteps()
         {
-            if (ValueExists("AutoUpdateUicSteps"))
-                return GetBoolValue("AutoUpdateUicSteps", true);
-            return GetBoolValue("AutoUpdateBuildSteps", true);
-        }
-
-        private static bool GetBoolValue(string key, bool defaultValue)
-        {
-            var regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-            if (regKey == null)
-                return defaultValue;
-            return ((int)regKey.GetValue(key, defaultValue ? 1 : 0)) > 0;
-        }
-
-        private static bool ValueExists(string key)
-        {
-            var regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-            if (regKey != null) {
-                foreach (var s in regKey.GetValueNames()) {
-                    if (s == key)
-                        return true;
-                }
-            }
-            return false;
-        }
-
-        private static void SetBoolValue(string key, bool val)
-        {
-            var regKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\" + Resources.registryPackagePath);
-            if (regKey == null)
-                return;
-            regKey.SetValue(key, val ? 1 : 0);
-        }
-
-        public static bool GetQmlDebug(EnvDTE.Project project)
-        {
-            return QtProject.Create(project).QmlDebug;
-        }
-
-        public static void SaveQmlDebug(EnvDTE.Project project, bool enabled)
-        {
-            QtProject.Create(project).QmlDebug = enabled;
+            if (QtVSIPSettingsShared.ValueExists("AutoUpdateUicSteps"))
+                return QtVSIPSettingsShared.GetBoolValue("AutoUpdateUicSteps", true);
+            return QtVSIPSettingsShared.GetBoolValue("AutoUpdateBuildSteps", true);
         }
     }
 }

--
Gitblit v1.9.1