X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/16a3aea6a629a91aab937be5c111b64b3ed6cf86..c6bccbf6de33ba907f1cddfa64dadb8cfeea4d2c:/src/kitemviews/kfileitemlistview.cpp diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 80d85aa2e..adcc2d793 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -1,21 +1,8 @@ -/*************************************************************************** - * 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 "kfileitemlistview.h" @@ -30,6 +17,8 @@ #include #include #include +#include +#include // #define KFILEITEMLISTVIEW_DEBUG @@ -50,7 +39,8 @@ KFileItemListView::KFileItemListView(QGraphicsWidget* parent) : KStandardItemListView(parent), m_modelRolesUpdater(nullptr), m_updateVisibleIndexRangeTimer(nullptr), - m_updateIconSizeTimer(nullptr) + m_updateIconSizeTimer(nullptr), + m_scanDirectories(true) { setAcceptDrops(true); @@ -116,6 +106,31 @@ QStringList KFileItemListView::enabledPlugins() const return m_modelRolesUpdater ? m_modelRolesUpdater->enabledPlugins() : QStringList(); } +void KFileItemListView::setLocalFileSizePreviewLimit(const qlonglong size) +{ + if (m_modelRolesUpdater) { + m_modelRolesUpdater->setLocalFileSizePreviewLimit(size); + } +} + +qlonglong KFileItemListView::localFileSizePreviewLimit() const +{ + return m_modelRolesUpdater ? m_modelRolesUpdater->localFileSizePreviewLimit() : 0; +} + +void KFileItemListView::setScanDirectories(bool enabled) +{ + m_scanDirectories = enabled; + if (m_modelRolesUpdater) { + m_modelRolesUpdater->setScanDirectories(m_scanDirectories); + } +} + +bool KFileItemListView::scanDirectories() +{ + return m_scanDirectories; +} + QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const { if (!model()) { @@ -169,7 +184,15 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const QPixmap pixmap = model()->data(index).value("iconPixmap").value(); if (pixmap.isNull()) { QIcon icon = QIcon::fromTheme(model()->data(index).value("iconName").toString()); - pixmap = icon.pixmap(size, size); + if (icon.isNull()) { + icon = QIcon::fromTheme("unknown"); + } + if (!icon.isNull()) { + pixmap = icon.pixmap(size, size); + } else { + pixmap = QPixmap(size, size); + pixmap.fill(Qt::transparent); + } } else { KPixmapModifier::scale(pixmap, QSize(size, size) * dpr); } @@ -190,6 +213,13 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const return dragPixmap; } +void KFileItemListView::setHoverSequenceState(const QUrl& itemUrl, int seqIdx) +{ + if (m_modelRolesUpdater) { + m_modelRolesUpdater->setHoverSequenceState(itemUrl, seqIdx); + } +} + KItemListWidgetCreatorBase* KFileItemListView::defaultWidgetCreator() const { return new KItemListWidgetCreator(); @@ -206,7 +236,12 @@ void KFileItemListView::initializeItemListWidget(KItemListWidget* item) KFileItemModel* fileItemModel = static_cast(model()); const KFileItem fileItem = fileItemModel->fileItem(item->index()); - data.insert("iconName", fileItem.iconName()); + QString iconName = fileItem.iconName(); + if (!QIcon::hasThemeIcon(iconName)) { + QMimeDatabase mimeDb; + iconName = mimeDb.mimeTypeForName(fileItem.mimetype()).genericIconName(); + } + data.insert("iconName", iconName); item->setData(data, {"iconName"}); } } @@ -233,6 +268,7 @@ void KFileItemListView::onModelChanged(KItemModelBase* current, KItemModelBase* if (current) { m_modelRolesUpdater = new KFileItemModelRolesUpdater(static_cast(current), this); m_modelRolesUpdater->setIconSize(availableIconSize()); + m_modelRolesUpdater->setScanDirectories(scanDirectories()); applyRolesToModel(); } @@ -389,7 +425,8 @@ void KFileItemListView::applyRolesToModel() // KFileItemModel does not distinct between "visible" and "invisible" roles. // Add all roles that are mandatory for having a working KFileItemListView: - QSet roles = visibleRoles().toSet(); + const auto visibleRoles = this->visibleRoles(); + auto roles = QSet(visibleRoles.constBegin(), visibleRoles.constEnd()); roles.insert("iconPixmap"); roles.insert("iconName"); roles.insert("text");