From da925f5694d29a60bf009dba1bf5d5870afd1486 Mon Sep 17 00:00:00 2001 From: David Given Date: Sat, 13 Jan 2024 01:06:25 +0100 Subject: [PATCH] Start doing some initialisation. --- src/gui2/build.py | 2 ++ src/gui2/globals.h | 19 ++++++++++++++++++- src/gui2/main.cc | 13 +++++++++++-- src/gui2/mainwindow.cc | 34 ++++++++++++++++++++++++++++++++++ src/gui2/mainwindow.h | 2 ++ src/gui2/userinterface.ui | 12 +++++++++--- 6 files changed, 76 insertions(+), 6 deletions(-) diff --git a/src/gui2/build.py b/src/gui2/build.py index 95e1ae56..00e5de96 100644 --- a/src/gui2/build.py +++ b/src/gui2/build.py @@ -4,6 +4,7 @@ from build.pkg import package import config package(name="Qt5Widgets", package="Qt5Widgets") +package(name="Qt5Concurrent", package="Qt5Concurrent") normalrule( name="userinterface_h", @@ -57,6 +58,7 @@ cxxprogram( "+fmt_lib", "+protobuf_lib", ".+Qt5Widgets", + ".+Qt5Concurrent", ".+userinterface", ], ) diff --git a/src/gui2/globals.h b/src/gui2/globals.h index f9a7158d..377f6d67 100644 --- a/src/gui2/globals.h +++ b/src/gui2/globals.h @@ -1,6 +1,11 @@ #pragma once +#include "lib/globals.h" #include "userinterface.h" +#include +#include + +extern QThreadPool workerThreadPool; class UserInterface : public Ui_MainWindow { @@ -12,7 +17,19 @@ public: Application(int& argc, char** argv): QApplication(argc, argv) {} virtual ~Application() {} + virtual void sendToUiThread(std::function callback) = 0; + public: }; -extern std::unique_ptr app; +template +auto runOnWorkerThread(F function) +{ + return QtConcurrent::run(&workerThreadPool, + [=]() + { + return function(); + }); +} + +extern Application* app; diff --git a/src/gui2/main.cc b/src/gui2/main.cc index 6fcbc932..4a00c611 100644 --- a/src/gui2/main.cc +++ b/src/gui2/main.cc @@ -1,8 +1,12 @@ #include "globals.h" #include "mainwindow.h" +#include -std::unique_ptr app; +Application* app; +QThreadPool workerThreadPool; +/* This has to go first due to C++ compiler limitations (has to be defined + * before use). */ class ApplicationImpl : public Application { public: @@ -13,6 +17,9 @@ public: _mainWindow->show(); } +public: + void sendToUiThread(std::function callback) override {} + private: std::unique_ptr _mainWindow; }; @@ -20,6 +27,8 @@ private: int main(int argc, char** argv) { Q_INIT_RESOURCE(resources); - app = std::make_unique(argc, argv); + workerThreadPool.setMaxThreadCount(1); + ApplicationImpl impl(argc, argv); + app = &impl; return app->exec(); } \ No newline at end of file diff --git a/src/gui2/mainwindow.cc b/src/gui2/mainwindow.cc index 6c3a6f06..f6adb7d1 100644 --- a/src/gui2/mainwindow.cc +++ b/src/gui2/mainwindow.cc @@ -1,3 +1,6 @@ +#include "lib/globals.h" +#include "lib/proto.h" +#include "lib/usb/usbfinder.h" #include "mainwindow.h" class MainWindowImpl : public MainWindow @@ -10,6 +13,17 @@ public: setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); setDriveConfigurationPane(noDriveConfigurationWidget); + initialiseFormats(); + initialiseDevices(); + + connect(revolutionsSlider, + &QSlider::valueChanged, + revolutionsSpinBox, + &QSpinBox::setValue); + connect(revolutionsSpinBox, + QOverload::of(&QSpinBox::valueChanged), + revolutionsSlider, + &QSlider::setValue); } public: @@ -18,6 +32,26 @@ public: for (auto* w : driveConfigurationContainer->findChildren()) w->setVisible(w == active); } + +private: + void initialiseFormats() + { + for (const auto& it : formats) + { + if (it.second->is_extension()) + continue; + + formatsList->addItem(QString::fromStdString(it.first)); + } + } + + void initialiseDevices() + { + auto devices = runOnWorkerThread(findUsbDevices).result(); + + for (const auto& it : devices) {} + fmt::print("device count = {}\n", devices.size()); + } }; std::unique_ptr MainWindow::create() diff --git a/src/gui2/mainwindow.h b/src/gui2/mainwindow.h index 345889e2..4e27dbfb 100644 --- a/src/gui2/mainwindow.h +++ b/src/gui2/mainwindow.h @@ -6,4 +6,6 @@ class MainWindow : public QMainWindow, public Ui_MainWindow { public: static std::unique_ptr create(); + +public: }; diff --git a/src/gui2/userinterface.ui b/src/gui2/userinterface.ui index 8bc333ea..689fa568 100644 --- a/src/gui2/userinterface.ui +++ b/src/gui2/userinterface.ui @@ -350,14 +350,20 @@ - + Qt::Horizontal + + QSlider::TicksAbove + + + 1 + - + @@ -771,7 +777,7 @@ background: white; - + 0