From e3062c4b7f87ba1cafc8ef52f4ed637578691eae Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 1 May 2023 23:37:02 +0200 Subject: [PATCH] Make it possible to end stoppages. --- events.cpp | 7 +++++++ events.h | 1 + main.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/events.cpp b/events.cpp index 7c9f93e..2ed6649 100644 --- a/events.cpp +++ b/events.cpp @@ -231,6 +231,7 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t) s.our_score = 0; s.their_score = 0; s.offense = true; + s.stoppage = false; uint64_t last_gained_possession = 0; unsigned num_touches = 0; for (const Event &e : events) { @@ -266,6 +267,12 @@ EventsModel::Status EventsModel::get_status_at(uint64_t t) s.offense = false; num_touches = 0; } + if (e.type == "stoppage") { + s.stoppage = true; + } + if (e.type == "restart") { + s.stoppage = false; + } } s.num_passes = (num_touches == 0) ? 0 : num_touches - 1; s.possession_sec = (s.offense && last_gained_possession != 0 && num_touches != 0) ? (t - last_gained_possession) / 1000 : 0; diff --git a/events.h b/events.h index fe5bd6d..d0f5b19 100644 --- a/events.h +++ b/events.h @@ -34,6 +34,7 @@ public: struct Status { unsigned our_score, their_score; bool offense; + bool stoppage; unsigned num_passes; unsigned possession_sec; }; diff --git a/main.cpp b/main.cpp index 9b9f630..7b139b0 100644 --- a/main.cpp +++ b/main.cpp @@ -108,7 +108,14 @@ MainWindow::MainWindow(EventsModel *events, PlayersModel *players) : events(even // 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->stoppage, &QPushButton::clicked, [this, events]() { + EventsModel::Status s = events->get_status_at(video->position()); + if (s.stoppage) { + insert_noplayer_event("restart"); + } else { + insert_noplayer_event("stoppage"); + } + }); connect(ui->unknown, &QPushButton::clicked, [this]() { insert_noplayer_event("unknown"); }); QShortcut *key_delete = new QShortcut(QKeySequence(Qt::Key_Delete), this); @@ -159,6 +166,8 @@ void MainWindow::insert_event(int button_id) ui->event_view->selectRow(events->insert_event(t, player_id)); } ui->event_view->selectionModel()->blockSignals(false); + + update_ui_from_time(t); } void MainWindow::insert_noplayer_event(const string &type) @@ -168,6 +177,8 @@ void MainWindow::insert_noplayer_event(const string &type) ui->event_view->selectionModel()->blockSignals(true); ui->event_view->selectRow(events->insert_event(t, nullopt, type)); ui->event_view->selectionModel()->blockSignals(false); + + update_ui_from_time(t); } void MainWindow::set_current_event_type(const string &type) @@ -277,6 +288,7 @@ void MainWindow::update_player_buttons(uint64_t t) void MainWindow::update_action_buttons(uint64_t t) { EventsModel::Status s = events->get_status_at(t); + bool has_selection = false; bool has_selection_with_player = false; @@ -286,6 +298,32 @@ void MainWindow::update_action_buttons(uint64_t t) int row = select->selectedRows().front().row(); // Should only be one, due to our selection behavior. has_selection_with_player = events->get_player_id(row).has_value(); } + ui->delete_->setEnabled(has_selection); + + if (s.stoppage) { + ui->stoppage->setText("Restart (&v)"); + ui->stoppage->setShortcut(QCoreApplication::translate("MainWindow", "V", nullptr)); + ui->catch_->setEnabled(false); + ui->throwaway->setEnabled(false); + ui->drop->setEnabled(false); + ui->goal->setEnabled(false); + ui->offensive_soft_plus->setEnabled(false); + ui->offensive_soft_minus->setEnabled(false); + ui->pull->setEnabled(false); + ui->pull_landed->setEnabled(false); + ui->interception->setEnabled(false); + ui->their_throwaway->setEnabled(false); + ui->our_defense->setEnabled(false); + ui->their_goal->setEnabled(false); + ui->defensive_soft_plus->setEnabled(false); + ui->defensive_soft_minus->setEnabled(false); + ui->their_pull->setEnabled(false); + ui->our_foul->setEnabled(false); + return; + } else { + ui->stoppage->setText("Stoppage (&v)"); + ui->stoppage->setShortcut(QCoreApplication::translate("MainWindow", "V", nullptr)); + } ui->catch_->setEnabled(s.offense && has_selection_with_player); ui->throwaway->setEnabled(s.offense && has_selection_with_player); @@ -306,8 +344,6 @@ void MainWindow::update_action_buttons(uint64_t t) ui->defensive_soft_minus->setEnabled(!s.offense && has_selection_with_player); ui->their_pull->setEnabled(!s.offense); ui->our_foul->setEnabled(!s.offense && has_selection_with_player); - - ui->delete_->setEnabled(has_selection); } sqlite3 *open_db(const char *filename) -- 2.39.2