fuzbal/event_list.h

47 lines
1.1 KiB
C
Raw Permalink Normal View History

#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 QString& tag = {}, 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 };
QJsonObject tags;
QStringList tagsOrder;
QList<Event> events;
int find(long long time) const;
};
#endif