]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistwidget.cpp
Implemented grouping-related slots to match sorting in some obscure places.
[dolphin.git] / src / kitemviews / kfileitemlistwidget.cpp
index 8002af5972a70ac9a26b31f1387b6e4313cbcd39..fcfc9d7b13764ca802497a8465b014d39cbebecb 100644 (file)
@@ -9,7 +9,7 @@
 #include "kfileitemmodel.h"
 #include "kitemlistview.h"
 
-#include "dolphin_detailsmodesettings.h"
+#include "dolphin_contentdisplaysettings.h"
 
 #include <KFormat>
 #include <KLocalizedString>
@@ -56,7 +56,7 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHa
     // use a hash + switch for a linear runtime.
 
     auto formatDate = [formatter, local](const QDateTime &time) {
-        if (DetailsModeSettings::useShortRelativeDates()) {
+        if (ContentDisplaySettings::useShortRelativeDates()) {
             return formatter.formatRelativeDateTime(time, QLocale::ShortFormat);
         } else {
             return local.toString(time, QLocale::ShortFormat);
@@ -67,7 +67,8 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHa
         if (values.value("isDir").toBool()) {
             if (!roleValue.isNull() && roleValue != -1) {
                 // The item represents a directory.
-                if (DetailsModeSettings::directorySizeCount()) {
+                if (ContentDisplaySettings::directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount
+                    || roleValue == -2 /* size is invalid */) {
                     //  Show the number of sub directories instead of the file size of the directory.
                     const int count = values.value("count").toInt();
                     text = i18ncp("@item:intable", "%1 item", "%1 items", count);
@@ -98,6 +99,20 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHa
         if (dimensions.isValid()) {
             text = i18nc("width × height", "%1 × %2", dimensions.width(), dimensions.height());
         }
+    } else if (role == "permissions") {
+        const auto permissions = roleValue.value<QVariantList>();
+
+        switch (ContentDisplaySettings::usePermissionsFormat()) {
+        case ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat:
+            text = permissions.at(0).toString();
+            break;
+        case ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat:
+            text = QString::number(permissions.at(1).toInt(), 8);
+            break;
+        case ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat:
+            text = QLatin1String("%1 (%2)").arg(permissions.at(0).toString()).arg(permissions.at(1).toInt(), 0, 8);
+            break;
+        }
     } else {
         text = KStandardItemListWidgetInformant::roleText(role, values);
     }
@@ -129,7 +144,7 @@ KItemListWidgetInformant *KFileItemListWidget::createInformant()
 
 bool KFileItemListWidget::isRoleRightAligned(const QByteArray &role) const
 {
-    return role == "size";
+    return role == "size" || role == "permissions";
 }
 
 bool KFileItemListWidget::isHidden() const
@@ -189,6 +204,17 @@ void KFileItemListWidget::hoverSequenceStarted()
     view->setHoverSequenceState(itemUrl, 0);
 }
 
+void KFileItemListWidget::forceUpdate()
+{
+    updateAdditionalInfoTextColor();
+    // icon layout does not include the icons in the item selection rectangle
+    // so its icon does not need updating
+    if (listView()->itemLayout() != KStandardItemListView::ItemLayout::IconsLayout) {
+        invalidateIconCache();
+    }
+    update();
+}
+
 void KFileItemListWidget::hoverSequenceIndexChanged(int sequenceIndex)
 {
     KFileItemListView *view = listView();
@@ -221,3 +247,5 @@ KFileItemListView *KFileItemListWidget::listView()
 {
     return dynamic_cast<KFileItemListView *>(parentItem());
 }
+
+#include "moc_kfileitemlistwidget.cpp"