/*************************************************************************** BionxControl Copyright © 2025 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 BCMAINWINDOW_H #define BCMAINWINDOW_H #include #include #include class BCDeviceView; class BCMainWindow : public QMainWindow, public Ui_BCMainWindow { Q_OBJECT public: BCMainWindow(QWidget *parent = nullptr); virtual ~BCMainWindow(); void setHeaderLabel( const QString& headerText); public slots: //void onValueListReady( BCDevice::ID deviceID ); void onShowDevicePanel( BCDevice::ID deviceID ); void onConnectButtonToggled(bool active ); // Slots für Rückmeldungen vom Runner void onValueUpdated( BCDevice::ID deviceID, int index, BCValue::State state, const QString& newValue="" ); void onSyncFromDevice(); signals: // Internes Signal, um Daten an den Worker Thread zu senden void requestValueUpdate( BCValue::OpID, const BCValue* cmd); //void valuedTouched(const BCValue& cmd); void valueTouched(int indexRow ); protected: void initMainWindow(); BCXmlLoader _dataManager; // Wir brauchen eine Verbindung zwischen den Views // und dem Device, das sie darstellen. using BCDeviceViews = QHash; BCDeviceViews _devicePanels; BCDeviceView* _currentPanel{}; QThread _worker; BCTransmitter _transmitter; static constexpr const char* BCKeyHeaderLabel = "BCHeaderLabel"; }; class ThemeSwitchButton : public QPushButton { Q_OBJECT public: explicit ThemeSwitchButton(QWidget *parent = nullptr) : QPushButton(parent), m_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: 4px; } )"); // 2. Initialer Status (Startet im Dark Mode -> zeigt Mond) updateIcon(); // 3. Klick verbinden connect(this, &QPushButton::clicked, this, &ThemeSwitchButton::toggle); } signals: void themeChanged(bool isDark); private slots: void toggle() { m_isDarkMode = !m_isDarkMode; updateIcon(); emit themeChanged(m_isDarkMode); } private: void updateIcon() { // Logik: // Ist Dark Mode an? Zeige Mond (oder Sonne, je nach Geschmack). // Hier: Zeige das Symbol des AKTUELLEN Modus. setText(m_isDarkMode ? "🌙" : "☀️"); setToolTip(m_isDarkMode ? "Switch to Light Mode" : "Switch to Dark Mode"); } bool m_isDarkMode; }; #endif // BCMAINWINDOW_H