aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlcomponent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlcomponent.cpp')
-rw-r--r--src/qml/qml/qqmlcomponent.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp
index 73e523fec6..7d691db750 100644
--- a/src/qml/qml/qqmlcomponent.cpp
+++ b/src/qml/qml/qqmlcomponent.cpp
@@ -1335,35 +1335,48 @@ void QQmlComponent::loadFromModule(QAnyStringView uri, QAnyStringView typeName,
QQmlComponent::CompilationMode mode)
{
Q_D(QQmlComponent);
+ auto [status, type] = d->prepareLoadFromModule(uri, typeName);
+ d->completeLoadFromModule(uri, typeName, type, status, mode);
+}
- auto enginePriv = QQmlEnginePrivate::get(d->engine);
+LoadHelper::ResolveTypeResult QQmlComponentPrivate::prepareLoadFromModule(QAnyStringView uri,
+ QAnyStringView typeName)
+{
+ auto enginePriv = QQmlEnginePrivate::get(engine);
// LoadHelper must be on the Heap as it derives from QQmlRefCount
auto loadHelper = QQml::makeRefPointer<LoadHelper>(&enginePriv->typeLoader, uri);
- auto [moduleStatus, type] = loadHelper->resolveType(typeName);
+ return loadHelper->resolveType(typeName);
+}
+
+void QQmlComponentPrivate::completeLoadFromModule(QAnyStringView uri, QAnyStringView typeName, QQmlType type,
+ LoadHelper::ResolveTypeResult::Status moduleStatus,
+ QQmlComponent::CompilationMode mode)
+{
+ Q_Q(QQmlComponent);
+
auto reportError = [&](QString msg) {
QQmlError error;
error.setDescription(msg);
- d->state.errors.push_back(std::move(error));
- emit statusChanged(Error);
+ state.errors.push_back(std::move(error));
+ emit q->statusChanged(q->Error);
};
if (moduleStatus == LoadHelper::ResolveTypeResult::NoSuchModule) {
- reportError(QLatin1String(R"(No module named "%1" found)")
- .arg(uri.toString()));
+ reportError(QLatin1String(R"(No module named "%1" found)").arg(uri.toString()));
} else if (!type.isValid()) {
reportError(QLatin1String(R"(Module "%1" contains no type named "%2")")
.arg(uri.toString(), typeName.toString()));
} else if (type.isCreatable()) {
- d->clear();
+ clear();
// mimic the progressChanged behavior from loadUrl
- if (d->progress != 0) {
- d->progress = 0;
- emit progressChanged(0);
+ if (progress != 0) {
+ progress = 0;
+ emit q->progressChanged(0);
}
- d->loadedType = type;
- d->progress = 1;
- emit progressChanged(1);
- emit statusChanged(status());
+ loadedType = type;
+ progress = 1;
+ emit q->progressChanged(1);
+ emit q->statusChanged(q->status());
} else if (type.isComposite()) {
loadUrl(type.sourceUrl(), mode);
@@ -1371,16 +1384,14 @@ void QQmlComponent::loadFromModule(QAnyStringView uri, QAnyStringView typeName,
auto baseUrl = type.sourceUrl();
baseUrl.setFragment(QString());
loadUrl(baseUrl, mode);
- if (!isError()) {
- d->inlineComponentName = std::make_unique<QString>(type.elementName());
- Q_ASSERT(!d->inlineComponentName->isEmpty());
+ if (!q->isError()) {
+ inlineComponentName = std::make_unique<QString>(type.elementName());
+ Q_ASSERT(!inlineComponentName->isEmpty());
}
} else if (type.isSingleton() || type.isCompositeSingleton()) {
- reportError(QLatin1String(R"(%1 is a singleton, and cannot be loaded)")
- .arg(typeName.toString()));
+ reportError(QLatin1String(R"(%1 is a singleton, and cannot be loaded)").arg(typeName.toString()));
} else {
- reportError(QLatin1String("Could not load %1, as the type is uncreatable")
- .arg(typeName.toString()));
+ reportError(QLatin1String("Could not load %1, as the type is uncreatable").arg(typeName.toString()));
}
}