]> git.sesse.net Git - pkanalytics/commitdiff
Make it possible to delete events.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 13:15:28 +0000 (15:15 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 13:15:28 +0000 (15:15 +0200)
events.cpp
events.h
mainwindow.h
mainwindow.ui
stats.cpp

index 381991a2a211603d7323c2c8efb12fe94ea3cf4f..428ca73821e2d199c4b108a16faf076c13a4ea98 100644 (file)
@@ -120,11 +120,11 @@ void EventsModel::refresh_if_needed() const
        //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;
@@ -163,6 +163,37 @@ int EventsModel::insert_event(uint64_t t, int player_id)
        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;
index 26524687ca3003741cd4bdbd04f184949b10df73..9dba9cfbf573422e65aed247c4246f56057ee308 100644 (file)
--- a/events.h
+++ b/events.h
@@ -25,7 +25,8 @@ public:
        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:
index 4e7095f11dacf8503f10ad72899b657b624ca1be..e78463dc83a388ad99d70f38c3369b25b61f1b1a 100644 (file)
@@ -18,6 +18,7 @@ public:
 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;
index 91ef5e5e0d02a53bea10491dd428afafebf26055..580fbb4eb66d16ea20cfb5f5392228cdcdbdbe44 100644 (file)
             <property name="text">
              <string>Delete (⌫)</string>
             </property>
+            <property name="shortcut">
+             <string>Backspace</string>
+            </property>
            </widget>
           </item>
           <item row="0" column="1">
index 6a96266a217806839237cd4ded48047266fd29c9..437e0eefad815100c8158a902b6752ea092b5a25 100644 (file)
--- a/stats.cpp
+++ b/stats.cpp
@@ -109,6 +109,10 @@ MainWindow::MainWindow()
        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)
@@ -138,6 +142,16 @@ void MainWindow::set_current_event_type(const string &type)
        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;