Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmltoolingsettings_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3// Qt-Security score:significant
4
5#ifndef QQMLTOOLINGSETTINGS_P_H
6#define QQMLTOOLINGSETTINGS_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtCore/qstring.h>
20#include <QtCore/qhash.h>
21#include <QtCore/qvariant.h>
22#include <QtCore/qmutex.h>
23#include <QtCore/qset.h>
24#include <QtCore/qdir.h>
25
26QT_BEGIN_NAMESPACE
27
28class QQmlToolingSettings
29{
30public:
31 QQmlToolingSettings(const QString &toolName,
32 const QStringList &recognizedIniSections = { QStringLiteral("General") },
33 const QString &localSettingsFile = { },
34 const QString &globalSettingsFile = { });
35 struct SearchOptions
36 {
37 SearchOptions();
38 SearchOptions(const QString &settingFileName, bool reportFoundSettingsFiles = false,
39 bool isQmllintSilent = false);
40 QString settingsFileName;
41 bool reportFoundSettingsFiles = false;
42 bool isQmllintSilent = false;
43 };
44 struct SearchResult
45 {
46 enum class ResultType { Found, NotFound };
47 ResultType type = ResultType::NotFound;
48 QString iniFilePath;
49 bool isValid() const { return type == ResultType::Found && !iniFilePath.isEmpty(); }
50 };
51
52 class Searcher
53 {
54 public:
55 Searcher(const QString &localSettingsFile, const QString &globalSettingsFile)
56 : m_localSettingsFile(localSettingsFile), m_globalSettingsFile(globalSettingsFile)
57 {
58 }
59 SearchResult search(const QString &path);
60
61 QString localSettingsFile() const { return m_localSettingsFile; }
62
63 private:
64 SearchResult searchDefaultLocation(const QSet<QString> *visitedDirs);
65 SearchResult searchCurrentDirInCache(const QString &dirPath);
66 SearchResult searchDirectoryHierarchy(QSet<QString> *visitedDir, const QString &path);
67
68 const QString m_localSettingsFile;
69 const QString m_globalSettingsFile;
70 QHash<QString, QString> m_seenDirectories;
71 };
72
73 void addOption(const QString &name, const QVariant &defaultValue = QVariant());
74 SearchResult search(const QString &path, const SearchOptions &options = {});
75 bool writeDefaults() const;
76
77 void setValue(const QString &name, QVariant value);
78 QVariant value(const QString &name) const;
79 QStringList valueAsStringList(const QString &name) const;
80
81 static void resolveRelativeImportPaths(const QString &filePath, QStringList *paths);
82 QStringList valueAsAbsolutePathList(const QString &name,
83 const QString &baseForRelativePaths) const;
84 bool isSet(const QString &name) const;
85
86 bool reportConfigForFiles(const QStringList &files);
87 auto asKeyValueRange() const { return m_values.asKeyValueRange(); };
88
89 QString currentSettingsPath() const { return m_currentSettingsPath; }
90
91protected:
92 QString m_currentSettingsPath;
93 QVariantHash m_values;
94 Searcher m_searcher;
95 QStringList m_recognizedIniSections; // can be empty to skip ini section name check
96
97 SearchResult read(const QString &settingsFilePath, SearchOptions options);
98};
99
100class QQmlToolingSharedSettings : private QQmlToolingSettings
101{
102public:
103 QQmlToolingSharedSettings(const QString &toolName) : QQmlToolingSettings(toolName) { }
104
105 void addOption(const QString &name, const QVariant &defaultValue = QVariant())
106 {
107 QMutexLocker lock(&m_mutex);
108 QQmlToolingSettings::addOption(name, defaultValue);
109 }
110
111 bool writeDefaults() const
112 {
113 QMutexLocker lock(&m_mutex);
114 return QQmlToolingSettings::writeDefaults();
115 }
116
117 SearchResult search(const QString &path, const SearchOptions &options = {})
118 {
119 QMutexLocker lock(&m_mutex);
120 return QQmlToolingSettings::search(path, options);
121 }
122
123 QVariant value(const QString &name) const
124 {
125 QMutexLocker lock(&m_mutex);
126 return QQmlToolingSettings::value(name);
127 }
128
129 QStringList valueAsStringList(const QString &name) const
130 {
131 QMutexLocker lock(&m_mutex);
132 return QQmlToolingSettings::valueAsStringList(name);
133 }
134
136 const QString &baseForRelativePaths) const
137 {
138 QMutexLocker lock(&m_mutex);
139 return QQmlToolingSettings::valueAsAbsolutePathList(name, baseForRelativePaths);
140 }
141
142 bool isSet(const QString &name) const
143 {
144 QMutexLocker lock(&m_mutex);
145 return QQmlToolingSettings::isSet(name);
146 }
147
148private:
149 mutable QMutex m_mutex;
150};
151
152QT_END_NAMESPACE
153
154#endif // QQMLTOOLINGSETTINGS_P_H
QQmlToolingSharedSettings(const QString &toolName)
QVariant value(const QString &name) const
SearchResult search(const QString &path, const SearchOptions &options={})
void addOption(const QString &name, const QVariant &defaultValue=QVariant())
QStringList valueAsAbsolutePathList(const QString &name, const QString &baseForRelativePaths) const
bool isSet(const QString &name) const
QStringList valueAsStringList(const QString &name) const
static QString findIniFile(const QString &local, const QString &global)