+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;
+
+ QItemSelectionModel *select = ui->event_view->selectionModel();
+ if (select->hasSelection()) {
+ has_selection = true;
+ 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->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);
+ return;
+ } else {
+ ui->stoppage->setText("Stoppage (&v)");
+ ui->stoppage->setShortcut(QCoreApplication::translate("MainWindow", "V", nullptr));
+ }
+
+ // Defaults for pull-related buttons.
+ ui->pull->setText("Pull (&p)");
+ ui->their_pull->setText("Their pull (&p)");
+ ui->pull->setShortcut(QCoreApplication::translate("MainWindow", "P", nullptr));
+ ui->their_pull->setShortcut(QCoreApplication::translate("MainWindow", "P", nullptr));
+ ui->throwaway->setText("Throwaway (&t)");
+ ui->throwaway->setShortcut(QCoreApplication::translate("MainWindow", "T", nullptr));
+
+ if (s.pull_state == EventsModel::Status::SHOULD_PULL) {
+ ui->pull->setEnabled(s.attack_state == EventsModel::Status::DEFENSE && has_selection_with_player);
+ ui->their_pull->setEnabled(s.attack_state == EventsModel::Status::OFFENSE);
+
+ 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->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);
+ return;
+ }
+ if (s.pull_state == EventsModel::Status::PULL_IN_AIR) {
+ if (s.attack_state == EventsModel::Status::DEFENSE) {
+ ui->pull->setText("Pull landed (&p)");
+ ui->pull->setShortcut(QCoreApplication::translate("MainWindow", "P", nullptr));
+ ui->pull->setEnabled(true);
+
+ ui->throwaway->setText("Pull OOB (&t)");
+ ui->throwaway->setShortcut(QCoreApplication::translate("MainWindow", "T", nullptr));
+ ui->throwaway->setEnabled(true);
+ } else {
+ ui->pull->setEnabled(false);
+ ui->throwaway->setEnabled(false);
+ }
+ ui->their_pull->setEnabled(false); // We don't track their pull landings; only by means of catch etc.
+
+ ui->catch_->setEnabled(false);
+ ui->drop->setEnabled(false);
+ ui->goal->setEnabled(false);
+ ui->offensive_soft_plus->setEnabled(false);
+ ui->offensive_soft_minus->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);
+ return;
+ }
+
+ ui->catch_->setEnabled(s.attack_state == EventsModel::Status::OFFENSE && has_selection_with_player);
+ ui->throwaway->setEnabled(s.attack_state == EventsModel::Status::OFFENSE && has_selection_with_player);
+ ui->drop->setEnabled(s.attack_state == EventsModel::Status::OFFENSE && has_selection_with_player);
+ ui->goal->setEnabled(s.attack_state == EventsModel::Status::OFFENSE && has_selection_with_player);
+ ui->offensive_soft_plus->setEnabled(s.attack_state == EventsModel::Status::OFFENSE && has_selection_with_player);
+ ui->offensive_soft_minus->setEnabled(s.attack_state == EventsModel::Status::OFFENSE && has_selection_with_player);
+ ui->pull->setEnabled(false);
+
+ ui->interception->setEnabled(s.attack_state == EventsModel::Status::DEFENSE && has_selection_with_player);
+ ui->their_throwaway->setEnabled(s.attack_state == EventsModel::Status::DEFENSE);
+ ui->our_defense->setEnabled(s.attack_state == EventsModel::Status::DEFENSE && has_selection_with_player);
+ ui->their_goal->setEnabled(s.attack_state == EventsModel::Status::DEFENSE);
+ ui->defensive_soft_plus->setEnabled(s.attack_state == EventsModel::Status::DEFENSE && has_selection_with_player);
+ ui->defensive_soft_minus->setEnabled(s.attack_state == EventsModel::Status::DEFENSE && has_selection_with_player);
+ ui->their_pull->setEnabled(false);
+}
+