git repos / SagoImageBrowser

blame: imagemodel.cpp

normal view · raw

032aa1e1 Poul Sander 2026-02-19 18:55 1
#include "imagemodel.h"
032aa1e1 Poul Sander 2026-02-19 18:55 2
032aa1e1 Poul Sander 2026-02-19 18:55 3
#include <QDir>
032aa1e1 Poul Sander 2026-02-19 18:55 4
#include <QImageReader>
032aa1e1 Poul Sander 2026-02-19 18:55 5
#include <QFileInfo>
032aa1e1 Poul Sander 2026-02-19 18:55 6
032aa1e1 Poul Sander 2026-02-19 18:55 7
ImageModel::ImageModel(QObject *parent)
032aa1e1 Poul Sander 2026-02-19 18:55 8
    : QAbstractListModel(parent)
032aa1e1 Poul Sander 2026-02-19 18:55 9
{
032aa1e1 Poul Sander 2026-02-19 18:55 10
}
032aa1e1 Poul Sander 2026-02-19 18:55 11
032aa1e1 Poul Sander 2026-02-19 18:55 12
void ImageModel::setDirectory(const QString &path)
032aa1e1 Poul Sander 2026-02-19 18:55 13
{
032aa1e1 Poul Sander 2026-02-19 18:55 14
    beginResetModel();
032aa1e1 Poul Sander 2026-02-19 18:55 15
    m_items.clear();
032aa1e1 Poul Sander 2026-02-19 18:55 16
032aa1e1 Poul Sander 2026-02-19 18:55 17
    QDir dir(path);
032aa1e1 Poul Sander 2026-02-19 18:55 18
    QStringList filters;
032aa1e1 Poul Sander 2026-02-19 18:55 19
032aa1e1 Poul Sander 2026-02-19 18:55 20
    const auto formats = QImageReader::supportedImageFormats();
032aa1e1 Poul Sander 2026-02-19 18:55 21
    for (const QByteArray &fmt : formats)
032aa1e1 Poul Sander 2026-02-19 18:55 22
        filters << "*." + fmt;
032aa1e1 Poul Sander 2026-02-19 18:55 23
032aa1e1 Poul Sander 2026-02-19 18:55 24
    dir.setNameFilters(filters);
032aa1e1 Poul Sander 2026-02-19 18:55 25
    dir.setFilter(QDir::Files);
032aa1e1 Poul Sander 2026-02-19 18:55 26
032aa1e1 Poul Sander 2026-02-19 18:55 27
    for (const QFileInfo &file : dir.entryInfoList())
032aa1e1 Poul Sander 2026-02-19 18:55 28
    {
032aa1e1 Poul Sander 2026-02-19 18:55 29
        QImageReader reader(file.absoluteFilePath());
032aa1e1 Poul Sander 2026-02-19 18:55 30
        reader.setAutoTransform(true);
032aa1e1 Poul Sander 2026-02-19 18:55 31
032aa1e1 Poul Sander 2026-02-19 18:55 32
        QImage image = reader.read();
032aa1e1 Poul Sander 2026-02-19 18:55 33
        QPixmap thumb = QPixmap::fromImage(
032aa1e1 Poul Sander 2026-02-19 18:55 34
            image.scaled(128, 128, Qt::KeepAspectRatio,
032aa1e1 Poul Sander 2026-02-19 18:55 35
                         Qt::SmoothTransformation));
032aa1e1 Poul Sander 2026-02-19 18:55 36
032aa1e1 Poul Sander 2026-02-19 18:55 37
        m_items.append({file.absoluteFilePath(), thumb});
032aa1e1 Poul Sander 2026-02-19 18:55 38
    }
032aa1e1 Poul Sander 2026-02-19 18:55 39
032aa1e1 Poul Sander 2026-02-19 18:55 40
    endResetModel();
032aa1e1 Poul Sander 2026-02-19 18:55 41
}
032aa1e1 Poul Sander 2026-02-19 18:55 42
032aa1e1 Poul Sander 2026-02-19 18:55 43
QString ImageModel::filePath(const QModelIndex &index) const
032aa1e1 Poul Sander 2026-02-19 18:55 44
{
032aa1e1 Poul Sander 2026-02-19 18:55 45
    if (!index.isValid())
032aa1e1 Poul Sander 2026-02-19 18:55 46
        return {};
032aa1e1 Poul Sander 2026-02-19 18:55 47
032aa1e1 Poul Sander 2026-02-19 18:55 48
    return m_items[index.row()].path;
032aa1e1 Poul Sander 2026-02-19 18:55 49
}
032aa1e1 Poul Sander 2026-02-19 18:55 50
032aa1e1 Poul Sander 2026-02-19 18:55 51
int ImageModel::rowCount(const QModelIndex &) const
032aa1e1 Poul Sander 2026-02-19 18:55 52
{
032aa1e1 Poul Sander 2026-02-19 18:55 53
    return m_items.size();
032aa1e1 Poul Sander 2026-02-19 18:55 54
}
032aa1e1 Poul Sander 2026-02-19 18:55 55
032aa1e1 Poul Sander 2026-02-19 18:55 56
QVariant ImageModel::data(const QModelIndex &index, int role) const
032aa1e1 Poul Sander 2026-02-19 18:55 57
{
032aa1e1 Poul Sander 2026-02-19 18:55 58
    if (!index.isValid())
032aa1e1 Poul Sander 2026-02-19 18:55 59
        return {};
032aa1e1 Poul Sander 2026-02-19 18:55 60
032aa1e1 Poul Sander 2026-02-19 18:55 61
    const Item &item = m_items[index.row()];
032aa1e1 Poul Sander 2026-02-19 18:55 62
032aa1e1 Poul Sander 2026-02-19 18:55 63
    if (role == Qt::DecorationRole)
032aa1e1 Poul Sander 2026-02-19 18:55 64
        return item.thumbnail;
032aa1e1 Poul Sander 2026-02-19 18:55 65
032aa1e1 Poul Sander 2026-02-19 18:55 66
    if (role == Qt::DisplayRole)
032aa1e1 Poul Sander 2026-02-19 18:55 67
        return QFileInfo(item.path).fileName();
032aa1e1 Poul Sander 2026-02-19 18:55 68
032aa1e1 Poul Sander 2026-02-19 18:55 69
    return {};
032aa1e1 Poul Sander 2026-02-19 18:55 70
}
1970-01-01 00:00 71