diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp index 1cc032090e2..3176d1ebb70 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp @@ -102,6 +102,7 @@ void ItemLibraryCategoriesModel::expandCategories(bool expand) for (const auto &category : std::as_const(m_categoryList)) { if (category->categoryExpanded() != expand) { category->setExpanded(expand); + ItemLibraryModel::saveExpandedState(expand, category->categoryName()); emit dataChanged(index(i), index(i), {m_roleNames.key("categoryExpanded")}); } ++i; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp index 55ef88a97c6..1c5b8bfcb5f 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp @@ -60,7 +60,7 @@ QObject *ItemLibraryCategory::itemModel() return &m_itemModel; } -bool ItemLibraryCategory::updateItemVisibility(const QString &searchText, bool *changed) +bool ItemLibraryCategory::updateItemVisibility(const QString &searchText, bool *changed, bool expand) { bool hasVisibleItems = false; @@ -81,7 +81,7 @@ bool ItemLibraryCategory::updateItemVisibility(const QString &searchText, bool * } // expand category if it has an item matching search criteria - if (hasVisibleItems && !categoryExpanded()) + if (expand && hasVisibleItems && !categoryExpanded()) setExpanded(true); return hasVisibleItems; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h index ad3f1579a00..d99d4ea4dc5 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h @@ -50,7 +50,7 @@ public: void addItem(ItemLibraryItem *item); QObject *itemModel(); - bool updateItemVisibility(const QString &searchText, bool *changed); + bool updateItemVisibility(const QString &searchText, bool *changed, bool expand = false); bool setVisible(bool isVisible); bool isVisible() const; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp index 649d879895d..d0a87013dd8 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp @@ -95,14 +95,14 @@ void ItemLibraryImport::expandCategories(bool expand) m_categoryModel.expandCategories(expand); } -bool ItemLibraryImport::updateCategoryVisibility(const QString &searchText, bool *changed) +bool ItemLibraryImport::updateCategoryVisibility(const QString &searchText, bool *changed, bool expand) { bool hasVisibleCategories = false; *changed = false; for (const auto &category : m_categoryModel.categorySections()) { bool categoryChanged = false; - bool hasVisibleItems = category->updateItemVisibility(searchText, &categoryChanged); + bool hasVisibleItems = category->updateItemVisibility(searchText, &categoryChanged, expand); categoryChanged |= category->setVisible(hasVisibleItems); *changed |= categoryChanged; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h index 8993dfcb8b6..ed60c1cffe2 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h @@ -67,7 +67,7 @@ public: void addCategory(ItemLibraryCategory *category); QObject *categoryModel(); - bool updateCategoryVisibility(const QString &searchText, bool *changed); + bool updateCategoryVisibility(const QString &searchText, bool *changed, bool expand = false); bool setVisible(bool isVisible); void setImportUsed(bool importUsed); void sortCategorySections(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 4def2f46dc3..e7276750386 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -163,7 +163,7 @@ void ItemLibraryModel::setSearchText(const QString &searchText) m_searchText = lowerSearchText; bool changed = false; - updateVisibility(&changed); + updateVisibility(&changed, !m_searchText.isEmpty()); } } @@ -374,18 +374,18 @@ void ItemLibraryModel::updateUsedImports(const QList &usedImports) } } -void ItemLibraryModel::updateVisibility(bool *changed) +void ItemLibraryModel::updateVisibility(bool *changed, bool expand) { for (ItemLibraryImport *import : std::as_const(m_importList)) { bool categoryChanged = false; - bool hasVisibleItems = import->updateCategoryVisibility(m_searchText, &categoryChanged); + bool hasVisibleItems = import->updateCategoryVisibility(m_searchText, &categoryChanged, expand); *changed |= categoryChanged; if (import->sectionType() == ItemLibraryImport::SectionType::Unimported) *changed |= import->setVisible(!m_searchText.isEmpty()); // expand import if it has an item matching search criteria - if (hasVisibleItems && !import->importExpanded()) + if (expand && hasVisibleItems && !import->importExpanded()) import->setImportExpanded(); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 2412550a3a0..8d592e29cc4 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -72,7 +72,7 @@ public: Import entryToImport(const ItemLibraryEntry &entry); private: - void updateVisibility(bool *changed); + void updateVisibility(bool *changed, bool expand = false); void addRoleNames(); void sortSections(); void clearSections();