]> cloud.milkyroute.net Git - dolphin.git/commitdiff
"Grouped sorting" defaults to true. Grouping is still disabled by default because...
authorZakhar Afonin <zakharafoniam@gmail.com>
Sun, 23 Jun 2024 22:19:31 +0000 (01:19 +0300)
committerZakhar Afonin <zakharafoniam@gmail.com>
Sun, 23 Jun 2024 22:19:31 +0000 (01:19 +0300)
src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kitemmodelbase.cpp
src/tests/kfileitemmodeltest.cpp

index e7afa5288d937eec04f355302ecec6e6a76bb7ee..5b7b781a8fbdc6d8631b63771b9724f92db7e014 100644 (file)
@@ -39,6 +39,7 @@ KFileItemModel::KFileItemModel(QObject *parent)
     , m_sortDirsFirst(true)
     , m_sortHiddenLast(false)
     , m_sortRole(NameRole)
+    , m_groupRole(NoRole)
     , m_sortingProgressPercent(-1)
     , m_roles()
     , m_itemData()
@@ -2439,6 +2440,7 @@ int KFileItemModel::stringCompare(const QString &a, const QString &b, const QCol
 
 KFileItemModel::ItemGroupInfo KFileItemModel::nameRoleGroup(const ItemData *itemData, bool withString) const
 {
+    static bool oldWithString;
     static ItemGroupInfo oldGroupInfo;
     static QChar oldFirstChar;
     ItemGroupInfo groupInfo;
@@ -2450,8 +2452,8 @@ KFileItemModel::ItemGroupInfo KFileItemModel::nameRoleGroup(const ItemData *item
 
     // Use the first character of the name as group indication
     firstChar = name.at(0).toUpper();
-
-    if (firstChar == oldFirstChar) {
+    
+    if (firstChar == oldFirstChar && withString == oldWithString) {
         return oldGroupInfo;
     }
     if (firstChar == QLatin1Char('~') && name.length() > 1) {
@@ -2506,6 +2508,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::nameRoleGroup(const ItemData *item
         }
         groupInfo.comparable = (int)'.';
     }
+    oldWithString = withString;
     oldFirstChar = firstChar;
     oldGroupInfo = groupInfo;
     return groupInfo;
@@ -2547,6 +2550,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::sizeRoleGroup(const ItemData *item
 KFileItemModel::ItemGroupInfo
 KFileItemModel::timeRoleGroup(const std::function<QDateTime(const ItemData *)> &fileTimeCb, const ItemData *itemData, bool withString) const
 {
+    static bool oldWithString;
     static ItemGroupInfo oldGroupInfo;
     static QDate oldFileDate;
     ItemGroupInfo groupInfo;
@@ -2556,6 +2560,9 @@ KFileItemModel::timeRoleGroup(const std::function<QDateTime(const ItemData *)> &
     const QDate fileDate = fileTime.date();
     const int daysDistance = fileDate.daysTo(currentDate);
 
+    if (fileDate == oldFileDate && withString == oldWithString) {
+        return oldGroupInfo;
+    }
     // Simplified grouping algorithm, preserving dates
     // but not taking "pretty printing" into account
     if (currentDate.year() == fileDate.year() && currentDate.month() == fileDate.month()) {
@@ -2759,6 +2766,7 @@ KFileItemModel::timeRoleGroup(const std::function<QDateTime(const ItemData *)> &
             }
         }
     }
+    oldWithString = withString;
     oldFileDate = fileDate;
     oldGroupInfo = groupInfo;
     return groupInfo;
@@ -2766,13 +2774,14 @@ KFileItemModel::timeRoleGroup(const std::function<QDateTime(const ItemData *)> &
 
 KFileItemModel::ItemGroupInfo KFileItemModel::permissionRoleGroup(const ItemData *itemData, bool withString) const
 {
+    static bool oldWithString;
     static ItemGroupInfo oldGroupInfo;
     static QFileDevice::Permissions oldPermissions;
     ItemGroupInfo groupInfo;
 
     const QFileInfo info(itemData->item.url().toLocalFile());
     const QFileDevice::Permissions permissions = info.permissions();
-    if (permissions == oldPermissions) {
+    if (permissions == oldPermissions && withString == oldWithString) {
         return oldGroupInfo;
     }
     groupInfo.comparable = (int)permissions;
@@ -2818,6 +2827,7 @@ KFileItemModel::ItemGroupInfo KFileItemModel::permissionRoleGroup(const ItemData
         others = others.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : others.mid(0, others.length() - 2);
         groupInfo.text = i18nc("@title:group Files and folders by permissions", "User: %1 | Group: %2 | Others: %3", user, group, others);
     }
+    oldWithString = withString;
     oldPermissions = permissions;
     oldGroupInfo = groupInfo;
     return groupInfo;
index 2f8e1e4a308be55ecef3f8cc4d70194f64218478..17716f57f5d52155a5bafaa5e3fe592953a8023d 100644 (file)
@@ -10,7 +10,7 @@
 
 KItemModelBase::KItemModelBase(QObject *parent)
     : QObject(parent)
-    , m_groupedSorting(false)
+    , m_groupedSorting(true)
     , m_sortRole()
     , m_sortOrder(Qt::AscendingOrder)
     , m_groupRole()
@@ -20,7 +20,7 @@ KItemModelBase::KItemModelBase(QObject *parent)
 
 KItemModelBase::KItemModelBase(const QByteArray &sortRole, const QByteArray &groupRole, QObject *parent)
     : QObject(parent)
-    , m_groupedSorting(false)
+    , m_groupedSorting(true)
     , m_sortRole(sortRole)
     , m_sortOrder(Qt::AscendingOrder)
     , m_groupRole(groupRole)
index fad825dc018b48f7208ee9f7bc73b8b3f28fd2f7..ea05f840b742f1009664391f489c4e94ed8cbe65 100644 (file)
@@ -164,7 +164,7 @@ void KFileItemModelTest::testDefaultSortRole()
 
 void KFileItemModelTest::testDefaultGroupedSorting()
 {
-    QCOMPARE(m_model->groupedSorting(), false);
+    QCOMPARE(m_model->groupedSorting(), true);
 }
 
 void KFileItemModelTest::testNewItems()
@@ -2007,6 +2007,7 @@ void KFileItemModelTest::testNameRoleGroups()
     m_testDir->createFiles({"b.txt", "c.txt", "d.txt", "e.txt"});
 
     m_model->setGroupedSorting(true);
+    m_model->setGroupRole("text");
     m_model->loadDirectory(m_testDir->url());
     QVERIFY(itemsInsertedSpy.wait());
     QCOMPARE(itemsInModel(),
@@ -2093,6 +2094,8 @@ void KFileItemModelTest::testNameRoleGroupsWithExpandedItems()
     m_testDir->createFiles({"a/b.txt", "a/c.txt", "d/e.txt", "d/f.txt"});
 
     m_model->setGroupedSorting(true);
+    m_model->setGroupRole("text");
+
     m_model->loadDirectory(m_testDir->url());
     QVERIFY(itemsInsertedSpy.wait());
     QCOMPARE(itemsInModel(),
@@ -2102,6 +2105,7 @@ void KFileItemModelTest::testNameRoleGroupsWithExpandedItems()
     QList<QPair<int, QVariant>> expectedGroups;
     expectedGroups << QPair<int, QVariant>(0, QLatin1String("A"));
     expectedGroups << QPair<int, QVariant>(1, QLatin1String("D"));
+
     QCOMPARE(m_model->groups(), expectedGroups);
 
     // Verify that expanding "a" and "d" will not change the groups (except for the index of "D").