}
}
-unsigned EventsModel::insert_event(uint64_t t, int player_id, const string &type)
+unsigned EventsModel::insert_event(uint64_t t, optional<int> player_id, const string &type)
{
auto it = lower_bound(events.begin(), events.end(), t,
[](const Event &e, uint64_t t) { return e.t < t; });
}
sqlite3_bind_int64(stmt, 1, t);
- sqlite3_bind_int64(stmt, 2, player_id);
+ if (player_id) {
+ sqlite3_bind_int64(stmt, 2, *player_id);
+ } else {
+ sqlite3_bind_null(stmt, 2);
+ }
sqlite3_bind_text(stmt, 3, type.data(), type.size(), SQLITE_STATIC);
ret = sqlite3_step(stmt);
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
QVariant data(const QModelIndex &index, int role) const override;
- unsigned insert_event(uint64_t t, int player_id, const std::string &type = "unknown"); // Returns the row.
+ unsigned insert_event(uint64_t t, std::optional<int> player_id, const std::string &type = "unknown"); // Returns the row.
void delete_event(unsigned row);
void set_event_type(unsigned row, const std::string &type);
uint64_t get_time(unsigned row) { return events[row].t; }
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"); });
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"); });
+
+ // Misc. events
connect(ui->substitution, &QPushButton::clicked, [this]() { make_substitution(); });
QShortcut *key_delete = new QShortcut(QKeySequence(Qt::Key_Delete), this);
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();
void position_changed(uint64_t pos);
void seek(int64_t delta_ms);
void insert_event(int button_id);
+ void insert_noplayer_event(const std::string &type);
void set_current_event_type(const std::string &type);
void delete_current_event();
void make_substitution();