diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2023-01-12 17:53:10 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2023-01-13 11:24:58 +0000 |
commit | f2b6b669a3ae18a54612e20b72e993c54d48f2e7 (patch) | |
tree | 29680f76bd47183fed8aeb7c350b46c0c5ad51cf | |
parent | 4aea4ea693b2964d60a10c81df13f91274008875 (diff) | |
download | qt-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>
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 |