#include <QGraphicsView>
#include <QPainter>
#include <QTimer>
+#include <QIcon>
+#include <QMimeDatabase>
// #define KFILEITEMLISTVIEW_DEBUG
KStandardItemListView(parent),
m_modelRolesUpdater(nullptr),
m_updateVisibleIndexRangeTimer(nullptr),
- m_updateIconSizeTimer(nullptr)
+ m_updateIconSizeTimer(nullptr),
+ m_scanDirectories(true)
{
setAcceptDrops(true);
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()) {
QPixmap pixmap = model()->data(index).value("iconPixmap").value<QPixmap>();
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);
}
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<KFileItemListWidget>();
KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(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"});
}
}
if (current) {
m_modelRolesUpdater = new KFileItemModelRolesUpdater(static_cast<KFileItemModel*>(current), this);
m_modelRolesUpdater->setIconSize(availableIconSize());
+ m_modelRolesUpdater->setScanDirectories(scanDirectories());
applyRolesToModel();
}
// KFileItemModel does not distinct between "visible" and "invisible" roles.
// Add all roles that are mandatory for having a working KFileItemListView:
- QSet<QByteArray> roles = visibleRoles().toSet();
+ const auto visibleRoles = this->visibleRoles();
+ auto roles = QSet<QByteArray>(visibleRoles.constBegin(), visibleRoles.constEnd());
roles.insert("iconPixmap");
roles.insert("iconName");
roles.insert("text");