From fee133a10ff3df8495c24d7eed698a3f33e99bf6 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 1 May 2023 19:18:50 +0200 Subject: [PATCH] Add some defensive events. --- events.cpp | 8 ++++++-- events.h | 2 +- main.cpp | 16 ++++++++++++++++ mainwindow.h | 1 + 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/events.cpp b/events.cpp index a2d5e07..5ca51c9 100644 --- a/events.cpp +++ b/events.cpp @@ -117,7 +117,7 @@ void EventsModel::load_data() } } -unsigned EventsModel::insert_event(uint64_t t, int player_id, const string &type) +unsigned EventsModel::insert_event(uint64_t t, optional player_id, const string &type) { auto it = lower_bound(events.begin(), events.end(), t, [](const Event &e, uint64_t t) { return e.t < t; }); @@ -141,7 +141,11 @@ unsigned EventsModel::insert_event(uint64_t t, int player_id, const string &type } sqlite3_bind_int64(stmt, 1, t); - sqlite3_bind_int64(stmt, 2, player_id); + if (player_id) { + sqlite3_bind_int64(stmt, 2, *player_id); + } else { + sqlite3_bind_null(stmt, 2); + } sqlite3_bind_text(stmt, 3, type.data(), type.size(), SQLITE_STATIC); ret = sqlite3_step(stmt); diff --git a/events.h b/events.h index 946ebb5..3574cc6 100644 --- a/events.h +++ b/events.h @@ -25,7 +25,7 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QVariant data(const QModelIndex &index, int role) const override; - unsigned insert_event(uint64_t t, int player_id, const std::string &type = "unknown"); // Returns the row. + unsigned insert_event(uint64_t t, std::optional player_id, const std::string &type = "unknown"); // 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; } diff --git a/main.cpp b/main.cpp index acefe9f..de5fc61 100644 --- a/main.cpp +++ b/main.cpp @@ -88,6 +88,7 @@ MainWindow::MainWindow(EventsModel *events, PlayersModel *players) : events(even connect(ui->player_6, &QPushButton::clicked, [this]() { insert_event(6); }); connect(ui->player_7, &QPushButton::clicked, [this]() { insert_event(7); }); + // Offensive events // TODO: disable if nothing is selected connect(ui->catch_, &QPushButton::clicked, [this]() { set_current_event_type("catch"); }); connect(ui->throwaway, &QPushButton::clicked, [this]() { set_current_event_type("throwaway"); }); @@ -98,6 +99,12 @@ MainWindow::MainWindow(EventsModel *events, PlayersModel *players) : events(even connect(ui->pull, &QPushButton::clicked, [this]() { set_current_event_type("pull"); }); connect(ui->pull_landed, &QPushButton::clicked, [this]() { set_current_event_type("pull_landed"); }); + // Defensive events (TODO add more) + connect(ui->their_throwaway, &QPushButton::clicked, [this]() { insert_noplayer_event("their_throwaway"); }); + connect(ui->their_goal, &QPushButton::clicked, [this]() { insert_noplayer_event("their_goal"); }); + connect(ui->their_pull, &QPushButton::clicked, [this]() { insert_noplayer_event("their_pull"); }); + + // Misc. events connect(ui->substitution, &QPushButton::clicked, [this]() { make_substitution(); }); QShortcut *key_delete = new QShortcut(QKeySequence(Qt::Key_Delete), this); @@ -143,6 +150,15 @@ void MainWindow::insert_event(int button_id) ui->event_view->selectionModel()->blockSignals(false); } +void MainWindow::insert_noplayer_event(const string &type) +{ + uint64_t t = video->position(); + + ui->event_view->selectionModel()->blockSignals(true); + ui->event_view->selectRow(events->insert_event(t, nullopt, type)); + ui->event_view->selectionModel()->blockSignals(false); +} + void MainWindow::set_current_event_type(const string &type) { QItemSelectionModel *select = ui->event_view->selectionModel(); diff --git a/mainwindow.h b/mainwindow.h index f046b68..112c161 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -19,6 +19,7 @@ private: void position_changed(uint64_t pos); void seek(int64_t delta_ms); void insert_event(int button_id); + void insert_noplayer_event(const std::string &type); void set_current_event_type(const std::string &type); void delete_current_event(); void make_substitution(); -- 2.39.2