X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/61bf84c13d203840d4ffeb55ce92dc8b660871a1..d3839617:/src/kitemviews/kfileitemlistwidget.cpp diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index 69a40ddf3..fc4e4bdac 100644 --- a/src/kitemviews/kfileitemlistwidget.cpp +++ b/src/kitemviews/kfileitemlistwidget.cpp @@ -5,6 +5,7 @@ */ #include "kfileitemlistwidget.h" +#include "kfileitemlistview.h" #include "kfileitemmodel.h" #include "kitemlistview.h" @@ -13,6 +14,8 @@ #include #include +#include +#include #include KFileItemListWidgetInformant::KFileItemListWidgetInformant() : @@ -47,41 +50,50 @@ 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()) { - // The item represents a directory. - if (!roleValue.isNull()) { - const int count = values.value("count").toInt(); - if (count > 0) { - if (DetailsModeSettings::directorySizeCount()) { - // Show the number of sub directories instead of the file size of the directory. - text = i18ncp("@item:intable", "%1 item", "%1 items", count); - } else { - // if we have directory size available - if (roleValue != -1) { - const KIO::filesize_t size = roleValue.value(); - text = KFormat().formatByteSize(size); - } - } + if (!roleValue.isNull() && roleValue != -1) { + // The item represents a directory. + if (DetailsModeSettings::directorySizeCount()) { + // 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); + } else { + // if we have directory size available + const KIO::filesize_t size = roleValue.value(); + text = formatter.formatByteSize(size); } } } else { const KIO::filesize_t size = roleValue.value(); - 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 { text = KStandardItemListWidgetInformant::roleText(role, values); } @@ -97,7 +109,6 @@ QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont return font; } - KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) : KStandardItemListWidget(informant, parent) { @@ -161,3 +172,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(parentItem()); +} +