Implement event model in C++

Filtering events in JS is too slow with >20,000 events. This moves the
event data model into C++.
This commit is contained in:
Timotej Lazar 2021-09-01 17:13:51 +02:00
parent e9b70c585c
commit cb76fedcbc
No known key found for this signature in database
GPG key ID: B6F38793D143456F
14 changed files with 375 additions and 342 deletions

46
event_list.h Normal file
View file

@ -0,0 +1,46 @@
#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