]> git.sesse.net Git - pkanalytics/commitdiff
Add some defensive events.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 17:18:50 +0000 (19:18 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 17:18:50 +0000 (19:18 +0200)
events.cpp
events.h
main.cpp
mainwindow.h

index a2d5e07b82df5743f2bd13f5f11266de322f2b9c..5ca51c98191e68de5bedf184af28739d4a538501 100644 (file)
@@ -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<int> 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);
index 946ebb543b2dc7db95a6bb4461f1df3c35cdd205..3574cc6736c3d90c587c595a0d4e0bdb58774da5 100644 (file)
--- 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<int> 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; }
index acefe9ff4baddce71413bf87fef97a0476d8f187..de5fc6194d5e16709ca95f6cdb1e41788cac9011 100644 (file)
--- 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();
index f046b688746933e57db7d10b8fd1f8c147b55fd1..112c1612827119fb880db0ebd0b0ae6c7fdf2417 100644 (file)
@@ -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();