redai/src/artmodel.h

45 lines
1.2 KiB
C++

// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <QAbstractTableModel>
#include <QDir>
#include <QFutureWatcher>
#include <QImage>
#include <QJsonObject>
struct ArtPiece {
QString filename, jsonFilename;
QString title;
QJsonObject object;
QDate date;
QImage image, thumbnail;
bool hasAltText = false;
};
class ArtModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit ArtModel(const QDir &definitionDirectory, const QDir &assetDirectory, QObject *parent = nullptr);
[[nodiscard]] int rowCount(const QModelIndex &parent) const override;
[[nodiscard]] int columnCount(const QModelIndex &parent) const override;
[[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
[[nodiscard]] QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
private:
void loadData(ArtPiece &piece, const QString &filename, const QString &assetFilename);
void pieceFinished(int index);
void finished();
QFutureWatcher<ArtPiece> *piecesFuture;
QList<ArtPiece> m_artPieces;
};