From 9aaf3054106311d8ef49174e32f0ad03dcbe3fca Mon Sep 17 00:00:00 2001 From: Zakhar Afonin Date: Sat, 22 Jun 2024 12:31:29 +0300 Subject: [PATCH] Some code cleanup as per suggestions --- src/kitemviews/kfileitemlistview.cpp | 3 +- src/kitemviews/kfileitemmodel.cpp | 49 +++++----------------------- src/kitemviews/kfileitemmodel.h | 10 ++++-- src/kitemviews/kitemmodelbase.cpp | 14 ++++---- src/kitemviews/kitemmodelbase.h | 10 +++--- 5 files changed, 30 insertions(+), 56 deletions(-) diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index d763fe2879..d58a1a8baf 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -452,8 +452,9 @@ void KFileItemListView::applyRolesToModel() roles.insert("expandedParentsCount"); } - // Assure that the role that is used for sorting will be determined + // Assure that the roles used for sorting and grouping will be determined roles.insert(fileItemModel->sortRole()); + roles.insert(fileItemModel->groupRole()); fileItemModel->setRoles(roles); m_modelRolesUpdater->setRoles(roles); diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index b77592b0ec..9464c7e09b 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -975,14 +975,10 @@ void KFileItemModel::onSortRoleChanged(const QByteArray ¤t, const QByteArr } } -void KFileItemModel::onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems) +void KFileItemModel::onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) { Q_UNUSED(current) Q_UNUSED(previous) - - if (resortItems) { - resortAllItems(); - } } void KFileItemModel::onGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous, bool resortItems) @@ -1008,14 +1004,10 @@ void KFileItemModel::onGroupRoleChanged(const QByteArray ¤t, const QByteAr } } -void KFileItemModel::onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems) +void KFileItemModel::onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) { Q_UNUSED(current) Q_UNUSED(previous) - - if (resortItems) { - resortAllItems(); - } } void KFileItemModel::loadSortingSettings() @@ -1716,9 +1708,9 @@ QList KFileItemModel::createItemDataList(const QUrl return itemDataList; } -void KFileItemModel::prepareItemsForSorting(QList &itemDataList) +void KFileItemModel::prepareItemsWithRole(QList &itemDataList, RoleType roleType) { - switch (m_sortRole) { + switch (roleType) { case ExtensionRole: case PermissionsRole: case OwnerRole: @@ -1755,35 +1747,12 @@ void KFileItemModel::prepareItemsForSorting(QList &itemDataList) // DateRole). break; } - switch (m_groupRole) { - case ExtensionRole: - case PermissionsRole: - case OwnerRole: - case GroupRole: - case DestinationRole: - case PathRole: - case DeletionTimeRole: - for (ItemData *itemData : std::as_const(itemDataList)) { - if (itemData->values.isEmpty()) { - itemData->values = retrieveData(itemData->item, itemData->parent); - } - } - break; +} - case TypeRole: - for (ItemData *itemData : std::as_const(itemDataList)) { - if (itemData->values.isEmpty()) { - const KFileItem item = itemData->item; - if (item.isDir() || item.isMimeTypeKnown()) { - itemData->values = retrieveData(itemData->item, itemData->parent); - } - } - } - break; - - default: - break; - } +void KFileItemModel::prepareItemsForSorting(QList &itemDataList) +{ + prepareItemsWithRole(itemDataList, m_sortRole); + prepareItemsWithRole(itemDataList, m_groupRole); } int KFileItemModel::expandedParentsCount(const ItemData *data) diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index fc2f1b6c8c..edc77457ba 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -293,9 +293,9 @@ Q_SIGNALS: protected: void onGroupedSortingChanged(bool current) override; void onSortRoleChanged(const QByteArray ¤t, const QByteArray &previous, bool resortItems = true) override; - void onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems = true) override; + void onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) override; void onGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous, bool resortItems = true) override; - void onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems = true) override; + void onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) override; private Q_SLOTS: /** @@ -396,6 +396,12 @@ private: */ QList createItemDataList(const QUrl &parentUrl, const KFileItemList &items) const; + /** + * Helper method for prepareItemsForSorting(). + * For a set role, fills 'values' of ItemData non-lazily. + */ + void prepareItemsWithRole(QList &itemDataList, RoleType roleType); + /** * Prepares the items for sorting. Normally, the hash 'values' in ItemData is filled * lazily to save time and memory, but for some sort roles, it is expected that the diff --git a/src/kitemviews/kitemmodelbase.cpp b/src/kitemviews/kitemmodelbase.cpp index b846318ee7..2f8e1e4a30 100644 --- a/src/kitemviews/kitemmodelbase.cpp +++ b/src/kitemviews/kitemmodelbase.cpp @@ -68,12 +68,12 @@ QByteArray KItemModelBase::sortRole() const return m_sortRole; } -void KItemModelBase::setSortOrder(Qt::SortOrder order, bool resortItems) +void KItemModelBase::setSortOrder(Qt::SortOrder order) { if (order != m_sortOrder) { const Qt::SortOrder previous = m_sortOrder; m_sortOrder = order; - onSortOrderChanged(order, previous, resortItems); + onSortOrderChanged(order, previous); Q_EMIT sortOrderChanged(order, previous); } } @@ -93,12 +93,12 @@ QByteArray KItemModelBase::groupRole() const return m_groupRole; } -void KItemModelBase::setGroupOrder(Qt::SortOrder order, bool resortItems) +void KItemModelBase::setGroupOrder(Qt::SortOrder order) { if (order != m_groupOrder) { const Qt::SortOrder previous = m_groupOrder; m_groupOrder = order; - onGroupOrderChanged(order, previous, resortItems); + onGroupOrderChanged(order, previous); Q_EMIT groupOrderChanged(order, previous); } } @@ -180,11 +180,10 @@ void KItemModelBase::onSortRoleChanged(const QByteArray ¤t, const QByteArr Q_UNUSED(resortItems) } -void KItemModelBase::onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems) +void KItemModelBase::onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) { Q_UNUSED(current) Q_UNUSED(previous) - Q_UNUSED(resortItems) } void KItemModelBase::onGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous, bool resortItems) @@ -194,11 +193,10 @@ void KItemModelBase::onGroupRoleChanged(const QByteArray ¤t, const QByteAr Q_UNUSED(resortItems) } -void KItemModelBase::onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems) +void KItemModelBase::onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) { Q_UNUSED(current) Q_UNUSED(previous) - Q_UNUSED(resortItems) } QUrl KItemModelBase::url(int index) const diff --git a/src/kitemviews/kitemmodelbase.h b/src/kitemviews/kitemmodelbase.h index c336a07265..bc8ab64427 100644 --- a/src/kitemviews/kitemmodelbase.h +++ b/src/kitemviews/kitemmodelbase.h @@ -81,7 +81,7 @@ public: * called so that model-implementations can react on the sort order change. Afterwards the * signal sortOrderChanged() will be emitted. */ - void setSortOrder(Qt::SortOrder order, bool resortItems = true); + void setSortOrder(Qt::SortOrder order); Qt::SortOrder sortOrder() const; /** @@ -98,7 +98,7 @@ public: * called so that model-implementations can react on the group order change. Afterwards the * signal groupOrderChanged() will be emitted. */ - void setGroupOrder(Qt::SortOrder order, bool resortItems = true); + void setGroupOrder(Qt::SortOrder order); Qt::SortOrder groupOrder() const; /** @@ -293,7 +293,7 @@ protected: * itemsRemoved() signal for all items, reorder the items internally and to emit a * itemsInserted() signal afterwards. */ - virtual void onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems = true); + virtual void onSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous); /** * Is invoked if the sort role has been changed by KItemModelBase::setSortRole(). Allows @@ -304,7 +304,7 @@ protected: * itemsInserted() signal afterwards. * The implementation should resort only if \a regroupItems is true. */ - virtual void onGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous, bool resortItems = true); + virtual void onGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous, bool regroupItems = true); /** * Is invoked if the sort order has been changed by KItemModelBase::setSortOrder(). Allows @@ -314,7 +314,7 @@ protected: * itemsRemoved() signal for all items, reorder the items internally and to emit a * itemsInserted() signal afterwards. */ - virtual void onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous, bool resortItems = true); + virtual void onGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous); private: bool m_groupedSorting;