From 2c80ef3ccb7232b605f0733535d2e579a4c8c759 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 1 May 2023 14:13:53 +0200 Subject: [PATCH] Make it possible to insert events in the UI (very rudimentary yet, though). --- mainwindow.h | 5 +++-- mainwindow.ui | 9 ++++++++- stats.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/mainwindow.h b/mainwindow.h index 5f2188c..430b88d 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -5,7 +5,7 @@ #include #include "ui_mainwindow.h" -class QAbstractItemModel; +class EventsModel; class MainWindow : public QMainWindow { @@ -13,12 +13,13 @@ class MainWindow : public QMainWindow public: MainWindow(); - void setModel(QAbstractItemModel *model); + void setModel(EventsModel *model); private: void seek(int64_t delta_ms); Ui::MainWindow *ui; + EventsModel *model; bool seeking = false; bool playing = true; std::optional buffered_seek; diff --git a/mainwindow.ui b/mainwindow.ui index 589e8a5..e1d42f1 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -393,7 +393,14 @@ - + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + diff --git a/stats.cpp b/stats.cpp index 653c16b..356c5f9 100644 --- a/stats.cpp +++ b/stats.cpp @@ -46,6 +46,8 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QVariant data(const QModelIndex &index, int role) const override; + int insert_event(uint64_t t, int player_id); + private: struct Player { int player_id; @@ -176,6 +178,26 @@ void EventsModel::refresh_if_needed() const //emit dataChanged(QModelIndex( } +int EventsModel::insert_event(uint64_t t, int player_id) +{ + auto it = lower_bound(events.begin(), events.end(), t, + [](const Event &e, uint64_t t) { return e.t < t; }); + int pos = distance(events.begin(), it); + beginInsertRows(QModelIndex(), pos, pos + 1); + + Event e; + e.t = t; + e.player_id = player_id; + e.type = "unknown"; + events.insert(events.begin() + pos, e); + + endInsertRows(); + + // FIXME sqlite + + return pos; +} + MainWindow::MainWindow() { player = new QMediaPlayer; @@ -223,11 +245,34 @@ MainWindow::MainWindow() // Needs to be set anew when we modify setText(), evidently. ui->play_pause->setShortcut(QCoreApplication::translate("MainWindow", "Space", nullptr)); }); + + connect(ui->player_1, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 1)); + }); + connect(ui->player_2, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 2)); + }); + connect(ui->player_3, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 3)); + }); + connect(ui->player_4, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 4)); + }); + connect(ui->player_5, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 5)); + }); + connect(ui->player_6, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 6)); + }); + connect(ui->player_7, &QPushButton::clicked, [this]() { + ui->event_view->selectRow(model->insert_event(player->position(), 7)); + }); } -void MainWindow::setModel(QAbstractItemModel *model) +void MainWindow::setModel(EventsModel *model) { ui->event_view->setModel(model); + this->model = model; } void MainWindow::seek(int64_t delta_ms) -- 2.39.2