]> git.sesse.net Git - pkanalytics/commitdiff
Make it possible to seek to an event by clicking on it.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 13:57:53 +0000 (15:57 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 13:57:53 +0000 (15:57 +0200)
events.h
main.cpp
mainwindow.h

index db11ed0776fa850b5ec8265e065c6fd785b904c5..56fcbaff53a07ec93278b9af3a9d4bcc94794229 100644 (file)
--- 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;
index 460ddd8dc6aff2329520aaf40417f814e986b021..0f66603d015e600d520080393816652d3f598cf8 100644 (file)
--- 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 &current, 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();
 }
 
index 20d8c6cc7348cda754f8fbd9107b6f215144acf8..1f4f29c8b3babfb7c43ec754fa7d35d2dc58f426 100644 (file)
@@ -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();