]> git.sesse.net Git - pkanalytics/commitdiff
Make it possible to insert events in the UI (very rudimentary yet, though).
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 12:13:53 +0000 (14:13 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 1 May 2023 12:13:53 +0000 (14:13 +0200)
mainwindow.h
mainwindow.ui
stats.cpp

index 5f2188c1f1acdc2b4b1a3352371dbcf546827e83..430b88d5c37a0037d9e7551172536e94729b73df 100644 (file)
@@ -5,7 +5,7 @@
 #include <optional>
 #include "ui_mainwindow.h"
 
-class QAbstractItemModel;
+class EventsModel;
 
 class MainWindow : public QMainWindow
 {
@@ -13,12 +13,13 @@ class MainWindow : public QMainWindow
 
 public:
        MainWindow();
-       void setModel(QAbstractItemModel *model);
+       void setModel(EventsModel *model);
 
 private:
        void seek(int64_t delta_ms);
 
        Ui::MainWindow *ui;
+       EventsModel *model;
        bool seeking = false;
        bool playing = true;
        std::optional<uint64_t> buffered_seek;
index 589e8a573417f9e4ff974d62f5288ed3f0c53bae..e1d42f1b9331723bb6cfb1f32e194b406e2008ea 100644 (file)
        </layout>
       </item>
       <item row="5" column="0" colspan="2">
-       <widget class="QTableView" name="event_view"/>
+       <widget class="QTableView" name="event_view">
+        <property name="selectionMode">
+         <enum>QAbstractItemView::SingleSelection</enum>
+        </property>
+        <property name="selectionBehavior">
+         <enum>QAbstractItemView::SelectRows</enum>
+        </property>
+       </widget>
       </item>
      </layout>
     </item>
index 653c16bd78474fdc583c44b4791fa78b086707c9..356c5f9b177b5fc0310366ba9797e2a6ede931bd 100644 (file)
--- a/stats.cpp
+++ b/stats.cpp
@@ -46,6 +46,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);
+
 private:
        struct Player {
                int player_id;
@@ -176,6 +178,26 @@ void EventsModel::refresh_if_needed() const
        //emit dataChanged(QModelIndex(
 }
 
+int 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);
+       beginInsertRows(QModelIndex(), pos, pos + 1);
+
+       Event e;
+       e.t = t;
+       e.player_id = player_id;
+       e.type = "unknown";
+       events.insert(events.begin() + pos, e);
+
+       endInsertRows();
+
+       // FIXME sqlite
+
+       return pos;
+}
+
 MainWindow::MainWindow()
 {
        player = new QMediaPlayer;
@@ -223,11 +245,34 @@ MainWindow::MainWindow()
                // Needs to be set anew when we modify setText(), evidently.
                ui->play_pause->setShortcut(QCoreApplication::translate("MainWindow", "Space", nullptr));
        });
+
+       connect(ui->player_1, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 1));
+       });
+       connect(ui->player_2, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 2));
+       });
+       connect(ui->player_3, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 3));
+       });
+       connect(ui->player_4, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 4));
+       });
+       connect(ui->player_5, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 5));
+       });
+       connect(ui->player_6, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 6));
+       });
+       connect(ui->player_7, &QPushButton::clicked, [this]() {
+               ui->event_view->selectRow(model->insert_event(player->position(), 7));
+       });
 }
 
-void MainWindow::setModel(QAbstractItemModel *model)
+void MainWindow::setModel(EventsModel *model)
 {
        ui->event_view->setModel(model);
+       this->model = model;
 }
 
 void MainWindow::seek(int64_t delta_ms)