Sending BCValueList to ViewPanels.

This commit is contained in:
2025-12-27 18:43:15 +01:00
parent a12fde26ef
commit 139397f045
9 changed files with 129 additions and 71 deletions

View File

@@ -43,6 +43,10 @@
BCMainWindow::BCMainWindow(QWidget *parent)
: QMainWindow(parent)
{
// WICHTIG: Registriere sowohl das Struct als auch die LISTE des Structs
qRegisterMetaType<BCDataValue>("BCDataValue");
qRegisterMetaType<QList<BCDataValue>>("BCValueList");
setupUi(this);
initData();
@@ -79,17 +83,25 @@ void BCMainWindow::initData()
// Action an den Button binden
button->setDefaultAction( action);
// old school, not used
connect( action, &QAction::triggered, this, &BCMainWindow::onActionButtonTriggered );
connect( action, &QAction::toggled, this, &BCMainWindow::onActionButtonToggled );
//connect( action, &QAction::triggered, this, &BCMainWindow::onActionButtonTriggered );
//connect( action, &QAction::toggled, this, &BCMainWindow::onActionButtonToggled );
// new way: die DeviceID muss aber explizit vom Lambda eingefanden werden.
connect( action, &QAction::triggered, this, [this,deviceID]()
{
onShowDevicePanel( deviceID );
});
// den Panels ihren title geben
if( _devicePanels.contains(deviceID) )
{
_devicePanels[deviceID]->setHeaderText( panelTitle );
BCDevicePanel* currentPanel = _devicePanels[deviceID];
// den Panels ihren title geben
currentPanel->setHeaderText( panelTitle );
// Wenn ein Device (entspricht einem Datenmodel) fertig eingelesen wurde,
// wird es weitergereicht.
// Problem: alle Panels bekommen alle Datenmodelle angeboten.
connect( &_dataManager, &BCDataManager::valueListReady, currentPanel, &BCDevicePanel::onValueListReady );
}
@@ -107,21 +119,8 @@ void BCMainWindow::initData()
configureAction(_pimpButton, _pimpAction, BCDevice::ID::Pimp, "Pimp my Ride"_L1 );
// Die Daten und auch die Datenmodelle für die Views werden
// vom DataManager verwaltet und an die Views weitergereicht.
//auto model = _dataManager.getModel( BCDevice::ID::Console );
//_consolePanel->getValueView()->setModel( model.v );
/*
if( model)
{
_valueView->setModel( *model );
_valueView->resizeColumnsToContents();
//_valueView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
}
/*
BCItemDelegate* _delegate = new BCItemDelegate( _valueView);
//_delegate = new AnimatedDelegate(_valueView );
_valueView->setItemDelegate( _delegate );
@@ -145,26 +144,28 @@ void BCMainWindow::initData()
connect( _syncButton, &QPushButton::clicked, &_dataManager, &BCDataManager::onSyncFromDevice );
*/
// wir wollen Bescheid wissen, wenn ein Device (entspricht einem Datenmodel)
// fertig eingelesen wurde.
connect( &_dataManager, &BCDataManager::valueListReady, this, &BCMainWindow::onValueListReady );
// die Daten des eBikes laden
_dataManager.loadXmlBikeData(":/bikeinfo.xml"_L1);
}
/*
void BCMainWindow::onValueListReady( BCDevice::ID deviceID )
{
qDebug() << " --- onValueListReady!" << deviceID;
if( _devicePanels.contains( deviceID ) )
{
const BCValueList& newValueList = _dataManager.getCurrentValueList();
_devicePanels[deviceID]->setValueList( newValueList );
BCDevicePanel& panel = *_devicePanels[deviceID];
BCValueList& victim = panel.exposeValueList();
BCValueList& newValueList = _dataManager.getCurrentValueList();
qDebug() << " --- Before: " << victim.size() << " orig:" << newValueList.size();
victim = std::exchange(newValueList, BCValueList());
//_devicePanels[deviceID]->setValueList( newValueList );
qDebug() << " ---After: " << victim.size() << " orig:" << newValueList.size();
}
}
*/
void BCMainWindow::onShowDevicePanel( BCDevice::ID deviceID )
{