162 lines
3.6 KiB
C++
162 lines
3.6 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 <bcdatamanager.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 SensorReadingPtr = std::variant<Temperature*, CpuLoad*, Status*>;
|
|
|
|
|
|
|
|
struct UIUpdateVisitor
|
|
{
|
|
QLabel* tempLabel;
|
|
QProgressBar* cpuBar;
|
|
QLabel* statusLabel;
|
|
|
|
// Überladene operator() für jeden Typ in der Variant
|
|
double operator()(Temperature* t) const
|
|
{
|
|
//tempLabel->setText(QString("Temp: %1°C").arg(t.celsius, 0, 'f', 1));
|
|
//tempLabel->setStyleSheet(t.celsius > 40 ? "color: red;" : "color: black;");
|
|
return -1;
|
|
}
|
|
|
|
double operator()(CpuLoad* c) const
|
|
{
|
|
cpuBar->setValue(c->percentage);
|
|
qDebug() << c->moo_str;
|
|
return -42.0;
|
|
}
|
|
|
|
double operator()(const Status* s) const
|
|
{
|
|
//statusLabel->setText(QString::fromStdString(s.message));
|
|
return -1;
|
|
}
|
|
};
|
|
|
|
void onNewDataReceived(const SensorReadingPtr& 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
|
|
double result = std::visit(visitor, data);
|
|
Q_UNUSED(result)
|
|
|
|
|
|
Temperature myTemp{};
|
|
SensorReadingPtr xxx{&myTemp};
|
|
double result2 = std::visit(visitor, SensorReadingPtr{&myTemp} );
|
|
}
|
|
|
|
struct mookoo
|
|
{
|
|
QString a="firz";
|
|
int b=2;
|
|
double c=1.0;
|
|
QString hidden{"Fatz!"};
|
|
};
|
|
|
|
struct mookoo2 : public mookoo
|
|
{
|
|
int another;
|
|
};
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
QApplication app(argc, argv);
|
|
setApplicationStyleSheet( ":/bionxcontrol.qss"_L1 );
|
|
|
|
mookoo myMookoo{"",1,1.0};
|
|
mookoo myMooko2{"",1};
|
|
mookoo2 myMooko3{{"superfitze",1},8};
|
|
|
|
qDebug() << " --- haha: " << myMooko3.a << ": " << myMooko3.hidden;
|
|
|
|
BCMainWindow w;
|
|
w.show();
|
|
|
|
return app.exec();
|
|
|
|
}
|