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);
}
}
-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)
}
}
-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()
return itemDataList;
}
-void KFileItemModel::prepareItemsForSorting(QList<ItemData *> &itemDataList)
+void KFileItemModel::prepareItemsWithRole(QList<ItemData *> &itemDataList, RoleType roleType)
{
- switch (m_sortRole) {
+ switch (roleType) {
case ExtensionRole:
case PermissionsRole:
case OwnerRole:
// 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<ItemData *> &itemDataList)
+{
+ prepareItemsWithRole(itemDataList, m_sortRole);
+ prepareItemsWithRole(itemDataList, m_groupRole);
}
int KFileItemModel::expandedParentsCount(const ItemData *data)
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:
/**
*/
QList<ItemData *> 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<ItemData *> &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
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);
}
}
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);
}
}
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)
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
* 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;
/**
* 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;
/**
* 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
* 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
* 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;