From b43930ea43a1ddd27d607b859a8539edc61bb994 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 1 May 2023 15:57:53 +0200 Subject: [PATCH] Make it possible to seek to an event by clicking on it. --- events.h | 1 + main.cpp | 41 ++++++++++++++++++++--------------------- mainwindow.h | 1 + 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/events.h b/events.h index db11ed0..56fcbaf 100644 --- a/events.h +++ b/events.h @@ -28,6 +28,7 @@ public: unsigned insert_event(uint64_t t, int player_id); // Returns the row. void delete_event(unsigned row); void set_event_type(unsigned row, const std::string &type); + uint64_t get_time(unsigned row) { return events[row].t; } struct Status { unsigned our_score, their_score; diff --git a/main.cpp b/main.cpp index 460ddd8..0f66603 100644 --- a/main.cpp +++ b/main.cpp @@ -71,27 +71,13 @@ MainWindow::MainWindow() 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)); - }); + connect(ui->player_1, &QPushButton::clicked, [this]() { insert_event(1); }); + connect(ui->player_2, &QPushButton::clicked, [this]() { insert_event(2); }); + connect(ui->player_3, &QPushButton::clicked, [this]() { insert_event(3); }); + connect(ui->player_4, &QPushButton::clicked, [this]() { insert_event(4); }); + connect(ui->player_5, &QPushButton::clicked, [this]() { insert_event(5); }); + connect(ui->player_6, &QPushButton::clicked, [this]() { insert_event(6); }); + connect(ui->player_7, &QPushButton::clicked, [this]() { insert_event(7); }); // TODO: disable if nothing is selected connect(ui->catch_, &QPushButton::clicked, [this]() { set_current_event_type("catch"); }); @@ -125,6 +111,10 @@ void MainWindow::setModel(EventsModel *model) { ui->event_view->setModel(model); this->model = model; + connect(ui->event_view->selectionModel(), &QItemSelectionModel::currentRowChanged, + [this, model](const QModelIndex ¤t, const QModelIndex &previous) { + player->setPosition(model->get_time(current.row())); + }); } void MainWindow::seek(int64_t delta_ms) @@ -138,6 +128,13 @@ void MainWindow::seek(int64_t delta_ms) } } +void MainWindow::insert_event(int button_id) +{ + ui->event_view->selectionModel()->blockSignals(true); + ui->event_view->selectRow(model->insert_event(player->position(), button_id)); + ui->event_view->selectionModel()->blockSignals(false); +} + void MainWindow::set_current_event_type(const string &type) { QItemSelectionModel *select = ui->event_view->selectionModel(); @@ -156,7 +153,9 @@ void MainWindow::delete_current_event() return; } int row = select->selectedRows().front().row(); // Should only be one, due to our selection behavior. + ui->event_view->selectionModel()->blockSignals(true); model->delete_event(row); + ui->event_view->selectionModel()->blockSignals(false); update_status(); } diff --git a/mainwindow.h b/mainwindow.h index 20d8c6c..1f4f29c 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -18,6 +18,7 @@ public: private: void position_changed(uint64_t pos); void seek(int64_t delta_ms); + void insert_event(int button_id); void set_current_event_type(const std::string &type); void delete_current_event(); void update_status(); -- 2.39.2