//emit dataChanged(QModelIndex(
}
-int EventsModel::insert_event(uint64_t t, int player_id)
+unsigned EventsModel::insert_event(uint64_t t, int player_id)
{
auto it = lower_bound(events.begin(), events.end(), t,
[](const Event &e, uint64_t t) { return e.t < t; });
- int pos = distance(events.begin(), it);
+ unsigned pos = distance(events.begin(), it);
beginInsertRows(QModelIndex(), pos, pos);
Event e;
return pos;
}
+void EventsModel::delete_event(unsigned pos)
+{
+ int event_id = events[pos].event_id;
+
+ beginRemoveRows(QModelIndex(), pos, pos);
+ events.erase(events.begin() + pos);
+ endRemoveRows();
+
+ // Delete the row from the database.
+ sqlite3_stmt *stmt;
+ int ret = sqlite3_prepare_v2(db, "DELETE FROM event WHERE event=?", -1, &stmt, 0);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "DELETE prepare: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ sqlite3_bind_int64(stmt, 1, event_id);
+
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_ROW) {
+ fprintf(stderr, "DELETE step: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ ret = sqlite3_finalize(stmt);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "DELETE finalize: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+}
+
void EventsModel::set_event_type(unsigned pos, const string &type)
{
events[pos].type = type;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
QVariant data(const QModelIndex &index, int role) const override;
- int insert_event(uint64_t t, int player_id);
+ unsigned insert_event(uint64_t t, int player_id); // Returns the row.
+ void delete_event(unsigned row);
void set_event_type(unsigned row, const std::string &type);
private:
private:
void seek(int64_t delta_ms);
void set_current_event_type(const std::string &type);
+ void delete_current_event();
Ui::MainWindow *ui;
EventsModel *model;
<property name="text">
<string>Delete (⌫)</string>
</property>
+ <property name="shortcut">
+ <string>Backspace</string>
+ </property>
</widget>
</item>
<item row="0" column="1">
connect(ui->offensive_soft_minus, &QPushButton::clicked, [this]() { set_current_event_type("offensive_soft_minus"); });
connect(ui->pull, &QPushButton::clicked, [this]() { set_current_event_type("pull"); });
connect(ui->pull_landed, &QPushButton::clicked, [this]() { set_current_event_type("pull_landed"); });
+
+ QShortcut *key_delete = new QShortcut(QKeySequence(Qt::Key_Delete), this);
+ connect(key_delete, &QShortcut::activated, [this]() { ui->delete_->animateClick(); });
+ connect(ui->delete_, &QPushButton::clicked, [this]() { delete_current_event(); });
}
void MainWindow::setModel(EventsModel *model)
model->set_event_type(row, type);
}
+void MainWindow::delete_current_event()
+{
+ QItemSelectionModel *select = ui->event_view->selectionModel();
+ if (!select->hasSelection()) {
+ return;
+ }
+ int row = select->selectedRows().front().row(); // Should only be one, due to our selection behavior.
+ model->delete_event(row);
+}
+
sqlite3 *open_db(const char *filename)
{
sqlite3 *db;