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:
parent
e9b70c585c
commit
cb76fedcbc
14 changed files with 375 additions and 342 deletions
46
event_list.h
Normal file
46
event_list.h
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue