]> git.sesse.net Git - pkanalytics/blobdiff - main.cpp
Fix an off-by-one in inserting events.
[pkanalytics] / main.cpp
index acefe9ff4baddce71413bf87fef97a0476d8f187..552b75ad4114290b456fbec38de0313e9078cd7d 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,7 +99,18 @@ 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"); });
+       connect(ui->our_defense, &QPushButton::clicked, [this]() { set_current_event_type("defense"); });  // TODO: player-connected
+       connect(ui->defensive_soft_plus, &QPushButton::clicked, [this]() { set_current_event_type("defensive_soft_plus"); });  // TODO: player-connected
+       connect(ui->defensive_soft_minus, &QPushButton::clicked, [this]() { set_current_event_type("defensive_soft_minus"); });  // TODO: player-connected
+
+       // Misc. events
        connect(ui->substitution, &QPushButton::clicked, [this]() { make_substitution(); });
+       connect(ui->stoppage, &QPushButton::clicked, [this]() { insert_noplayer_event("stoppage"); });  // FIXME needs a way to restart
+       connect(ui->unknown, &QPushButton::clicked, [this]() { insert_noplayer_event("unknown"); });
 
        QShortcut *key_delete = new QShortcut(QKeySequence(Qt::Key_Delete), this);
        connect(key_delete, &QShortcut::activated, [this]() { ui->delete_->animateClick(); });
@@ -133,7 +145,7 @@ void MainWindow::insert_event(int button_id)
 {
        uint64_t t = video->position();
        set<int> team = events->get_team_at(t);
-       if (button_id >= team.size()) {
+       if (button_id > team.size()) {
                return;
        }
        int player_id = *next(team.begin(), button_id - 1);
@@ -143,6 +155,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();