#include "mainwindow.h" #include "./ui_mainwindow.h" #include "server/z21server.h" #include "server/retroaction/rbusinputmodel.h" #include "server/accessories/accessorymodel.h" #include "server/loco/locodrivemodel.h" #include "widgets/powerstatusled.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //Power State header m_powerStatusLed = new PowerStatusLED(this); m_powerCombo = new QComboBox(this); m_powerCombo->addItem(Z21::getPowerStateName(Z21::PowerState::Normal), int(Z21::PowerState::Normal)); m_powerCombo->addItem(Z21::getPowerStateName(Z21::PowerState::EmergencyStop), int(Z21::PowerState::EmergencyStop)); m_powerCombo->addItem(Z21::getPowerStateName(Z21::PowerState::TrackVoltageOff), int(Z21::PowerState::TrackVoltageOff)); m_powerCombo->addItem(Z21::getPowerStateName(Z21::PowerState::ShortCircuit), int(Z21::PowerState::ShortCircuit)); m_powerCombo->addItem(Z21::getPowerStateName(Z21::PowerState::ServiceMode), int(Z21::PowerState::ServiceMode)); QHBoxLayout *powerLay = new QHBoxLayout; powerLay->addWidget(m_powerStatusLed); powerLay->addWidget(m_powerCombo); ui->verticalLayout->insertLayout(0, powerLay); //R-BUS tab rbusModel = new RBusInputModel(this); ui->rbusTableView->setModel(rbusModel); //Accessory Tab accessoryModel = new AccessoryModel(this); ui->accessoryTableView->setModel(accessoryModel); //Loco Tab locoModel = new LocoDriveModel(this); ui->locoTableView->setModel(locoModel); } MainWindow::~MainWindow() { delete ui; } void MainWindow::setupConnections(Z21Server *z21) { m_server = z21; connect(m_server, &Z21Server::powerStateChanged, m_powerStatusLed, &PowerStatusLED::setPowerState_slot); m_powerStatusLed->setPowerState(m_server->getPower()); connect(m_powerCombo, qOverload(&QComboBox::currentIndexChanged), this, &MainWindow::onPowerComboIndexChanged); connect(m_server, &Z21Server::powerStateChanged, this, &MainWindow::onPowerStateChanged); onPowerStateChanged(int(m_server->getPower())); connect(m_server, &QObject::destroyed, this, [this](){ m_server = nullptr; }); rbusModel->setRetroAction(m_server->getRBUS()); accessoryModel->setAccessoryMgr(m_server->getAccessoryMgr()); locoModel->setLocoMgr(m_server->getLocoMgr()); } void MainWindow::onPowerStateChanged(int state) { int idx = m_powerCombo->findData(state); m_powerCombo->setCurrentIndex(idx); } void MainWindow::onPowerComboIndexChanged() { QVariant val = m_powerCombo->currentData(); Z21::PowerState state = Z21::PowerState(val.toInt()); if(!m_server || state == m_server->getPower()) return; m_server->setPower(state); }