]> git.sesse.net Git - pkanalytics/blobdiff - stats.cpp
Make it possible to insert events in the UI (very rudimentary yet, though).
[pkanalytics] / stats.cpp
index 653c16bd78474fdc583c44b4791fa78b086707c9..356c5f9b177b5fc0310366ba9797e2a6ede931bd 100644 (file)
--- 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)