]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Merge branch 'work/zakharafoniam/useful-groups' of https://invent.kde.org/zakharafoni...
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index b77592b0ec9ca839f2b18c10f944f05ddc3b946d..2133eef79e5fc57bc2a67d0184a791d82d7a3d8a 100644 (file)
@@ -946,6 +946,15 @@ QList<KFileItemModel::RoleInfo> KFileItemModel::rolesInformation()
     return rolesInfo;
 }
 
+QList<KFileItemModel::RoleInfo> KFileItemModel::extraGroupingInformation()
+{
+    static QList<RoleInfo> rolesInfo{
+        {QByteArray("none"),         kli18nc("@label", "No grouping").toString(),       nullptr,     nullptr,     false,      false},
+        {QByteArray("followSort"),   kli18nc("@label", "Follow sorting").toString(),    nullptr,    nullptr,     false,      false}
+    };
+    return rolesInfo;
+}
+
 void KFileItemModel::onGroupedSortingChanged(bool current)
 {
     Q_UNUSED(current)
@@ -975,14 +984,11 @@ void KFileItemModel::onSortRoleChanged(const QByteArray &current, 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();
-    }
+    resortAllItems();
 }
 
 void KFileItemModel::onGroupRoleChanged(const QByteArray &current, const QByteArray &previous, bool resortItems)
@@ -1008,14 +1014,11 @@ void KFileItemModel::onGroupRoleChanged(const QByteArray &current, 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();
-    }
+    resortAllItems();
 }
 
 void KFileItemModel::loadSortingSettings()
@@ -1040,7 +1043,7 @@ void KFileItemModel::loadSortingSettings()
     // Workaround for bug https://bugreports.qt.io/browse/QTBUG-69361
     // Force the clean state of QCollator in single thread to avoid thread safety problems in sort
     m_collator.compare(QString(), QString());
-    m_dirSizeMode = ContentDisplaySettings::directorySizeMode();
+    ContentDisplaySettings::self();
 }
 
 void KFileItemModel::resortAllItems()
@@ -1716,9 +1719,9 @@ QList<KFileItemModel::ItemData *> KFileItemModel::createItemDataList(const QUrl
     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:
@@ -1755,35 +1758,12 @@ void KFileItemModel::prepareItemsForSorting(QList<ItemData *> &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<ItemData *> &itemDataList)
+{
+    prepareItemsWithRole(itemDataList, m_sortRole);
+    prepareItemsWithRole(itemDataList, m_groupRole);
 }
 
 int KFileItemModel::expandedParentsCount(const ItemData *data)
@@ -2131,7 +2111,7 @@ bool KFileItemModel::lessThan(const ItemData *a, const ItemData *b, const QColla
                 return true;
             }
         }
-        if (m_sortDirsFirst || (m_dirSizeMode == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount && m_sortRole == SizeRole)) {
+        if (m_sortDirsFirst || (ContentDisplaySettings::directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount && m_sortRole == SizeRole)) {
             const bool isDirA = a->item.isDir();
             const bool isDirB = b->item.isDir();
             if (isDirA && !isDirB) {
@@ -2185,7 +2165,7 @@ int KFileItemModel::sortRoleCompare(const ItemData *a, const ItemData *b, const
         break;
 
     case SizeRole: {
-        if (m_dirSizeMode == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount && itemA.isDir()) {
+        if (ContentDisplaySettings::directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount && itemA.isDir()) {
             // folders first then
             // items A and B are folders thanks to lessThan checks
             auto valueA = a->values.value("count");
@@ -2543,7 +2523,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::sizeRoleGroup(const ItemData *item
 
     groupInfo.comparable = -1; // None
     if (!item.isNull() && item.isDir()) {
-        if (m_dirSizeMode != ContentDisplaySettings::EnumDirectorySizeMode::ContentSize) {
+        if (ContentDisplaySettings::directorySizeMode() != ContentDisplaySettings::EnumDirectorySizeMode::ContentSize) {
             groupInfo.comparable = 0; // Folders
         } else {
             fileSize = itemData->values.value("size").toULongLong();
@@ -2857,7 +2837,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::ratingRoleGroup(const ItemData *it
     if (withString) {
         // Dolphin does not currently use string representation of star rating
         // as stars are rendered as graphics in group headers.
-        groupInfo.text = i18nc("@item:intext Rated N (stars)", "Rated ") + QString::number(groupInfo.comparable);
+        groupInfo.text = i18nc("@item:intext Rated N (stars)", "Rated %i", QString::number(groupInfo.comparable));
     }
     return groupInfo;
 }