From e118fa4a20ec0cdd28f253fe7c88842ca83088bf Mon Sep 17 00:00:00 2001 From: "PANIK\\chris" Date: Sun, 4 Jan 2026 02:06:27 +0100 Subject: [PATCH] Add missing files. --- bcguihelpers.cpp | 188 +++++++++++++++++++++++++++++++++++++++++ bcguihelpers.h | 97 +++++++++++++++++++++ resources/bikeinfo.xml | 4 +- 3 files changed, 287 insertions(+), 2 deletions(-) create mode 100644 bcguihelpers.cpp create mode 100644 bcguihelpers.h diff --git a/bcguihelpers.cpp b/bcguihelpers.cpp new file mode 100644 index 0000000..5894ca5 --- /dev/null +++ b/bcguihelpers.cpp @@ -0,0 +1,188 @@ +/*************************************************************************** + + BionxControl + © 2025 -2026 christoph holzheuer + christoph.holzheuer@gmail.com + + Using: + + mhs_can_drv.c + © 2011 - 2023 by MHS-Elektronik GmbH & Co. KG, Germany + Klaus Demlehner, klaus@mhs-elektronik.de + @see www.mhs-elektronik.de + + Based on Bionx data type descriptions from: + + BigXionFlasher USB V 0.2.4 rev. 97 + © 2011-2013 by Thomas Koenig + @see www.bigxionflasher.org + + Bionx Bike Info + © 2018 Thorsten Schmidt (tschmidt@ts-soft.de) + @see www.ts-soft.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 + +BCThemeSwitchButton::BCThemeSwitchButton(QWidget *parent ) + : QPushButton(parent), _isDarkMode(true) +{ + // 1. Visuelles Setup: Flach, keine Ränder, Hand-Cursor + setFlat(true); + setCursor(Qt::PointingHandCursor); + setFixedSize(24, 24); // Kleiner Footprint im StatusBar + + // CSS: Transparent, damit es sich nahtlos in den StatusBar einfügt + // Schriftgröße etwas erhöhen, damit die Emojis gut erkennbar sind + setStyleSheet(R"( + QPushButton { + border: none; + background-color: transparent; + font-size: 11pt; + } + QPushButton:hover { + background-color: rgba(128, 128, 128, 30); // Leichter Hover-Effekt + border-radius: 24px; + } + )"); + + // 2. Initialer Status (Startet im Dark Mode -> zeigt Mond) + updateIcon(); + + // 3. Klick verbinden + connect(this, &QPushButton::clicked, this, &BCThemeSwitchButton::toggle); +} + + + +void BCThemeSwitchButton::toggle() +{ + _isDarkMode = !_isDarkMode; + updateIcon(); + emit themeChanged(_isDarkMode); +} + + +void BCThemeSwitchButton::updateIcon() +{ + // Logik: + // Ist Dark Mode an? Zeige Mond (oder Sonne, je nach Geschmack). + // Hier: Zeige das Symbol des AKTUELLEN Modus. + setText(_isDarkMode ? "🌙" : "☀️"); + setToolTip(_isDarkMode ? "Switch to Light Mode" : "Switch to Dark Mode"); +} + + +/// ----------------------------------------------------------------------------------- +/// ----------------------------------------------------------------------------------- + + + + +BCDriverStateWidget::BCDriverStateWidget(QWidget* parent) + : QWidget(parent) +{ + QHBoxLayout* layout = new QHBoxLayout(this); + layout->setContentsMargins(10, 2, 10, 2); + layout->setSpacing(8); + + _label = new QLabel(this); + _label->setStyleSheet("font-weight: 500;"); // Medium weight + + _led = new QLabel(this); + _led->setFixedSize(12, 12); + + layout->addWidget(_label); + layout->addWidget(_led); + + // Startzustand + onDriverStateChanged(BCDriver::DriverState::NotPresent, "Not Present"); +} + + + +// Hauptfunktion zum Setzen des Status +// 'customMessage' ist optional. Wenn leer, wird ein Standardtext genommen. +void BCDriverStateWidget::onDriverStateChanged(BCDriver::DriverState state, const QString& customMessage) +{ + _state = state; + qDebug() << " --- StateWidget: " << state << " - " << customMessage; + // Standard-Texte, falls keine Nachricht übergeben wurde + QString text = customMessage; + if (text.isEmpty()) + { + switch (_state) + { + case BCDriver::DriverState::DeviceReady: + text = "Device Ready"; + break; + + case BCDriver::DriverState::Error: + text = "Driver Error"; + break; + + default: + text = "Not Present"; + break; + } + } + _label->setText(text); + + updateStyle(); +} + + +void BCDriverStateWidget::updateStyle() +{ + QString ledStyle; + QString labelColor; + QString toolTipText; + + switch (_state) + { + case BCDriver::DriverState::DeviceReady: + // FLUENT GREEN (Success) + ledStyle = "background-color: #107C10; border: 1px solid #0E600E;#FF5F1F; #FF8C00;<- das isses #FF6700"; + labelColor = "#FFFFFF"; // Weiß (Hervorgehoben) + toolTipText = "Verbindung erfolgreich hergestellt."; + break; + + case BCDriver::DriverState::Error: + // FLUENT RED (Critical) + ledStyle = "background-color: #C42B1C; border: 1px solid #A80000;"; + labelColor = "#FF99A4"; // Ein helleres Rot für Text, damit es auf Dunkel lesbar ist + toolTipText = "Kritischer Fehler bei der Verbindung!"; + break; + + default: + // FLUENT GRAY (Neutral) + // Wir machen es dunkelgrau mit hellem Rand -> "Ausgeschaltet"-Look + ledStyle = "background-color: #3B3B3B; border: 1px solid #606060;"; + labelColor = "#9E9E9E"; // Ausgegrauter Text + toolTipText = "System ist offline."; + break; + } + + // Styles anwenden (immer rund machen) + _led->setStyleSheet(ledStyle + "border-radius: 6px;"); + + // Textfarbe setzen + _label->setStyleSheet(QString("color: %1; font-weight: %2;") + .arg(labelColor) + .arg(_state == BCDriver::DriverState::DeviceReady ? "bold" : "normal")); + + setToolTip(toolTipText); +} + + + + + diff --git a/bcguihelpers.h b/bcguihelpers.h new file mode 100644 index 0000000..4b2d480 --- /dev/null +++ b/bcguihelpers.h @@ -0,0 +1,97 @@ +/*************************************************************************** + + BionxControl + © 2025 -2026 christoph holzheuer + christoph.holzheuer@gmail.com + + Using: + + mhs_can_drv.c + © 2011 - 2023 by MHS-Elektronik GmbH & Co. KG, Germany + Klaus Demlehner, klaus@mhs-elektronik.de + @see www.mhs-elektronik.de + + Based on Bionx data type descriptions from: + + BigXionFlasher USB V 0.2.4 rev. 97 + © 2011-2013 by Thomas Koenig + @see www.bigxionflasher.org + + Bionx Bike Info + © 2018 Thorsten Schmidt (tschmidt@ts-soft.de) + @see www.ts-soft.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 + + ***************************************************************************/ + + +#ifndef BCGUIHELPERS_H +#define BCGUIHELPERS_H + +#include +#include +#include + +#include + + +class BCThemeSwitchButton : public QPushButton +{ + Q_OBJECT + +public: + + explicit BCThemeSwitchButton(QWidget *parent = nullptr); + +signals: + + void themeChanged(bool isDark); + +private slots: + + void toggle(); + +private: + + void updateIcon(); + + bool _isDarkMode; + +}; + + + +/// ----------------------------------------------------------------------------------- +/// ----------------------------------------------------------------------------------- + + +class BCDriverStateWidget : public QWidget +{ + Q_OBJECT + +public: + + explicit BCDriverStateWidget(QWidget *parent = nullptr); + +public slots: + + // Hauptfunktion zum Setzen des Status + // 'customMessage' ist optional. Wenn leer, wird ein Standardtext genommen. + void onDriverStateChanged(BCDriver::DriverState state, const QString& customMessage = QString()); + +private: + + void updateStyle(); + + QLabel* _led; + QLabel* _label; + BCDriver::DriverState _state; + +}; + +#endif // BCGUIHELPERS_H diff --git a/resources/bikeinfo.xml b/resources/bikeinfo.xml index cd8d234..abb0327 100644 --- a/resources/bikeinfo.xml +++ b/resources/bikeinfo.xml @@ -5,8 +5,7 @@ - -