]> git.sesse.net Git - pkanalytics/commitdiff
Make it possible to end stoppages.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 21:37:02 +0000 (23:37 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 21:37:05 +0000 (23:37 +0200)
events.cpp
events.h
main.cpp

index 7c9f93e9413cc1bf28fddf9943f3926d9e520707..2ed6649f8f77313318abac2862ebe60cca882f9f 100644 (file)
@@ -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;
index fe5bd6d47222858720471175760df9b1ff98bcad..d0f5b19897e5579b669856377229df8f9ceeb885 100644 (file)
--- 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;
        };
index 9b9f6305ba7db66dc35ccb65da8543346176242f..7b139b0437568e19ba7a21d64fc5ae4cf68308a9 100644 (file)
--- 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)