Наша сборка Qt VS Tools
giy
2022-09-02 ca47896204482bf4a6979e3838bf7f09f61cebeb
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);
            }
        }
    }