]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistwidget.cpp
Add "Dimensions" (width x height) role
[dolphin.git] / src / kitemviews / kfileitemlistwidget.cpp
index 66fcafaf628f6d2d56880131cbf8fc301a5d0203..4198df0279246be7903f9ca64da7e7bff0c320cd 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include "kfileitemlistwidget.h"
+#include "kfileitemlistview.h"
 #include "kfileitemmodel.h"
 #include "kitemlistview.h"
 
@@ -13,6 +14,8 @@
 #include <KFormat>
 #include <KLocalizedString>
 
+#include <QGraphicsScene>
+#include <QGraphicsView>
 #include <QMimeDatabase>
 
 KFileItemListWidgetInformant::KFileItemListWidgetInformant() :
@@ -47,10 +50,20 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
 {
     QString text;
     const QVariant roleValue = values.value(role);
+    QLocale local;
+    KFormat formatter(local);
 
     // Implementation note: In case if more roles require a custom handling
     // use a hash + switch for a linear runtime.
 
+    auto formatDate = [formatter, local](const QDateTime& time) {
+        if (DetailsModeSettings::useShortRelativeDates()) {
+            return formatter.formatRelativeDateTime(time, QLocale::ShortFormat);
+        } else {
+            return local.toString(time, QLocale::ShortFormat);
+        }
+    };
+
     if (role == "size") {
         if (values.value("isDir").toBool()) {
             if (!roleValue.isNull() && roleValue != -1) {
@@ -62,22 +75,30 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
                 } else {
                     // if we have directory size available
                     const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
-                    text = KFormat().formatByteSize(size);
+                    text = formatter.formatByteSize(size);
                 }
             }
         } else {
             const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
-            text = KFormat().formatByteSize(size);
+            text = formatter.formatByteSize(size);
         }
     } else if (role == "modificationtime" || role == "creationtime" || role == "accesstime") {
             bool ok;
             const long long time = roleValue.toLongLong(&ok);
             if (ok && time != -1) {
-                return QLocale().toString(QDateTime::fromSecsSinceEpoch(time), QLocale::ShortFormat);
+                const QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time);
+                text = formatDate(dateTime);
             }
     } else if (role == "deletiontime" || role == "imageDateTime") {
         const QDateTime dateTime = roleValue.toDateTime();
-        text = QLocale().toString(dateTime, QLocale::ShortFormat);
+        if (dateTime.isValid()) {
+            text = formatDate(dateTime);
+        }
+    } else if (role == "dimensions") {
+        const auto dimensions = roleValue.toSize();
+        if (dimensions.isValid()) {
+            text = i18nc("width x height", "%1 x %2", dimensions.width(), dimensions.height());
+        }
     } else {
         text = KStandardItemListWidgetInformant::roleText(role, values);
     }
@@ -93,7 +114,6 @@ QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont
     return font;
 }
 
-
 KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) :
     KStandardItemListWidget(informant, parent)
 {
@@ -157,3 +177,49 @@ int KFileItemListWidget::selectionLength(const QString& text) const
     return selectionLength;
 }
 
+void KFileItemListWidget::hoverSequenceStarted()
+{
+    KFileItemListView* view = listView();
+
+    if (!view) {
+        return;
+    }
+
+    const QUrl itemUrl = data().value("url").toUrl();
+
+    view->setHoverSequenceState(itemUrl, 0);
+}
+
+void KFileItemListWidget::hoverSequenceIndexChanged(int sequenceIndex)
+{
+    KFileItemListView* view = listView();
+
+    if (!view) {
+        return;
+    }
+
+    const QUrl itemUrl = data().value("url").toUrl();
+
+    view->setHoverSequenceState(itemUrl, sequenceIndex);
+
+    // Force-update the displayed icon
+    invalidateIconCache();
+    update();
+}
+
+void KFileItemListWidget::hoverSequenceEnded()
+{
+    KFileItemListView* view = listView();
+
+    if (!view) {
+        return;
+    }
+
+    view->setHoverSequenceState(QUrl(), 0);
+}
+
+KFileItemListView* KFileItemListWidget::listView()
+{
+    return dynamic_cast<KFileItemListView*>(parentItem());
+}
+