+// Formation buttons either modify the existing formation (if we've selected
+// a formation change event), or insert a new one (if not).
+void MainWindow::insert_or_change_formation(bool offense)
+{
+ FormationsModel *formations = offense ? offensive_formations : defensive_formations;
+ QListView *formation_view = offense ? ui->offensive_formation_view : ui->defensive_formation_view;
+ if (!formation_view->selectionModel()->hasSelection()) {
+ // This shouldn't happen; the button should not have been enabled.
+ return;
+ }
+ int formation_row = formation_view->selectionModel()->selectedRows().front().row(); // Should only be one, due to our selection behavior.
+ int formation_id = formations->get_formation_id(formation_row);
+ if (formation_id == -1) {
+ // This also shouldn't happen (“Add new…” selected).
+ return;
+ }
+
+ QItemSelectionModel *select = ui->event_view->selectionModel();
+ if (select->hasSelection()) {
+ int row = select->selectedRows().front().row(); // Should only be one, due to our selection behavior.
+ string expected_type = offense ? "formation_offense" : "formation_defense";
+ if (events->get_event_type(row) == expected_type) {
+ events->set_event_formation(row, formation_id);
+ update_ui_from_time(video->position());
+ return;
+ }
+ }
+
+ // Insert a new formation event instead (same as double-click on the selected one).
+ events->set_formation_at(video->position(), offense, formation_id);
+ update_ui_from_time(video->position());
+}
+