Files
BionxControl/main.cpp
2025-12-23 14:58:54 +01:00

134 lines
3.1 KiB
C++

/***************************************************************************
BionxControl
Copyright © 2025 christoph holzheuer
christoph.holzheuer@gmail.com
Using:
BigXionFlasher USB V 0.2.4 rev. 97
© 2011-2013 by Thomas Koenig <info@bigxionflasher.org>
@see www.bigxionflasher.org
Bionx Bike Info
© 2018 Thorsten Schmidt (tschmidt@ts-soft.de)
@see www.ts-soft.de
mhs_can_drv.c 3.00
© 2011 - 2015 by MHS-Elektronik GmbH & Co. KG, Germany
Demlehner Klaus, info@mhs-elektronik.de
@see www.mhs-elektronik.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
@see https://github.com/bikemike/bionx-bikeinfo
***************************************************************************/
#include <QApplication>
#include <QMetaEnum>
#include <QFile>
#include <QLabel>
#include <QProgressBar>
// main.cpp
#include <QCoreApplication>
#include <QTimer>
#include <QDebug>
#include <bcmainwindow.h>
#include <bcdataitem.h>
#include <bcvdatamanager.h>
#include <variant>
#include <string>
#include <QThread>
bool setApplicationStyleSheet( QAnyStringView path )
{
QFile styleFile( path.toString() );
if (styleFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QString style = styleFile.readAll();
qApp->setStyleSheet(style);
styleFile.close();
return true;
}
qWarning() << "Konnte Stylesheet nicht laden:" << styleFile.errorString();
return true;
}
struct moo
{
QString moo_str {"irgendwas"};
};
// Verschiedene Datentypen für die Sensoren
struct Temperature : public moo{ float celsius; };
struct CpuLoad : public moo{ int percentage; };
struct Status : public moo{ std::string message; };
// Die Variant als universeller Datencontainer
using SensorReading = std::variant<Temperature, CpuLoad, Status>;
struct UIUpdateVisitor
{
QLabel* tempLabel;
QProgressBar* cpuBar;
QLabel* statusLabel;
// Überladene operator() für jeden Typ in der Variant
void operator()(const Temperature& t) const
{
tempLabel->setText(QString("Temp: %1°C").arg(t.celsius, 0, 'f', 1));
tempLabel->setStyleSheet(t.celsius > 40 ? "color: red;" : "color: black;");
}
void operator()(const CpuLoad& c) const
{
cpuBar->setValue(c.percentage);
qDebug() << c.moo_str;
}
void operator()(const Status& s) const
{
statusLabel->setText(QString::fromStdString(s.message));
}
};
void onNewDataReceived(const SensorReading& data)
{
QLabel* labelTemp = nullptr;
QProgressBar* progressCpu = nullptr;
QLabel* labelStatus = nullptr;
// Wir erstellen den Visitor mit Referenzen auf unsere UI-Elemente
UIUpdateVisitor visitor { labelTemp, progressCpu, labelStatus };
// Die Magie: std::visit wählt zur Kompilierzeit die richtige Methode
std::visit(visitor, data);
}
// 2. Datei öffnen und lesen
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
setApplicationStyleSheet( ":/bionxcontrol.qss"_L1 );
BCMainWindow w;
w.show();
return app.exec();
}