forked from qt-creator/qt-creator
QmlDesigner: Preserve item library expand state
Section and category visibility updates always expanded section or category. Now this forced expansion is only done when searching for items. Fixes: QDS-3811 Change-Id: I006124a92086c4851d54407c4ffba0e9c94a854d Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -102,6 +102,7 @@ void ItemLibraryCategoriesModel::expandCategories(bool expand)
|
|||||||
for (const auto &category : std::as_const(m_categoryList)) {
|
for (const auto &category : std::as_const(m_categoryList)) {
|
||||||
if (category->categoryExpanded() != expand) {
|
if (category->categoryExpanded() != expand) {
|
||||||
category->setExpanded(expand);
|
category->setExpanded(expand);
|
||||||
|
ItemLibraryModel::saveExpandedState(expand, category->categoryName());
|
||||||
emit dataChanged(index(i), index(i), {m_roleNames.key("categoryExpanded")});
|
emit dataChanged(index(i), index(i), {m_roleNames.key("categoryExpanded")});
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
|
@@ -60,7 +60,7 @@ QObject *ItemLibraryCategory::itemModel()
|
|||||||
return &m_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;
|
bool hasVisibleItems = false;
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ bool ItemLibraryCategory::updateItemVisibility(const QString &searchText, bool *
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expand category if it has an item matching search criteria
|
// expand category if it has an item matching search criteria
|
||||||
if (hasVisibleItems && !categoryExpanded())
|
if (expand && hasVisibleItems && !categoryExpanded())
|
||||||
setExpanded(true);
|
setExpanded(true);
|
||||||
|
|
||||||
return hasVisibleItems;
|
return hasVisibleItems;
|
||||||
|
@@ -50,7 +50,7 @@ public:
|
|||||||
void addItem(ItemLibraryItem *item);
|
void addItem(ItemLibraryItem *item);
|
||||||
QObject *itemModel();
|
QObject *itemModel();
|
||||||
|
|
||||||
bool updateItemVisibility(const QString &searchText, bool *changed);
|
bool updateItemVisibility(const QString &searchText, bool *changed, bool expand = false);
|
||||||
|
|
||||||
bool setVisible(bool isVisible);
|
bool setVisible(bool isVisible);
|
||||||
bool isVisible() const;
|
bool isVisible() const;
|
||||||
|
@@ -95,14 +95,14 @@ void ItemLibraryImport::expandCategories(bool expand)
|
|||||||
m_categoryModel.expandCategories(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;
|
bool hasVisibleCategories = false;
|
||||||
*changed = false;
|
*changed = false;
|
||||||
|
|
||||||
for (const auto &category : m_categoryModel.categorySections()) {
|
for (const auto &category : m_categoryModel.categorySections()) {
|
||||||
bool categoryChanged = false;
|
bool categoryChanged = false;
|
||||||
bool hasVisibleItems = category->updateItemVisibility(searchText, &categoryChanged);
|
bool hasVisibleItems = category->updateItemVisibility(searchText, &categoryChanged, expand);
|
||||||
categoryChanged |= category->setVisible(hasVisibleItems);
|
categoryChanged |= category->setVisible(hasVisibleItems);
|
||||||
|
|
||||||
*changed |= categoryChanged;
|
*changed |= categoryChanged;
|
||||||
|
@@ -67,7 +67,7 @@ public:
|
|||||||
|
|
||||||
void addCategory(ItemLibraryCategory *category);
|
void addCategory(ItemLibraryCategory *category);
|
||||||
QObject *categoryModel();
|
QObject *categoryModel();
|
||||||
bool updateCategoryVisibility(const QString &searchText, bool *changed);
|
bool updateCategoryVisibility(const QString &searchText, bool *changed, bool expand = false);
|
||||||
bool setVisible(bool isVisible);
|
bool setVisible(bool isVisible);
|
||||||
void setImportUsed(bool importUsed);
|
void setImportUsed(bool importUsed);
|
||||||
void sortCategorySections();
|
void sortCategorySections();
|
||||||
|
@@ -163,7 +163,7 @@ void ItemLibraryModel::setSearchText(const QString &searchText)
|
|||||||
m_searchText = lowerSearchText;
|
m_searchText = lowerSearchText;
|
||||||
|
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
updateVisibility(&changed);
|
updateVisibility(&changed, !m_searchText.isEmpty());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,18 +374,18 @@ void ItemLibraryModel::updateUsedImports(const QList<Import> &usedImports)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemLibraryModel::updateVisibility(bool *changed)
|
void ItemLibraryModel::updateVisibility(bool *changed, bool expand)
|
||||||
{
|
{
|
||||||
for (ItemLibraryImport *import : std::as_const(m_importList)) {
|
for (ItemLibraryImport *import : std::as_const(m_importList)) {
|
||||||
bool categoryChanged = false;
|
bool categoryChanged = false;
|
||||||
bool hasVisibleItems = import->updateCategoryVisibility(m_searchText, &categoryChanged);
|
bool hasVisibleItems = import->updateCategoryVisibility(m_searchText, &categoryChanged, expand);
|
||||||
*changed |= categoryChanged;
|
*changed |= categoryChanged;
|
||||||
|
|
||||||
if (import->sectionType() == ItemLibraryImport::SectionType::Unimported)
|
if (import->sectionType() == ItemLibraryImport::SectionType::Unimported)
|
||||||
*changed |= import->setVisible(!m_searchText.isEmpty());
|
*changed |= import->setVisible(!m_searchText.isEmpty());
|
||||||
|
|
||||||
// expand import if it has an item matching search criteria
|
// expand import if it has an item matching search criteria
|
||||||
if (hasVisibleItems && !import->importExpanded())
|
if (expand && hasVisibleItems && !import->importExpanded())
|
||||||
import->setImportExpanded();
|
import->setImportExpanded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -72,7 +72,7 @@ public:
|
|||||||
Import entryToImport(const ItemLibraryEntry &entry);
|
Import entryToImport(const ItemLibraryEntry &entry);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateVisibility(bool *changed);
|
void updateVisibility(bool *changed, bool expand = false);
|
||||||
void addRoleNames();
|
void addRoleNames();
|
||||||
void sortSections();
|
void sortSections();
|
||||||
void clearSections();
|
void clearSections();
|
||||||
|
Reference in New Issue
Block a user