git repos / SagoImageBrowser

blame: src/imagemodel.h

normal view · raw

032aa1e1 Poul Sander 2026-02-19 18:55 1
#pragma once
032aa1e1 Poul Sander 2026-02-19 18:55 2
ac476ca8 Poul Sander 2026-05-18 16:47 3
#include "thumbnailcache.h"
ac476ca8 Poul Sander 2026-05-18 16:47 4
032aa1e1 Poul Sander 2026-02-19 18:55 5
#include <QAbstractListModel>
032aa1e1 Poul Sander 2026-02-19 18:55 6
#include <QPixmap>
032aa1e1 Poul Sander 2026-02-19 18:55 7
#include <QVector>
cec3b5da Poul Sander 2026-02-19 19:17 8
#include <QThreadPool>
6fcd6c90 Poul Sander 2026-02-19 21:12 9
#include <QSet>
459bad0f Poul Sander 2026-05-17 14:11 10
#include <QHash>
459bad0f Poul Sander 2026-05-17 14:11 11
#include <QList>
6fcd6c90 Poul Sander 2026-02-19 21:12 12
#include <atomic>
09130ab9 Poul Sander 2026-02-22 22:19 13
#include <QIcon>
cec3b5da Poul Sander 2026-02-19 19:17 14
cec3b5da Poul Sander 2026-02-19 19:17 15
class ThumbnailWorker;
032aa1e1 Poul Sander 2026-02-19 18:55 16
032aa1e1 Poul Sander 2026-02-19 18:55 17
class ImageModel : public QAbstractListModel
032aa1e1 Poul Sander 2026-02-19 18:55 18
{
032aa1e1 Poul Sander 2026-02-19 18:55 19
    Q_OBJECT
032aa1e1 Poul Sander 2026-02-19 18:55 20
032aa1e1 Poul Sander 2026-02-19 18:55 21
public:
032aa1e1 Poul Sander 2026-02-19 18:55 22
    explicit ImageModel(QObject *parent = nullptr);
cec3b5da Poul Sander 2026-02-19 19:17 23
    ~ImageModel();
032aa1e1 Poul Sander 2026-02-19 18:55 24
032aa1e1 Poul Sander 2026-02-19 18:55 25
    void setDirectory(const QString &path);
032aa1e1 Poul Sander 2026-02-19 18:55 26
    QString filePath(const QModelIndex &index) const;
09130ab9 Poul Sander 2026-02-22 22:19 27
    bool isFolder(const QModelIndex &index) const;
09130ab9 Poul Sander 2026-02-22 22:19 28
    QString currentDirectory() const;
032aa1e1 Poul Sander 2026-02-19 18:55 29
6fcd6c90 Poul Sander 2026-02-19 21:12 30
    void requestThumbnails(int firstRow, int lastRow);
459bad0f Poul Sander 2026-05-17 14:11 31
    void setCacheMaxSize(int n);
ac476ca8 Poul Sander 2026-05-18 16:47 32
    void setThumbnailSize(ThumbnailCache::Size size);
6fcd6c90 Poul Sander 2026-02-19 21:12 33
032aa1e1 Poul Sander 2026-02-19 18:55 34
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
032aa1e1 Poul Sander 2026-02-19 18:55 35
    QVariant data(const QModelIndex &index, int role) const override;
032aa1e1 Poul Sander 2026-02-19 18:55 36
6fcd6c90 Poul Sander 2026-02-19 21:12 37
    void thumbnailReady(int row, const QImage &image);
cec3b5da Poul Sander 2026-02-19 19:17 38
032aa1e1 Poul Sander 2026-02-19 18:55 39
private:
032aa1e1 Poul Sander 2026-02-19 18:55 40
    struct Item
032aa1e1 Poul Sander 2026-02-19 18:55 41
    {
032aa1e1 Poul Sander 2026-02-19 18:55 42
        QString path;
09130ab9 Poul Sander 2026-02-22 22:19 43
        QString displayName;
032aa1e1 Poul Sander 2026-02-19 18:55 44
        QPixmap thumbnail;
cec3b5da Poul Sander 2026-02-19 19:17 45
        bool loaded = false;
09130ab9 Poul Sander 2026-02-22 22:19 46
        bool isFolder = false;
032aa1e1 Poul Sander 2026-02-19 18:55 47
    };
032aa1e1 Poul Sander 2026-02-19 18:55 48
6fcd6c90 Poul Sander 2026-02-19 21:12 49
    void queueRow(int row);
6fcd6c90 Poul Sander 2026-02-19 21:12 50
459bad0f Poul Sander 2026-05-17 14:11 51
    using ThumbnailMap = QHash<QString, QPixmap>;
459bad0f Poul Sander 2026-05-17 14:11 52
032aa1e1 Poul Sander 2026-02-19 18:55 53
    QVector<Item> m_items;
cec3b5da Poul Sander 2026-02-19 19:17 54
    QThreadPool m_threadPool;
cec3b5da Poul Sander 2026-02-19 19:17 55
    QPixmap m_placeholder;
6fcd6c90 Poul Sander 2026-02-19 21:12 56
6fcd6c90 Poul Sander 2026-02-19 21:12 57
    QSet<int> m_pendingRows;
6fcd6c90 Poul Sander 2026-02-19 21:12 58
    std::atomic_bool m_cancelFlag{false};
09130ab9 Poul Sander 2026-02-22 22:19 59
    QIcon m_folderIcon;
09130ab9 Poul Sander 2026-02-22 22:19 60
    QString m_currentDir;
459bad0f Poul Sander 2026-05-17 14:11 61
459bad0f Poul Sander 2026-05-17 14:11 62
    // Folder thumbnail cache (last N visited directories)
459bad0f Poul Sander 2026-05-17 14:11 63
    QHash<QString, ThumbnailMap> m_folderThumbnailCache;
459bad0f Poul Sander 2026-05-17 14:11 64
    QList<QString> m_cacheOrder;
459bad0f Poul Sander 2026-05-17 14:11 65
    int m_cacheMaxSize = 4;
ac476ca8 Poul Sander 2026-05-18 16:47 66
ac476ca8 Poul Sander 2026-05-18 16:47 67
    ThumbnailCache::Size m_thumbnailSize = ThumbnailCache::Size::Normal;
032aa1e1 Poul Sander 2026-02-19 18:55 68
};
1970-01-01 00:00 69