4#include <QtCore/QFileSelector>
5#include <QtQml/QQmlAbstractUrlInterceptor>
6#include <QtQml/private/qqmlengine_p.h>
7#include <QtQml/private/qqmlapplicationengine_p.h>
8#include <qobjectdefs.h>
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
61
62
63
64
66QQmlFileSelector::QQmlFileSelector(QQmlEngine* engine, QObject* parent)
67 : QObject(*(
new QQmlFileSelectorPrivate), parent)
69 Q_D(QQmlFileSelector);
71 d->engine->addUrlInterceptor(d->myInstance.data());
75
76
77QQmlFileSelector::~QQmlFileSelector()
79 Q_D(QQmlFileSelector);
81 d->engine->removeUrlInterceptor(d->myInstance.data());
87
88
89
90QFileSelector *QQmlFileSelector::selector()
const noexcept
92 Q_D(
const QQmlFileSelector);
96QQmlFileSelectorPrivate::QQmlFileSelectorPrivate()
98 Q_Q(QQmlFileSelector);
100 selector =
new QFileSelector(q);
101 myInstance.reset(
new QQmlFileSelectorInterceptor(
this));
104QQmlFileSelectorPrivate::~QQmlFileSelectorPrivate()
111
112
113
114
116void QQmlFileSelector::setSelector(QFileSelector *selector)
118 Q_D(QQmlFileSelector);
120 if (d->ownSelector) {
122 d->ownSelector =
false;
124 d->selector = selector;
126 if (!d->ownSelector) {
127 d->ownSelector =
true;
128 d->selector =
new QFileSelector(
this);
134
135
136
137
138void QQmlFileSelector::setExtraSelectors(
const QStringList &strings)
140 Q_D(QQmlFileSelector);
141 d->selector->setExtraSelectors(strings);
144#if QT_DEPRECATED_SINCE(6
, 0
)
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160QQmlFileSelector* QQmlFileSelector::get(QQmlEngine* engine)
162 QQmlEnginePrivate *enginePrivate = QQmlEnginePrivate::get(engine);
164 if (qobject_cast<QQmlApplicationEngine *>(engine)) {
165 auto *appEnginePrivate =
static_cast<QQmlApplicationEnginePrivate *>(enginePrivate);
166 appEnginePrivate->ensureInitialized();
169 const QUrl nonEmptyInvalid(QLatin1String(
":"));
170 const auto interceptors = QQmlTypeLoader::get(engine)->urlInterceptors();
171 for (QQmlAbstractUrlInterceptor *interceptor : interceptors) {
172 const QUrl result = interceptor->intercept(
173 nonEmptyInvalid, QQmlAbstractUrlInterceptor::UrlString);
174 if (result.scheme() == QLatin1String(
"type")
175 && result.path() == QLatin1String(
"fileselector")) {
176 return static_cast<QQmlFileSelectorInterceptor *>(interceptor)->d->q_func();
184
185
186QQmlFileSelectorInterceptor::QQmlFileSelectorInterceptor(QQmlFileSelectorPrivate* pd)
192
193
194QUrl QQmlFileSelectorInterceptor::intercept(
const QUrl &path, DataType type)
196 if (!path.isEmpty() && !path.isValid())
197 return QUrl(QLatin1String(
"type:fileselector"));
199 return type == QQmlAbstractUrlInterceptor::QmldirFile
201 : d->selector->select(path);
206#include "moc_qqmlfileselector.cpp"