X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fc4315d57e8fe64d05aad2a1c24800f0149b21da..c161b895ffd8d62371ec288cf4105386350a8a3c:/src/kitemviews/kfileitemlistwidget.cpp diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index 1ea537d1d..1b38176cc 100644 --- a/src/kitemviews/kfileitemlistwidget.cpp +++ b/src/kitemviews/kfileitemlistwidget.cpp @@ -1,32 +1,19 @@ -/*************************************************************************** - * Copyright (C) 2011 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2011 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "kfileitemlistwidget.h" #include "kfileitemmodel.h" #include "kitemlistview.h" -#include -#include -#include -#include -#include -#include +#include "dolphin_detailsmodesettings.h" + +#include +#include + +#include KFileItemListWidgetInformant::KFileItemListWidgetInformant() : KStandardItemListWidgetInformant() @@ -60,29 +47,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. Show the number of sub directories - // instead of the file size of the directory. - if (!roleValue.isNull()) { - const int count = roleValue.toInt(); - if (count < 0) { - text = i18nc("@item:intable", "Unknown"); - } else { + 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 = KGlobal::locale()->formatByteSize(size); + text = formatter.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) { + const QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time); + text = formatDate(dateTime); + } + } else if (role == "deletiontime" || role == "imageDateTime") { const QDateTime dateTime = roleValue.toDateTime(); - text = KGlobal::locale()->formatDateTime(dateTime); + if (dateTime.isValid()) { + text = formatDate(dateTime); + } } else { text = KStandardItemListWidgetInformant::roleText(role, values); } @@ -120,7 +128,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 @@ -142,7 +150,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