X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c161b895ffd8d62371ec288cf4105386350a8a3c..b7fa85a33d6b5c1b2a5b60b64a78f7f208ea304c:/src/kitemviews/kfileitemlistwidget.cpp diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index 1b38176cc..d9644bef5 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,10 +14,12 @@ #include #include +#include +#include #include -KFileItemListWidgetInformant::KFileItemListWidgetInformant() : - KStandardItemListWidgetInformant() +KFileItemListWidgetInformant::KFileItemListWidgetInformant() + : KStandardItemListWidgetInformant() { } @@ -24,26 +27,25 @@ KFileItemListWidgetInformant::~KFileItemListWidgetInformant() { } -QString KFileItemListWidgetInformant::itemText(int index, const KItemListView* view) const +QString KFileItemListWidgetInformant::itemText(int index, const KItemListView *view) const { - Q_ASSERT(qobject_cast(view->model())); - KFileItemModel* fileItemModel = static_cast(view->model()); + Q_ASSERT(qobject_cast(view->model())); + KFileItemModel *fileItemModel = static_cast(view->model()); const KFileItem item = fileItemModel->fileItem(index); return item.text(); } -bool KFileItemListWidgetInformant::itemIsLink(int index, const KItemListView* view) const +bool KFileItemListWidgetInformant::itemIsLink(int index, const KItemListView *view) const { - Q_ASSERT(qobject_cast(view->model())); - KFileItemModel* fileItemModel = static_cast(view->model()); + 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 +QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHash &values) const { QString text; const QVariant roleValue = values.value(role); @@ -53,7 +55,7 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role, // 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) { + auto formatDate = [formatter, local](const QDateTime &time) { if (DetailsModeSettings::useShortRelativeDates()) { return formatter.formatRelativeDateTime(time, QLocale::ShortFormat); } else { @@ -80,17 +82,36 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role, 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) { - const QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time); - text = formatDate(dateTime); - } + 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(); if (dateTime.isValid()) { text = formatDate(dateTime); } + } else if (role == "dimensions") { + const auto dimensions = roleValue.toSize(); + if (dimensions.isValid()) { + text = i18nc("width × height", "%1 × %2", dimensions.width(), dimensions.height()); + } + } else if (role == "permissions") { + const auto permissions = roleValue.value(); + + switch (DetailsModeSettings::usePermissionsFormat()) { + case DetailsModeSettings::EnumUsePermissionsFormat::SymbolicFormat: + text = permissions.at(0).toString(); + break; + case DetailsModeSettings::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); + break; + } } else { text = KStandardItemListWidgetInformant::roleText(role, values); } @@ -98,7 +119,7 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role, return text; } -QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont) const +QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont &baseFont) const { // The customized font should be italic if the file is a symbolic link. QFont font(baseFont); @@ -106,9 +127,8 @@ QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont return font; } - -KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) : - KStandardItemListWidget(informant, parent) +KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant *informant, QGraphicsItem *parent) + : KStandardItemListWidget(informant, parent) { } @@ -116,14 +136,14 @@ KFileItemListWidget::~KFileItemListWidget() { } -KItemListWidgetInformant* KFileItemListWidget::createInformant() +KItemListWidgetInformant *KFileItemListWidget::createInformant() { return new KFileItemListWidgetInformant(); } -bool KFileItemListWidget::isRoleRightAligned(const QByteArray& role) const +bool KFileItemListWidget::isRoleRightAligned(const QByteArray &role) const { - return role == "size"; + return role == "size" || role == "permissions"; } bool KFileItemListWidget::isHidden() const @@ -131,7 +151,7 @@ bool KFileItemListWidget::isHidden() const return data().value("isHidden").toBool(); } -QFont KFileItemListWidget::customizedFont(const QFont& baseFont) const +QFont KFileItemListWidget::customizedFont(const QFont &baseFont) const { // The customized font should be italic if the file is a symbolic link. QFont font(baseFont); @@ -139,14 +159,14 @@ QFont KFileItemListWidget::customizedFont(const QFont& baseFont) const return font; } -int KFileItemListWidget::selectionLength(const QString& text) 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()) { + if (data().value("isDir").toBool()) { return selectionLength; } @@ -170,3 +190,48 @@ 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()); +}