3#include <QtCore/QAbstractListModel>
4#include <QtCore/QTimer>
5#include <QtQml/QQmlEngine>
7#include "qml_material/enum.hpp"
11struct SnakeModelItem {
14 Q_PROPERTY(qint32 sid MEMBER
id FINAL)
15 Q_PROPERTY(QString text MEMBER text FINAL)
16 Q_PROPERTY(qint32 duration MEMBER duration FINAL)
17 Q_PROPERTY(Enum::ToastFlags flag MEMBER flag FINAL)
18 Q_PROPERTY(QObject* action MEMBER action FINAL)
22 qint32 duration { 0 };
23 Enum::ToastFlags flag {};
24 QObject* action {
nullptr };
27class SnakeModel :
public QAbstractListModel {
31 using iterator = std::vector<SnakeModelItem>::iterator;
33 SnakeModel(QObject* parent =
nullptr);
34 virtual ~SnakeModel();
36 int rowCount(
const QModelIndex& parent = QModelIndex())
const override;
37 QVariant data(
const QModelIndex& index,
int role = Qt::DisplayRole)
const override;
38 QHash<int, QByteArray> roleNames()
const override;
40 Q_INVOKABLE SnakeModelItem createSnake();
42 bool removeRows(
int row,
int count,
const QModelIndex& parent = QModelIndex())
override;
43 auto findById(qint32
id) -> iterator;
45 Q_SLOT
void showSnake(
const SnakeModelItem&);
46 Q_SLOT
void removeById(qint32
id);
49 Q_SLOT
void onRemovePriv(
const QModelIndex& parent,
int first,
int last);
50 qint32 removeExtra(qint32
id);
52 std::int32_t m_snake_id;
53 std::vector<SnakeModelItem> m_items;
54 std::vector<SnakeModelItem> m_saved_items;
57 QTimer* timer {
nullptr };
59 std::unordered_map<qint32, Extra> m_extra;