47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
|
#ifndef EVENT_LIST_H
|
||
|
#define EVENT_LIST_H
|
||
|
|
||
|
#include <QAbstractListModel>
|
||
|
#include <QJsonObject>
|
||
|
#include <QStringList>
|
||
|
#include <qqml.h>
|
||
|
|
||
|
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<int, QByteArray> 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<Event> events;
|
||
|
|
||
|
int find(long long time) const;
|
||
|
};
|
||
|
|
||
|
#endif
|