aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.cpp34
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.h15
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp46
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/import.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/import.cpp15
6 files changed, 91 insertions, 22 deletions
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.cpp
index 441cdc7a69..7cb2a39c0d 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.cpp
@@ -94,7 +94,7 @@ QHash<int, QByteArray> MaterialBrowserBundleModel::roleNames() const
void MaterialBrowserBundleModel::loadMaterialBundle()
{
- if (m_matBundleExists || m_probeMatBundleDir)
+ if (m_matBundleLoaded || m_probeMatBundleDir)
return;
QDir matBundleDir(qEnvironmentVariable("MATERIAL_BUNDLE_PATH"));
@@ -130,7 +130,7 @@ void MaterialBrowserBundleModel::loadMaterialBundle()
}
}
- m_matBundleExists = true;
+ m_matBundleLoaded = true;
QString bundleId = m_matBundleObj.value("id").toString();
@@ -184,20 +184,6 @@ void MaterialBrowserBundleModel::loadMaterialBundle()
});
}
-bool MaterialBrowserBundleModel::hasQuick3DImport() const
-{
- return m_hasQuick3DImport;
-}
-
-void MaterialBrowserBundleModel::setHasQuick3DImport(bool b)
-{
- if (b == m_hasQuick3DImport)
- return;
-
- m_hasQuick3DImport = b;
- emit hasQuick3DImportChanged();
-}
-
bool MaterialBrowserBundleModel::hasMaterialRoot() const
{
return m_hasMaterialRoot;
@@ -212,6 +198,11 @@ void MaterialBrowserBundleModel::setHasMaterialRoot(bool b)
emit hasMaterialRootChanged();
}
+bool MaterialBrowserBundleModel::matBundleExists() const
+{
+ return m_matBundleLoaded && m_quick3dMajorVersion == 6 && m_quick3dMinorVersion >= 3;
+}
+
Internal::BundleImporter *MaterialBrowserBundleModel::bundleImporter() const
{
return m_importer;
@@ -253,6 +244,17 @@ void MaterialBrowserBundleModel::updateImportedState(const QStringList &imported
resetModel();
}
+void MaterialBrowserBundleModel::setQuick3DImportVersion(int major, int minor)
+{
+ bool bundleExisted = matBundleExists();
+
+ m_quick3dMajorVersion = major;
+ m_quick3dMinorVersion = minor;
+
+ if (bundleExisted != matBundleExists())
+ emit matBundleExistsChanged();
+}
+
void MaterialBrowserBundleModel::resetModel()
{
beginResetModel();
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.h
index 459d7c423a..beb445422e 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.h
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserbundlemodel.h
@@ -46,9 +46,8 @@ class MaterialBrowserBundleModel : public QAbstractListModel
{
Q_OBJECT
- Q_PROPERTY(bool matBundleExists MEMBER m_matBundleExists CONSTANT)
+ Q_PROPERTY(bool matBundleExists READ matBundleExists NOTIFY matBundleExistsChanged)
Q_PROPERTY(bool isEmpty MEMBER m_isEmpty NOTIFY isEmptyChanged)
- Q_PROPERTY(bool hasQuick3DImport READ hasQuick3DImport WRITE setHasQuick3DImport NOTIFY hasQuick3DImportChanged)
Q_PROPERTY(bool hasMaterialRoot READ hasMaterialRoot WRITE setHasMaterialRoot NOTIFY hasMaterialRootChanged)
Q_PROPERTY(bool importerRunning MEMBER m_importerRunning NOTIFY importerRunningChanged)
@@ -63,12 +62,13 @@ public:
void setSearchText(const QString &searchText);
void updateImportedState(const QStringList &importedMats);
- bool hasQuick3DImport() const;
- void setHasQuick3DImport(bool b);
+ void setQuick3DImportVersion(int major, int minor);
bool hasMaterialRoot() const;
void setHasMaterialRoot(bool b);
+ bool matBundleExists() const;
+
Internal::BundleImporter *bundleImporter() const;
void resetModel();
@@ -87,6 +87,7 @@ signals:
void bundleMaterialAboutToUnimport(const QmlDesigner::TypeName &type);
void bundleMaterialUnimported(const QmlDesigner::NodeMetaInfo &metaInfo);
void importerRunningChanged();
+ void matBundleExistsChanged();
private:
void loadMaterialBundle();
@@ -98,11 +99,13 @@ private:
Internal::BundleImporter *m_importer = nullptr;
bool m_isEmpty = true;
- bool m_hasQuick3DImport = false;
bool m_hasMaterialRoot = false;
- bool m_matBundleExists = false;
+ bool m_matBundleLoaded = false;
bool m_probeMatBundleDir = false;
bool m_importerRunning = false;
+
+ int m_quick3dMajorVersion = -1;
+ int m_quick3dMinorVersion = -1;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
index 41055988fd..fcb52882f1 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
@@ -43,6 +43,14 @@
#include <qmldesignerconstants.h>
#include <utils/algorithm.h>
+#ifndef QMLDESIGNER_TEST
+#include <projectexplorer/kit.h>
+#include <projectexplorer/session.h>
+#include <projectexplorer/target.h>
+#include <qtsupport/baseqtversion.h>
+#include <qtsupport/qtkitinformation.h>
+#endif
+
#include <QQuickItem>
#include <QRegularExpression>
#include <QTimer>
@@ -289,6 +297,7 @@ void MaterialBrowserView::modelAttached(Model *model)
m_widget->materialBrowserModel()->setHasMaterialRoot(rootModelNode().isSubclassOf("QtQuick3D.Material"));
m_hasQuick3DImport = model->hasImport("QtQuick3D");
+ updateBundleMaterialsQuick3DVersion();
updateBundleMaterialsImportedState();
// Project load is already very busy and may even trigger puppet reset, so let's wait a moment
@@ -482,6 +491,41 @@ void MaterialBrowserView::updateBundleMaterialsImportedState()
m_widget->materialBrowserBundleModel()->updateImportedState(importedBundleMats);
}
+void MaterialBrowserView::updateBundleMaterialsQuick3DVersion()
+{
+ bool hasImport = false;
+ int major = -1;
+ int minor = -1;
+ const QString url {"QtQuick3D"};
+ const auto imports = model()->imports();
+ for (const auto &import : imports) {
+ if (import.url() == url) {
+ hasImport = true;
+ const int importMajor = import.majorVersion();
+ if (major < importMajor) {
+ minor = -1;
+ major = importMajor;
+ }
+ if (major == importMajor)
+ minor = qMax(minor, import.minorVersion());
+ }
+ }
+#ifndef QMLDESIGNER_TEST
+ if (hasImport && major == -1) {
+ // Import without specifying version, so we take the kit version
+ auto target = ProjectExplorer::SessionManager::startupTarget();
+ if (target) {
+ QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(target->kit());
+ if (qtVersion) {
+ major = qtVersion->qtVersion().majorVersion;
+ minor = qtVersion->qtVersion().minorVersion;
+ }
+ }
+ }
+#endif
+ m_widget->materialBrowserBundleModel()->setQuick3DImportVersion(major, minor);
+}
+
ModelNode MaterialBrowserView::getBundleMaterialDefaultInstance(const TypeName &type)
{
const QList<ModelNode> materials = m_widget->materialBrowserModel()->materials();
@@ -511,6 +555,8 @@ void MaterialBrowserView::importsChanged(const QList<Import> &addedImports, cons
bool hasQuick3DImport = model()->hasImport("QtQuick3D");
+ updateBundleMaterialsQuick3DVersion();
+
if (hasQuick3DImport == m_hasQuick3DImport)
return;
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h
index 8d8e225d34..dc81045384 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h
@@ -69,6 +69,7 @@ private:
bool isMaterial(const ModelNode &node) const;
void loadPropertyGroups();
void updateBundleMaterialsImportedState();
+ void updateBundleMaterialsQuick3DVersion();
void applyBundleMaterialToDropTarget(const ModelNode &bundleMat, const NodeMetaInfo &metaInfo = {});
ModelNode getBundleMaterialDefaultInstance(const TypeName &type);
diff --git a/src/plugins/qmldesigner/designercore/include/import.h b/src/plugins/qmldesigner/designercore/include/import.h
index c797a19ae4..7ab87f07c9 100644
--- a/src/plugins/qmldesigner/designercore/include/import.h
+++ b/src/plugins/qmldesigner/designercore/include/import.h
@@ -63,7 +63,9 @@ public:
bool isSameModule(const Import &other) const;
int majorVersion() const;
+ int minorVersion() const;
static int majorFromVersion(const QString &version);
+ static int minorFromVersion(const QString &version);
private:
Import(const QString &url, const QString &file, const QString &version, const QString &alias, const QStringList &importPaths);
diff --git a/src/plugins/qmldesigner/designercore/model/import.cpp b/src/plugins/qmldesigner/designercore/model/import.cpp
index 1c217bf47b..f01e209dfd 100644
--- a/src/plugins/qmldesigner/designercore/model/import.cpp
+++ b/src/plugins/qmldesigner/designercore/model/import.cpp
@@ -102,6 +102,11 @@ int Import::majorVersion() const
return majorFromVersion(m_version);
}
+int Import::minorVersion() const
+{
+ return minorFromVersion(m_version);
+}
+
int Import::majorFromVersion(const QString &version)
{
if (version.isEmpty())
@@ -109,6 +114,16 @@ int Import::majorFromVersion(const QString &version)
return version.split('.').first().toInt();
}
+int Import::minorFromVersion(const QString &version)
+{
+ if (version.isEmpty())
+ return -1;
+ const QStringList parts = version.split('.');
+ if (parts.size() < 2)
+ return -1;
+ return parts[1].toInt();
+}
+
Utils::QHashValueType qHash(const Import &import)
{
return ::qHash(import.url()) ^ ::qHash(import.file()) ^ ::qHash(import.version()) ^ ::qHash(import.alias());