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/QtModules.cs |   66 +++++++++++++++++++++-----------
 1 files changed, 43 insertions(+), 23 deletions(-)

diff --git a/QtVsTools.Core/QtModules.cs b/QtVsTools.Core/QtModules.cs
index 0b1bdde..8634ece 100644
--- a/QtVsTools.Core/QtModules.cs
+++ b/QtVsTools.Core/QtModules.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.
@@ -38,37 +38,58 @@
 {
     public class QtModules
     {
-        private static QtModules instance = new QtModules();
-        private readonly Dictionary<int, QtModule> modules = new Dictionary<int, QtModule>();
+        public static QtModules Instance { get; } = new QtModules();
 
-        public static QtModules Instance
-        {
-            get { return instance; }
-        }
+        private List<QtModule> qt5list = null, qt6list = null;
+        private readonly Dictionary<int, QtModule> qt5modules = new Dictionary<int, QtModule>();
+        private readonly Dictionary<int, QtModule> qt6modules = new Dictionary<int, QtModule>();
 
-        public QtModule Module(int id)
+        public QtModule Module(int id, uint major)
         {
-            QtModule module;
-            modules.TryGetValue(id, out module);
+            QtModule module = null;
+            if (major < 6)
+                qt5modules.TryGetValue(id, out module);
+            if (major == 6)
+                qt6modules.TryGetValue(id, out module);
+            if (major > 6)
+                throw new QtVSException("Unsupported Qt version.");
             return module;
         }
 
-        public List<QtModule> GetAvailableModules()
+        public List<QtModule> GetAvailableModules(uint major)
         {
-            var lst = new List<QtModule>(modules.Count);
-            foreach (var entry in modules)
-                lst.Add(entry.Value);
-            return lst;
+            if (major < 6) {
+                if (qt5list == null) {
+                    qt5list = new List<QtModule>(qt5modules.Count);
+                    foreach (var entry in qt5modules)
+                        qt5list.Add(entry.Value);
+                }
+                return qt5list;
+            }
+            if (major == 6) {
+                if (qt6list == null) {
+                    qt6list = new List<QtModule>(qt6modules.Count);
+                    foreach (var entry in qt6modules)
+                        qt6list.Add(entry.Value);
+                }
+                return qt6list;
+            }
+            if (major > 6)
+                throw new QtVSException("Unsupported Qt version.");
+            return null;
         }
 
         private QtModules()
         {
-            var uri = new Uri(
-                System.Reflection.Assembly.GetExecutingAssembly().EscapedCodeBase);
-            var pkgInstallPath = Path.GetDirectoryName(
-                Uri.UnescapeDataString(uri.AbsolutePath)) + @"\";
+            var uri = new Uri(System.Reflection.Assembly.GetExecutingAssembly().EscapedCodeBase);
+            var pkgInstallPath = Path.GetDirectoryName(Uri.UnescapeDataString(uri.AbsolutePath));
 
-            var modulesFile = Path.Combine(pkgInstallPath, "qtmodules.xml");
+            FillModules(Path.Combine(pkgInstallPath, "qtmodules.xml"), "5", ref qt5modules);
+            FillModules(Path.Combine(pkgInstallPath, "qt6modules.xml"), "6", ref qt6modules);
+        }
+
+        private void FillModules(string modulesFile, string major, ref Dictionary<int, QtModule> dict)
+        {
             if (!File.Exists(modulesFile))
                 return;
 
@@ -85,11 +106,10 @@
 
             foreach (var xModule in xml.Elements("QtVsTools").Elements("Module")) {
                 int id = (int)xModule.Attribute("Id");
-                QtModule module = new QtModule(id);
+                QtModule module = new QtModule(id, major);
                 module.Name = (string)xModule.Element("Name");
                 module.Selectable = ((string)xModule.Element("Selectable") == "true");
                 module.LibraryPrefix = (string)xModule.Element("LibraryPrefix");
-                module.HasDLL = ((string)xModule.Element("HasDLL") == "true");
                 module.proVarQT = (string)xModule.Element("proVarQT");
                 module.proVarCONFIG = (string)xModule.Element("proVarCONFIG");
                 module.IncludePath = xModule.Elements("IncludePath")
@@ -106,7 +126,7 @@
                     Messages.Print("\r\nCritical error: incorrect format of qtmodules.xml");
                     throw new QtVSException("qtmodules.xml");
                 }
-                modules.Add(id, module);
+                dict.Add(id, module);
             }
         }
     }

--
Gitblit v1.9.1