summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2023-01-12 17:53:10 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2023-01-13 11:24:58 +0000
commitf2b6b669a3ae18a54612e20b72e993c54d48f2e7 (patch)
tree29680f76bd47183fed8aeb7c350b46c0c5ad51cf
parent4aea4ea693b2964d60a10c81df13f91274008875 (diff)
downloadqt-creator-f2b6b669a3ae18a54612e20b72e993c54d48f2e7.tar.gz
QmlDesigner: Disable add texture/light probe if no valid material lib
Both material library node exists and QtQuick3D imported must be true for these menu items to be enabled. Since this information is only needed in context menu, update the flag only when context menu is shown. Fixes: QDS-8524 Change-Id: I66221bf953b3b542cf7827b46e8c307a9b33acba Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
-rw-r--r--share/qtcreator/qmldesigner/itemLibraryQmlSources/AssetsContextMenu.qml8
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp5
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp19
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h9
4 files changed, 41 insertions, 0 deletions
diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/AssetsContextMenu.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/AssetsContextMenu.qml
index 3337be90ef..4e537bb624 100644
--- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/AssetsContextMenu.qml
+++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/AssetsContextMenu.qml
@@ -25,6 +25,8 @@ StudioControls.Menu {
function openContextMenuForRoot(rootModelIndex, dirPath, dirName, onFolderCreated)
{
+ rootView.updateHasMaterialLibrary()
+
root.__onFolderCreated = onFolderCreated
root.__fileIndex = ""
root.__dirPath = dirPath
@@ -37,6 +39,8 @@ StudioControls.Menu {
function openContextMenuForDir(dirModelIndex, dirPath, dirName, allExpandedState,
onFolderCreated, onFolderRenamed)
{
+ rootView.updateHasMaterialLibrary()
+
root.__onFolderCreated = onFolderCreated
root.__onFolderRenamed = onFolderRenamed
root.__dirPath = dirPath
@@ -58,6 +62,8 @@ StudioControls.Menu {
addTexturesItem.text = qsTr("Add Texture")
}
+ rootView.updateHasMaterialLibrary()
+
root.__onFolderCreated = onFolderCreated
root.__selectedAssetPathsList = selectedAssetPathsList
root.__fileIndex = fileIndex
@@ -91,6 +97,7 @@ StudioControls.Menu {
StudioControls.MenuItem {
id: addTexturesItem
text: qsTr("Add Texture")
+ enabled: rootView.hasMaterialLibrary
visible: root.__fileIndex && assetsModel.allFilePathsAreImages(root.__selectedAssetPathsList)
height: addTexturesItem.visible ? addTexturesItem.implicitHeight : 0
onTriggered: rootView.addTextures(root.__selectedAssetPathsList)
@@ -99,6 +106,7 @@ StudioControls.Menu {
StudioControls.MenuItem {
id: addLightProbes
text: qsTr("Add Light Probe")
+ enabled: rootView.hasMaterialLibrary
visible: root.__fileIndex && root.__selectedAssetPathsList.length === 1
&& assetsModel.allFilePathsAreImages(root.__selectedAssetPathsList)
height: addLightProbes.visible ? addLightProbes.implicitHeight : 0
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp
index c43bd48533..17d8da5bb2 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp
@@ -69,6 +69,11 @@ WidgetInfo AssetsLibraryView::widgetInfo()
m_createTextures.execute(filePaths, mode, m_sceneId);
});
});
+
+ connect(m_widget, &AssetsLibraryWidget::hasMaterialLibraryUpdateRequested, this, [&] () {
+ m_widget->setHasMaterialLibrary(model() && materialLibraryNode().isValid()
+ && model()->hasImport("QtQuick3D"));
+ });
}
return createWidgetInfo(m_widget.data(), "Assets", WidgetInfo::LeftPane, 0, tr("Assets"));
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
index 032317eb4d..0772fd5f31 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
@@ -160,6 +160,25 @@ void AssetsLibraryWidget::addLightProbe(const QString &filePath)
emit addTexturesRequested({filePath}, AddTextureMode::LightProbe);
}
+void AssetsLibraryWidget::updateHasMaterialLibrary()
+{
+ emit hasMaterialLibraryUpdateRequested();
+}
+
+bool AssetsLibraryWidget::hasMaterialLibrary() const
+{
+ return m_hasMaterialLibrary;
+}
+
+void AssetsLibraryWidget::setHasMaterialLibrary(bool enable)
+{
+ if (m_hasMaterialLibrary == enable)
+ return;
+
+ m_hasMaterialLibrary = enable;
+ emit hasMaterialLibraryChanged();
+}
+
void AssetsLibraryWidget::invalidateThumbnail(const QString &id)
{
m_assetsIconProvider->invalidateThumbnail(id);
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
index 2ef59ac958..70c1156782 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
@@ -41,6 +41,8 @@ class AssetsLibraryWidget : public QFrame
{
Q_OBJECT
+ Q_PROPERTY(bool hasMaterialLibrary READ hasMaterialLibrary NOTIFY hasMaterialLibraryChanged)
+
public:
AssetsLibraryWidget(AsynchronousImageCache &asynchronousFontImageCache,
SynchronousImageCache &synchronousFontImageCache);
@@ -58,6 +60,9 @@ public:
void setModel(Model *model);
static QPair<QString, QByteArray> getAssetTypeAndData(const QString &assetPath);
+ bool hasMaterialLibrary() const;
+ void setHasMaterialLibrary(bool enable);
+
Q_INVOKABLE void startDragAsset(const QStringList &assetPaths, const QPointF &mousePos);
Q_INVOKABLE void handleAddAsset();
Q_INVOKABLE void handleSearchFilterChanged(const QString &filterText);
@@ -80,6 +85,7 @@ public:
Q_INVOKABLE void addTextures(const QStringList &filePaths);
Q_INVOKABLE void addLightProbe(const QString &filePaths);
+ Q_INVOKABLE void updateHasMaterialLibrary();
signals:
void itemActivated(const QString &itemName);
@@ -88,6 +94,8 @@ signals:
const QString &targetDirPath);
void directoryCreated(const QString &path);
void addTexturesRequested(const QStringList &filePaths, QmlDesigner::AddTextureMode mode);
+ void hasMaterialLibraryUpdateRequested();
+ void hasMaterialLibraryChanged();
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
@@ -114,6 +122,7 @@ private:
bool m_updateRetry = false;
QString m_filterText;
QPoint m_dragStartPoint;
+ bool m_hasMaterialLibrary = false;
};
} // namespace QmlDesigner