]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistwidget.cpp
GIT_SILENT Sync po/docbooks with svn
[dolphin.git] / src / kitemviews / kfileitemlistwidget.cpp
index d9644bef5f8762bb1d1b6ba052817d57c397cc50..b4e0895f2a7fcb0548e8393f63d9dd3832b28fb6 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);
@@ -101,15 +102,15 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHa
     } else if (role == "permissions") {
         const auto permissions = roleValue.value<QVariantList>();
 
-        switch (DetailsModeSettings::usePermissionsFormat()) {
-        case DetailsModeSettings::EnumUsePermissionsFormat::SymbolicFormat:
+        switch (ContentDisplaySettings::usePermissionsFormat()) {
+        case ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat:
             text = permissions.at(0).toString();
             break;
-        case DetailsModeSettings::EnumUsePermissionsFormat::NumericFormat:
+        case ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat:
             text = QString::number(permissions.at(1).toInt(), 8);
             break;
-        case DetailsModeSettings::EnumUsePermissionsFormat::CombinedFormat:
-            text = QString("%1 (%2)").arg(permissions.at(0).toString()).arg(permissions.at(1).toInt(), 0, 8);
+        case ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat:
+            text = QLatin1String("%1 (%2)").arg(permissions.at(0).toString()).arg(permissions.at(1).toInt(), 0, 8);
             break;
         }
     } else {
@@ -161,33 +162,32 @@ QFont KFileItemListWidget::customizedFont(const QFont &baseFont) const
 
 int KFileItemListWidget::selectionLength(const QString &text) const
 {
-    // Select the text without MIME-type extension
-    int selectionLength = text.length();
-
     // If item is a directory, use the whole text length for
     // selection (ignore all points)
     if (data().value("isDir").toBool()) {
-        return selectionLength;
+        return numberOfUnicodeCharactersIn(text);
     }
 
+    int indexOfExtension = text.length();
+
     QMimeDatabase db;
     const QString extension = db.suffixForFileName(text);
     if (extension.isEmpty()) {
         // For an unknown extension just exclude the extension after
         // the last point. This does not work for multiple extensions like
         // *.tar.gz but usually this is anyhow a known extension.
-        selectionLength = text.lastIndexOf(QLatin1Char('.'));
+        indexOfExtension = text.lastIndexOf(QLatin1Char('.'));
 
         // If no point could be found, use whole text length for selection.
-        if (selectionLength < 1) {
-            selectionLength = text.length();
+        if (indexOfExtension < 1) {
+            indexOfExtension = text.length();
         }
 
     } else {
-        selectionLength -= extension.length() + 1;
+        indexOfExtension -= extension.length() + 1;
     }
 
-    return selectionLength;
+    return numberOfUnicodeCharactersIn(text.left(indexOfExtension));
 }
 
 void KFileItemListWidget::hoverSequenceStarted()
@@ -203,6 +203,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();
@@ -235,3 +246,5 @@ KFileItemListView *KFileItemListWidget::listView()
 {
     return dynamic_cast<KFileItemListView *>(parentItem());
 }
+
+#include "moc_kfileitemlistwidget.cpp"