3#include <QtCore/QAbstractListModel>
4#include <QtCore/QTimer>
5#include <QtQml/QQmlEngine>
7#include "qml_material/core/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)
19 Q_PROPERTY(qreal maximumWidth MEMBER maximum_width FINAL)
20 Q_PROPERTY(
bool actionOnNewLine MEMBER action_on_new_line FINAL)
24 qint32 duration { 0 };
25 Enum::ToastFlags flag {};
26 QObject* action {
nullptr };
27 qreal maximum_width { 0 };
28 bool action_on_new_line {
false };
31class SnakeModel :
public QAbstractListModel {
35 using iterator = std::vector<SnakeModelItem>::iterator;
37 SnakeModel(QObject* parent =
nullptr);
38 virtual ~SnakeModel();
40 int rowCount(
const QModelIndex& parent = QModelIndex())
const override;
41 QVariant data(
const QModelIndex& index,
int role = Qt::DisplayRole)
const override;
42 QHash<int, QByteArray> roleNames()
const override;
44 Q_INVOKABLE SnakeModelItem createSnake();
46 bool removeRows(
int row,
int count,
const QModelIndex& parent = QModelIndex())
override;
47 auto findById(qint32
id) -> iterator;
49 Q_SLOT
void showSnake(
const SnakeModelItem&);
50 Q_SLOT
void removeById(qint32
id);
53 Q_SLOT
void onRemovePriv(
const QModelIndex& parent,
int first,
int last);
54 qint32 removeExtra(qint32
id);
56 std::int32_t m_snake_id;
57 std::vector<SnakeModelItem> m_items;
58 std::vector<SnakeModelItem> m_saved_items;
61 QTimer* timer {
nullptr };
63 std::unordered_map<qint32, Extra> m_extra;