magpie/models/assets.h

77 lines
1.6 KiB
C
Raw Normal View History

//SPDX-FileCopyrightText: 2023 Yury Gubich <blue@macaw.me>
//SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <deque>
#include <QString>
2024-01-20 21:17:21 +00:00
#include <QColor>
#include <QAbstractListModel>
#include <qqmlregistration.h>
namespace Models {
struct Asset {
unsigned int id;
QString title;
QString icon;
2024-01-20 21:17:21 +00:00
QColor color;
double balance;
bool archived;
unsigned int currency;
};
class Assets : public QAbstractListModel {
Q_OBJECT
QML_ELEMENT
public:
explicit Assets (QObject* parent = nullptr);
enum Roles {
Title = Qt::UserRole + 1,
Icon,
Balance,
2024-01-20 21:17:21 +00:00
Archived,
2024-01-21 19:22:56 +00:00
Color,
Id
};
2024-01-24 21:00:15 +00:00
void clear ();
void add (const Asset& asset);
void add (const std::deque<Asset>& assets);
void remove (unsigned int id);
//Basic functionality:
int rowCount (const QModelIndex& parent = QModelIndex()) const override;
QHash<int, QByteArray> roleNames () const override;
//Fetch data dynamically:
bool canFetchMore (const QModelIndex& parent) const override;
void fetchMore (const QModelIndex& parent) override;
QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) const override;
2024-01-24 21:00:15 +00:00
static bool deserialize (const QVariantList& from, std::deque<Asset>& out);
static const QHash<int, QByteArray> roles;
signals:
2024-01-24 21:00:15 +00:00
void requestAssets ();
public slots:
2024-01-24 21:00:15 +00:00
void receivedAssets (const std::deque<Asset>& assets);
private:
2024-01-24 21:00:15 +00:00
QModelIndex getIndex (unsigned int id) const;
private:
enum class State {
initial,
requesting,
syncronized
};
State state;
std::deque<Asset> records;
};
}