//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include #include namespace Models { struct Currency { using ID = uint32_t; ID id; QString code; QString title; unsigned int type; double value; QString description; QString icon; }; class Currencies : public QAbstractListModel { Q_OBJECT QML_ELEMENT public: Currencies (QObject* parent = nullptr); enum Roles { Id = Qt::UserRole + 1, Code, Title, Type, Value, Description, Icon }; void clear (); void add (const Currency& currency); void add (const std::deque& currencies); void remove (Currency::ID id); QString getCode(Currency::ID id); //Basic functionality: int rowCount (const QModelIndex& parent = QModelIndex()) const override; QHash roleNames () const override; QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) const override; static bool deserialize(const QVariantList& from, std::deque& out); static const QHash roles; private: using Order = std::list; using Index = std::deque; using Map = std::map; Order order; Index index; Map map; }; }