#ifndef EVENT_LIST_H #define EVENT_LIST_H #include #include #include #include class EventList : public QAbstractListModel { Q_OBJECT Q_PROPERTY(QStringList tagsOrder MEMBER tagsOrder NOTIFY tagsChanged) Q_PROPERTY(QJsonObject tags MEMBER tags NOTIFY tagsChanged) QML_ELEMENT public: Qt::ItemFlags flags(const QModelIndex& index) const; QHash roleNames() const; int rowCount(const QModelIndex& parent = {}) const; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; bool setData(const QModelIndex& index, const QVariant& value, int role); public slots: int insert(const int time = -1); bool removeRows(int row, int count = 1, const QModelIndex &parent = {}); void load(const QJsonObject& json); QJsonObject save() const; signals: void tagsChanged(); private: struct Event { long long time; QString tag{}; QVariantMap values{}; }; enum Role { Time = Qt::UserRole + 1, Tag, Values }; QStringList tagsOrder; QJsonObject tags; QList events; int find(long long time) const; }; #endif