From 193579e7981ebf047ab19e96e3b116b0901f2951 Mon Sep 17 00:00:00 2001 From: "PANIK\\chris" Date: Sat, 3 Jan 2026 23:51:14 +0100 Subject: [PATCH] Changed copyright notice. --- BionxControl.pro | 4 +- bclegacy.cpp => aalegacy.cpp | 10 +-- bc.cpp | 2 +- bc.h | 2 +- bcanimateddelegate.cpp | 2 +- bcanimateddelegate.h | 2 +- bcdeviceview.cpp | 6 +- bcdeviceview.h | 2 +- bcdriver.cpp | 2 +- bcdriver.h | 17 ++-- bcdrivertinycan.cpp | 45 ++-------- bcdrivertinycan.h | 5 +- bcmainwindow.cpp | 45 ++++------ bcmainwindow.h | 168 +---------------------------------- bctransmitter.cpp | 33 +++++-- bctransmitter.h | 2 +- bcvalue.cpp | 38 +------- bcvalue.h | 2 +- bcvaluemodel.cpp | 23 +++-- bcvaluemodel.h | 2 +- bcxmlloader.cpp | 2 +- bcxmlloader.h | 2 +- main.cpp | 2 +- 23 files changed, 106 insertions(+), 312 deletions(-) rename bclegacy.cpp => aalegacy.cpp (98%) diff --git a/BionxControl.pro b/BionxControl.pro index 064e17c..564557e 100644 --- a/BionxControl.pro +++ b/BionxControl.pro @@ -27,12 +27,13 @@ windows #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ + aalegacy.cpp \ bc.cpp \ bcanimateddelegate.cpp \ bcdeviceview.cpp \ bcdriver.cpp \ bcdrivertinycan.cpp \ - bclegacy.cpp \ + bcguihelpers.cpp \ bctransmitter.cpp \ bcvalue.cpp \ bcvaluemodel.cpp \ @@ -47,6 +48,7 @@ HEADERS += \ bcdeviceview.h \ bcdriver.h \ bcdrivertinycan.h \ + bcguihelpers.h \ bcmainwindow.h \ bctransmitter.h \ bcvalue.h \ diff --git a/bclegacy.cpp b/aalegacy.cpp similarity index 98% rename from bclegacy.cpp rename to aalegacy.cpp index b4632a9..3c9f2ff 100644 --- a/bclegacy.cpp +++ b/aalegacy.cpp @@ -186,11 +186,11 @@ double gSetSpeedLimit = -1, gSetMinSpeedLimit = -1, gSetThrottleSpeedLimit = -1; #define BIB 4 /* -class ThemeSwitchButton : public QPushButton { +class BCThemeSwitchButton : public QPushButton { Q_OBJECT public: - explicit ThemeSwitchButton(QWidget *parent = nullptr) + explicit BCThemeSwitchButton(QWidget *parent = nullptr) : QPushButton(parent), m_isDarkMode(true) { // 1. Visuelles Setup: Flach, keine Ränder, Hand-Cursor @@ -216,7 +216,7 @@ public: updateIcon(); // 3. Klick verbinden - connect(this, &QPushButton::clicked, this, &ThemeSwitchButton::toggle); + connect(this, &QPushButton::clicked, this, &BCThemeSwitchButton::toggle); } signals: @@ -260,13 +260,13 @@ public: statBar->showMessage("Ready"); // 1. Unseren Switcher erstellen - ThemeSwitchButton *themeBtn = new ThemeSwitchButton(this); + BCThemeSwitchButton *themeBtn = new BCThemeSwitchButton(this); // 2. WICHTIG: Rechts hinzufügen statBar->addPermanentWidget(themeBtn); // 3. Signal verbinden: Button klick -> Theme ändern - connect(themeBtn, &ThemeSwitchButton::themeChanged, this, [this](bool isDark){ + connect(themeBtn, &BCThemeSwitchButton::themeChanged, this, [this](bool isDark){ if (isDark) { applyFluentDarkTheme(*qApp); // Funktion von vorhin statusBar()->showMessage("Dark Mode Activated", 3000); diff --git a/bc.cpp b/bc.cpp index 189dd44..4acc2fe 100644 --- a/bc.cpp +++ b/bc.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bc.h b/bc.h index 5058ebe..49b166a 100644 --- a/bc.h +++ b/bc.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcanimateddelegate.cpp b/bcanimateddelegate.cpp index 82c0459..17ab2c3 100644 --- a/bcanimateddelegate.cpp +++ b/bcanimateddelegate.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcanimateddelegate.h b/bcanimateddelegate.h index 6f07c91..3c66fe8 100644 --- a/bcanimateddelegate.h +++ b/bcanimateddelegate.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcdeviceview.cpp b/bcdeviceview.cpp index be0eafa..c3b1d29 100644 --- a/bcdeviceview.cpp +++ b/bcdeviceview.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -78,8 +78,8 @@ void BCDeviceView::onValueListReady( BCDevice::ID deviceID, BCValueList valueLis } void BCDeviceView::onValueUpdated(int index, BCValue::State state, const QString& newVisibleValue ) -{ - _valueModel.onValueUpdated( index,state,newVisibleValue); +{ + _valueModel.onValueUpdated( index, state, newVisibleValue); _itemDelegate->onHighlightRow( index ); } diff --git a/bcdeviceview.h b/bcdeviceview.h index b760829..7898806 100644 --- a/bcdeviceview.h +++ b/bcdeviceview.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcdriver.cpp b/bcdriver.cpp index c627d9f..b3662ff 100644 --- a/bcdriver.cpp +++ b/bcdriver.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcdriver.h b/bcdriver.h index e18b29e..0d24f3e 100644 --- a/bcdriver.h +++ b/bcdriver.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -93,14 +93,14 @@ public: // Die möglichen Zustände beim Laden // des CAN-Bus Treibers. - enum class DriverState - { - NotPresent, + enum class DriverState : uint8_t + { + NotPresent, + Error, Loaded, Initialized, Opened, // bis hierher: dll vorhanden, Treiber geladen - DeviceReady, // hier: devices connectable, wir können arbeiten. - Error, + DeviceReady // hier: devices connectable, wir können arbeiten. }; Q_ENUM(DriverState) @@ -131,6 +131,11 @@ protected: }; + +/// ----------------------------------------------------------------------------------- +/// ----------------------------------------------------------------------------------- + + class BCDriverDummy : public BCDriver { diff --git a/bcdrivertinycan.cpp b/bcdrivertinycan.cpp index 19de237..b676dfa 100644 --- a/bcdrivertinycan.cpp +++ b/bcdrivertinycan.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -133,35 +133,6 @@ BCDriver::DriverStateResult BCDriverTinyCan::loadDriver() // __fix BCDriver::DriverStateResult BCDriverTinyCan::setConsoleSlaveMode() { - /* - consoleInSlaveMode = getValue(CONSOLE, CONSOLE_STATUS_SLAVE); - - if (consoleInSlaveMode) - { - printf("console already in salve mode. good!" _NL _NL); - } - else - { - if (gConsoleSetSlaveMode) - { - int retry = 20; - - printf("putting console in salve mode ... "); - do { - setValue(CONSOLE, CONSOLE_STATUS_SLAVE, 1); - consoleInSlaveMode = getValue(CONSOLE, CONSOLE_STATUS_SLAVE); - usleep(200000); - } while(retry-- && !consoleInSlaveMode); - - doSleep(500); // give the console some time to settle - printf("%s" _NL _NL, consoleInSlaveMode ? "done" : "failed"); - } - else - { - printf("console not in slave mode" _NL _NL); - } - } - */ uint32_t console = static_cast(BCDevice::ID::Console); uint8_t slaveFlag = static_cast(BC::ID::Cons_Status_Slave); @@ -217,7 +188,7 @@ TransmitResult BCDriverTinyCan::readRawByte( uint32_t deviceID, uint8_t register //TransmitResult qDebug() << " --- BCDriverTinyCan::readRawByte DriverState: " << getDriverState(); - if( _driverState != DriverState::DeviceReady) + if( _driverState 0 ) if( --retries && ( msg.Id != BIB || msg.MsgLen != 4 || msg.MsgData[1] != registerID ) ) @@ -282,8 +253,8 @@ retry: TransmitResult BCDriverTinyCan::writeRawByte( uint32_t deviceID, uint8_t registerID ,uint8_t value ) const { - if( _driverState != DriverState::DeviceReady) - return std::unexpected(QString("writeRawValue error: driver not loaded." ) ); + if( _driverState #include #include - +#include /** * @brief Das Mainwindow erzeugen @@ -141,20 +141,21 @@ void BCMainWindow::initMainWindow() fitzeButton->setStyleSheet(style); */ - // besser: model::emit dataChanged - // also: emit dataChanged(index, index, {Qt::DisplayRole, Qt::EditRole, ValueRole}); + + initStatusBar(); + + // besser: model::emit dataChanged + // also: emit dataChanged(index, index, {Qt::DisplayRole, Qt::EditRole, ValueRole}); connect( _connectButton, &QToolButton::clicked, &_transmitter, &BCTransmitter::onToggleDriverConnection ); connect( _syncButton, &QToolButton::clicked, this, &BCMainWindow::onSyncDeviceView ); connect( &_transmitter, &BCTransmitter::valueUpdated, this, &BCMainWindow::onValueUpdated ); - - _transmitter.moveToThread(&_worker); - connect(this, &BCMainWindow::requestValueUpdate, &_transmitter, &BCTransmitter::enqueueValue); connect(&_worker, &QThread::finished, &_transmitter, &QObject::deleteLater); connect( &_transmitter, &BCTransmitter::driverStateChanged, this, &BCMainWindow::onDriverStateChanged ); // transmitter starten + _transmitter.moveToThread(&_worker); _worker.start(); // die Daten des eBikes laden @@ -167,30 +168,19 @@ void BCMainWindow::initMainWindow() void BCMainWindow::initStatusBar() { - // __fix QStatusBar *statBar = statusBar(); - // Optional: Normale Nachricht links + BCDriverStateWidget* connector = new BCDriverStateWidget(this); + connect( &_transmitter, &BCTransmitter::driverStateChanged, connector, &BCDriverStateWidget::onDriverStateChanged ); + statBar->addPermanentWidget(connector); + statBar->showMessage("Ready"); - - // 1. Unseren Switcher erstellen - ThemeSwitchButton *themeBtn = new ThemeSwitchButton(this); - - // 2. WICHTIG: Rechts hinzufügen + BCThemeSwitchButton *themeBtn = new BCThemeSwitchButton(this); statBar->addPermanentWidget(themeBtn); - - // 3. Signal verbinden: Button klick -> Theme ändern - connect(themeBtn, &ThemeSwitchButton::themeChanged, this, [this](bool isDark){ - if (isDark) - { - //applyFluentDarkTheme(*qApp); // Funktion von vorhin - statusBar()->showMessage("Dark Mode Activated", 3000); - } - else - { - //applyFluentLightTheme(*qApp); // Funktion von vorhin - statusBar()->showMessage("Light Mode Activated", 3000); - } + connect(themeBtn, &BCThemeSwitchButton::themeChanged, this, [this](bool isDark) + { + QString message = isDark ? "Dark Mode Activated" : "Light Mode Activated"; + statusBar()->showMessage( message, 3000); }); } @@ -216,6 +206,7 @@ void BCMainWindow::autoConnect() void BCMainWindow::onDriverStateChanged( BCDriver::DriverState state, const QString& message ) { qDebug() << " --- on DriverStatusChanged: " << state << ":" << message; + _statusbar->showMessage( message, 8000 ); } void BCMainWindow::onShowDevicePanel( BCDevice::ID deviceID ) diff --git a/bcmainwindow.h b/bcmainwindow.h index 9604227..4dda74c 100644 --- a/bcmainwindow.h +++ b/bcmainwindow.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -92,170 +92,4 @@ protected: }; - -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: 24px; - } - )"); - - // 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; -}; - - -class BCConnectionWidget : public QWidget -{ - Q_OBJECT - -public: - // Definition der 3 Zustände - enum class State - { - Disconnected, // Grau: Offline / Standby - Connected, // Grün: Alles OK - Error // Rot: Fehler / Timeout / Abbruch - }; - Q_ENUM(State) // Damit Qt das Enum kennt (optional, gut für Debugging) - - explicit BCConnectionWidget(QWidget *parent = nullptr) - : QWidget(parent) - { - QHBoxLayout *layout = new QHBoxLayout(this); - layout->setContentsMargins(10, 2, 10, 2); - layout->setSpacing(8); - - // 1. Die LED - m_led = new QLabel(this); - m_led->setFixedSize(12, 12); - - // 2. Der Text - m_label = new QLabel(this); - m_label->setStyleSheet("font-weight: 500;"); // Medium weight - - layout->addWidget(m_led); - layout->addWidget(m_label); - - // Startzustand - setState(State::Disconnected, "Offline"); - } - -public slots: - - // Hauptfunktion zum Setzen des Status - // 'customMessage' ist optional. Wenn leer, wird ein Standardtext genommen. - void setState(State state, const QString &customMessage = QString()) - { - m_state = state; - - // Standard-Texte, falls keine Nachricht übergeben wurde - QString text = customMessage; - if (text.isEmpty()) { - switch (state) { - case State::Connected: text = "Online"; break; - case State::Disconnected: text = "Not Connected"; break; - case State::Error: text = "Connection Error"; break; - } - } - m_label->setText(text); - - updateStyle(); - } - -private: - - void updateStyle() - { - QString ledStyle; - QString labelColor; - QString toolTipText; - - switch (m_state) { - case State::Connected: - // 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 State::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; - - case State::Disconnected: - 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) - m_led->setStyleSheet(ledStyle + "border-radius: 6px;"); - - // Textfarbe setzen - m_label->setStyleSheet(QString("color: %1; font-weight: %2;") - .arg(labelColor) - .arg(m_state == State::Connected ? "bold" : "normal")); - - setToolTip(toolTipText); - } - - QLabel *m_led; - QLabel *m_label; - State m_state; -}; - #endif // BCMAINWINDOW_H diff --git a/bctransmitter.cpp b/bctransmitter.cpp index e3a8d80..9b04c27 100644 --- a/bctransmitter.cpp +++ b/bctransmitter.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -57,11 +57,13 @@ void BCTransmitter::onToggleDriverConnection( bool connect ) { qDebug() << " --- onToggleDriverConnection: " << connect; // FIX! Ende der current op abwarten! + + // Hier sind wir noch in GUI Thread + QMutexLocker locker(&_mutex); // weitere operation stoppen _isBusy = true; - connect ? connectCanDriver() : disconnectCanDriver(); - + _isBusy = false; } void BCTransmitter::connectCanDriver() @@ -69,27 +71,42 @@ void BCTransmitter::connectCanDriver() // hier gehts nur um den echten Treiber // Treiber laden und/oder starten: + BCDriver::DriverStateResult result; //(defaults to 'NotPresent') if( _tinyCanDriver.getDriverState() != BCDriver::DriverState::DeviceReady ) - _tinyCanDriver.loadAndStartDriver(); + result = _tinyCanDriver.loadAndStartDriver(); + QString message("FitzeFatze!"); // hat geklappt - if( _tinyCanDriver.getDriverState() == BCDriver::DriverState::DeviceReady ) + if( _tinyCanDriver.getDriverState() >= BCDriver::DriverState::Opened ) { uint32_t console = static_cast(BCDevice::ID::Console); uint8_t hwRev = static_cast (BC::ID::Cons_Rev_Hw); TransmitResult hwVersion = _tinyCanDriver.readRawByte( console, hwRev); if( hwVersion.has_value() ) - qDebug() << " ---- HAIL to the king!"; + { + message = " ---- HAIL to the king!"; + qDebug() << message; + // swap driver + _canDriver = &_tinyCanDriver; + } else + { qDebug() << "Console not responding"; + } } - + else + { + message = result.error(); + } + emit driverStateChanged( _tinyCanDriver.getDriverState(), message ); } void BCTransmitter::disconnectCanDriver() { - + _tinyCanDriver.resetDriver(); + _canDriver = &_dummyDriver; + emit driverStateChanged( _tinyCanDriver.getDriverState(), "Disconnected" ); } diff --git a/bctransmitter.h b/bctransmitter.h index e67038d..186f793 100644 --- a/bctransmitter.h +++ b/bctransmitter.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcvalue.cpp b/bcvalue.cpp index ad5d12b..e8e6075 100644 --- a/bcvalue.cpp +++ b/bcvalue.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -44,42 +44,6 @@ BCValue::BCValue( BCDevice::ID deviceID_, BC::ID registerID_) visibleValue = "--"; } - - -/*************************************************************************** - -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 - - ***************************************************************************/ - - - - QString BCValue::formatValue( uint32_t value ) const { if( factor == 1 ) diff --git a/bcvalue.h b/bcvalue.h index 40a9d6d..1fb293b 100644 --- a/bcvalue.h +++ b/bcvalue.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcvaluemodel.cpp b/bcvaluemodel.cpp index 31f863d..28dd96f 100644 --- a/bcvaluemodel.cpp +++ b/bcvaluemodel.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: @@ -82,17 +82,26 @@ void BCValueModel::takeValueList(BCValueList& newValueList) */ void BCValueModel::onValueUpdated( int row, BCValue::State state, const QString& newVisisbleValue ) -{ - qDebug() << " BCValueModel::onValueUpdated update: " << newVisisbleValue; +{ if( row > -1 && row < _valueList.size() ) { - BCValuePtr value = _valueList[row]; + BCValue& value = *(_valueList[row].get()); QModelIndex idx = index(row,1); - value->state = state; - if( !newVisisbleValue.isEmpty() && newVisisbleValue != value->visibleValue ) + + qDebug(); + qDebug() << " --- OLD:"; + value.dumpValue(); + + value.state = state; + + if( !newVisisbleValue.isEmpty() && newVisisbleValue != value.visibleValue ) { - value->visibleValue = newVisisbleValue; + value.visibleValue = newVisisbleValue; } + + qDebug() << " NEW: " << newVisisbleValue << ""; + value.dumpValue(); + // wir schicken auf jeden fall einen update request emit dataChanged(idx, idx, {Qt::DisplayRole, Qt::EditRole}); } diff --git a/bcvaluemodel.h b/bcvaluemodel.h index 9cfb5ae..4a03625 100644 --- a/bcvaluemodel.h +++ b/bcvaluemodel.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcxmlloader.cpp b/bcxmlloader.cpp index ca4fe91..c1a8204 100644 --- a/bcxmlloader.cpp +++ b/bcxmlloader.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/bcxmlloader.h b/bcxmlloader.h index 7f779c3..80b69f9 100644 --- a/bcxmlloader.h +++ b/bcxmlloader.h @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: diff --git a/main.cpp b/main.cpp index 05c9cc5..14005cb 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,7 @@ /*************************************************************************** BionxControl - Copyright © 2025 christoph holzheuer + © 2025 -2026 christoph holzheuer christoph.holzheuer@gmail.com Using: