X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d0b98ba085a41cea0157841576b37d2b74c5cff5..e6ea3ab4c41dcc115143a237aafd3a1152849433:/src/kitemviews/kfileitemlistwidget.cpp diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index 688a4da08..a495a4c2f 100644 --- a/src/kitemviews/kfileitemlistwidget.cpp +++ b/src/kitemviews/kfileitemlistwidget.cpp @@ -21,12 +21,12 @@ #include "kfileitemmodel.h" #include "kitemlistview.h" -#include -#include -#include -#include -#include -#include +#include "dolphin_detailsmodesettings.h" + +#include +#include + +#include KFileItemListWidgetInformant::KFileItemListWidgetInformant() : KStandardItemListWidgetInformant() @@ -46,6 +46,15 @@ QString KFileItemListWidgetInformant::itemText(int index, const KItemListView* v return item.text(); } +bool KFileItemListWidgetInformant::itemIsLink(int index, const KItemListView* view) const +{ + Q_ASSERT(qobject_cast(view->model())); + KFileItemModel* fileItemModel = static_cast(view->model()); + + const KFileItem item = fileItemModel->fileItem(index); + return item.isLink(); +} + QString KFileItemListWidgetInformant::roleText(const QByteArray& role, const QHash& values) const { @@ -57,23 +66,39 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role, if (role == "size") { if (values.value("isDir").toBool()) { - // The item represents a directory. Show the number of sub directories - // instead of the file size of the directory. + // The item represents a directory. if (!roleValue.isNull()) { - const int count = roleValue.toInt(); + const int count = values.value("count").toInt(); if (count < 0) { text = i18nc("@item:intable", "Unknown"); } else { - text = i18ncp("@item:intable", "%1 item", "%1 items", count); + 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) { + text = i18nc("@item:intable", "Unknown"); + } else { + const KIO::filesize_t size = roleValue.value(); + text = KFormat().formatByteSize(size); + } + } } } } else { const KIO::filesize_t size = roleValue.value(); - text = KGlobal::locale()->formatByteSize(size); + text = KFormat().formatByteSize(size); } - } else if (role == "date") { + } 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); + } + } else if (role == "deletiontime" || role == "imageDateTime") { const QDateTime dateTime = roleValue.toDateTime(); - text = KGlobal::locale()->formatDateTime(dateTime); + text = QLocale().toString(dateTime, QLocale::ShortFormat); } else { text = KStandardItemListWidgetInformant::roleText(role, values); } @@ -81,6 +106,15 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role, return text; } +QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont) const +{ + // The customized font should be italic if the file is a symbolic link. + QFont font(baseFont); + font.setItalic(true); + return font; +} + + KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) : KStandardItemListWidget(informant, parent) { @@ -102,7 +136,7 @@ bool KFileItemListWidget::isRoleRightAligned(const QByteArray& role) const bool KFileItemListWidget::isHidden() const { - return data().value("text").toString().startsWith(QLatin1Char('.')); + return data().value("isHidden").toBool(); } QFont KFileItemListWidget::customizedFont(const QFont& baseFont) const @@ -124,7 +158,8 @@ int KFileItemListWidget::selectionLength(const QString& text) const return selectionLength; } - const QString extension = KMimeType::extractKnownExtension(text); + 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 @@ -143,4 +178,3 @@ int KFileItemListWidget::selectionLength(const QString& text) const return selectionLength; } -#include "kfileitemlistwidget.moc"