From d1fd23100a6ce4e6f881e6567451c96a3d543da6 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Fri, 11 Feb 2022 14:00:22 +0200 Subject: [PATCH] QmlDesigner: Fix assets library warning case Fixed a warning that appears if the search moves from the "no match found" case to a match case. Also added a small optimization to searching. Change-Id: I9e4759fe00959bcbe1a7018c1bdc6cc43069fca7 Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- .../qmldesigner/itemLibraryQmlSources/Assets.qml | 2 +- .../components/assetslibrary/assetslibrarymodel.cpp | 10 ++++++++-- .../components/assetslibrary/assetslibrarymodel.h | 3 ++- .../components/assetslibrary/assetslibrarywidget.cpp | 9 +++++---- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml index 2efe499f0f6..872afff1ac8 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml @@ -445,7 +445,7 @@ Item { hideHeader: dirDepth === 0 showLeftBorder: dirDepth > 0 expanded: dirExpanded - visible: !assetsModel.isEmpty && dirVisible + visible: dirVisible expandOnClick: false useDefaulContextMenu: false diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp index 0470c81ee3a..9eb49912eb0 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp @@ -341,8 +341,14 @@ void AssetsLibraryModel::setRootPath(const QString &path) beginResetModel(); m_assetsDir = new AssetsLibraryDir(path, 0, true, this); - bool noAssets = parseDirRecursive(m_assetsDir, 1); - setIsEmpty(noAssets); + bool isEmpty = parseDirRecursive(m_assetsDir, 1); + setIsEmpty(isEmpty); + + bool noAssets = m_searchText.isEmpty() && isEmpty; + // noAssets: the model has no asset files (project has no assets added) + // isEmpty: the model has no asset files (assets could exist but are filtered out) + + m_assetsDir->setDirVisible(!noAssets); // if there are no assets, hide all empty asset folders endResetModel(); } diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h index 7651ae1a224..b27d1267866 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.h @@ -59,6 +59,8 @@ public: void setRootPath(const QString &path); void setSearchText(const QString &searchText); + bool isEmpty() const; + static const QStringList &supportedImageSuffixes(); static const QStringList &supportedFragmentShaderSuffixes(); static const QStringList &supportedShaderSuffixes(); @@ -93,7 +95,6 @@ signals: private: const QSet &supportedSuffixes() const; - bool isEmpty() const; void setIsEmpty(bool empty); SynchronousImageCache &m_fontImageCache; diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp index f51e070bf6a..0ead75ccea3 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp @@ -201,10 +201,11 @@ QList AssetsLibraryWidget::createToolBarWidgets() void AssetsLibraryWidget::handleSearchfilterChanged(const QString &filterText) { - if (filterText != m_filterText) { - m_filterText = filterText; - updateSearch(); - } + if (filterText == m_filterText || (m_assetsModel->isEmpty() && filterText.contains(m_filterText))) + return; + + m_filterText = filterText; + updateSearch(); } void AssetsLibraryWidget::handleAddAsset()