#include "nme_battery_info_dialog.h" #include "nme_shutdown_dialog.h" #include "ui_nme_battery_info_dialog.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace NmeaManagement { /*! * \brief NmeBatteryInfoDialog::NmeBatteryInfoDialog * \author Niklas Schmidt * \param currentBatteryStateForId * \param ftc * \param dtc * \param parent * \details Shows detailed battery states for 2 batteries and shows the shutdown Button */ NmeBatteryInfoDialog::NmeBatteryInfoDialog(QMap currentBatteryStateForId, const std::shared_ptr &tabDtc, const std::shared_ptr &tabFtc, QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly) , m_tabDtc(tabDtc) , m_tabFtc(tabFtc) , m_currentBatteryStateForId(currentBatteryStateForId) , m_ui(new Ui::NmeBatteryInfoDialog) { m_oudatedFirstBatteryTimer = new QTimer(this); m_oudatedSecondBatteryTimer = new QTimer(this); connect(m_oudatedFirstBatteryTimer, &QTimer::timeout,this, &NmeBatteryInfoDialog::onOutdatedFirstBatteryTimerTimeout ); connect(m_oudatedSecondBatteryTimer, &QTimer::timeout,this, &NmeBatteryInfoDialog::onOutdatedSecondBatteryTimerTimeout ); m_ui->setupUi(this); connect(m_tabDtc.get(), &TrainingAreaBase::Interface::Dtc::batteryInfoChanged, this, &NmeBatteryInfoDialog::fillStates); connect(m_tabDtc.get(), &TrainingAreaBase::Interface::Dtc::batteryAlarmChanged, this, &NmeBatteryInfoDialog::fillWarnings); // Create Yes-Button for Shutdown m_buttonBox->connectButton(LtsWidgets::DialogButton::Yes, this, &NmeBatteryInfoDialog::onShutdownClicked); m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Yes, true); m_buttonBox->setText(LtsWidgets::DialogButton::Yes, tr("Shutdown Radio Master")); //FIXME: Uncomment if needed m_ui->lblBat1CurrentCap->hide(); m_ui->lblBat1Current->hide(); m_ui->lblBat1FreqCap->hide(); m_ui->lblBat1Freq->hide(); m_ui->lblBat1TempCap->hide(); m_ui->lblBat1Temp->hide(); m_ui->lblBat2CurrentCap->hide(); m_ui->lblBat2Current->hide(); m_ui->lblBat2FreqCap->hide(); m_ui->lblBat2Freq->hide(); m_ui->lblBat2TempCap->hide(); m_ui->lblBat2Temp->hide(); updateDialog(); } NmeBatteryInfoDialog::~NmeBatteryInfoDialog() { delete m_ui; } /*! * \brief NmeBatteryInfoDialog::resetDialog * \param batteryOne * \param batteryTwo * \details Resets Dialog to Unknown state */ void NmeBatteryInfoDialog::resetDialog(bool batteryOne, bool batteryTwo) { if(batteryOne) { m_ui->lblBat1Level->setStyleSheet(QStringLiteral("")); m_ui->lblBat1LevelCap->setStyleSheet(QStringLiteral("")); m_ui->lblCaptionBatteryOne->setText(tr("Battery 1")); m_ui->lblBat1Current->setText(tr("Unknown")); m_ui->lblBat1Voltage->setText(tr("Unknown")); m_ui->lblBat1Freq->setText(tr("Unknown")); m_ui->lblBat1Generic->setText(tr("Unknown")); m_ui->lblBat1Level->setText(tr("Unknown")); m_ui->lblBat1Temp->setText(tr("Unknown")); m_ui->lblBat1Warn->setText(tr("No Warnings")); } if(batteryTwo) { m_ui->lblBat2Level->setStyleSheet(QStringLiteral("")); m_ui->lblBat2LevelCap->setStyleSheet(QStringLiteral("")); m_ui->lblCaptionBatteryTwo->setText(tr("Battery 2")); m_ui->lblBat2Current->setText(tr("Unknown")); m_ui->lblBat2Voltage->setText(tr("Unknown")); m_ui->lblBat2Freq->setText(tr("Unknown")); m_ui->lblBat2Generic->setText(tr("Unknown")); m_ui->lblBat2Level->setText(tr("Unknown")); m_ui->lblBat2Temp->setText(tr("Unknown")); m_ui->lblBat2Warn->setText(tr("No Warnings")); } } void NmeBatteryInfoDialog::onShutdownClicked() { NmeShutdownDialog *shutdownDialog = new NmeShutdownDialog(m_tabFtc); shutdownDialog->show(); } /*! * \brief NmeBatteryInfoDialog::updateDialog * \details * Set all values in dialog * If battery state is empty -> colorize battery state red */ void NmeBatteryInfoDialog::updateDialog() { resetDialog(true, true); // if(m_currentBatteryWarnForId.contains(0)) // m_ui->lblBat1Warn->setText(QString::fromStdString(m_currentBatteryWarnForId.value(0).description())); // if(m_currentBatteryWarnForId.contains(1)) // m_ui->lblBat2Warn->setText(QString::fromStdString(m_currentBatteryWarnForId.value(1).description())); if(m_currentBatteryStateForId.isEmpty()) return; if(m_currentBatteryStateForId.values().length() > 2) return; if(m_currentBatteryStateForId.contains(0)) { m_ui->lblCaptionBatteryOne->setText(QStringLiteral("Battery 1 (") + QString::fromStdString(m_currentBatteryStateForId.value(0).serialNumber()) + QStringLiteral(")")); m_ui->lblBat1Current->setText(QString::number(m_currentBatteryStateForId.value(0).current()) + QStringLiteral("mA")); m_ui->lblBat1Freq->setText(QString::number(m_currentBatteryStateForId.value(0).frequency())); m_ui->lblBat1Generic->setText(QString::number(m_currentBatteryStateForId.value(0).generic())); m_ui->lblBat1Voltage->setText(QString::number(m_currentBatteryStateForId.value(0).voltage()) + QStringLiteral(" mV")); m_ui->lblBat1Level->setText(QString::number(m_currentBatteryStateForId.value(0).batteryPercent()) + QStringLiteral("%")); m_ui->lblBat1Temp->setText(QString::number(m_currentBatteryStateForId.value(0).temperature())); if(m_currentBatteryStateForId.value(0).batteryPercent() / 20 == 0) { m_ui->lblBat1Level->setStyleSheet(QStringLiteral("QLabel { color : red; }")); } } if(m_currentBatteryStateForId.contains(1)) { m_ui->lblCaptionBatteryTwo->setText(QStringLiteral("Battery 2 (") + QString::fromStdString(m_currentBatteryStateForId.value(1).serialNumber()) + QStringLiteral(")")); m_ui->lblBat2Current->setText(QString::number(m_currentBatteryStateForId.value(1).current()) + QStringLiteral("mA")); m_ui->lblBat2Freq->setText(QString::number(m_currentBatteryStateForId.value(1).frequency())); m_ui->lblBat2Generic->setText(QString::number(m_currentBatteryStateForId.value(1).generic())); m_ui->lblBat2Voltage->setText(QString::number(m_currentBatteryStateForId.value(1).voltage()) + QStringLiteral(" mV")); m_ui->lblBat2Level->setText(QString::number(m_currentBatteryStateForId.value(1).batteryPercent()) + QStringLiteral("%")); m_ui->lblBat2Temp->setText(QString::number(m_currentBatteryStateForId.value(1).temperature())); if(m_currentBatteryStateForId.value(1).batteryPercent() / 20 == 0) { m_ui->lblBat2Level->setStyleSheet(QStringLiteral("QLabel { color : red; }")); } } } void NmeBatteryInfoDialog::fillWarnings(const TrainingAreaBase::BatteryAlarm &data, DataModification modType) { if(data.equipmentNumber() != 1) return; switch (modType) { case DataModification::eAdded: case DataModification::eModified: { m_currentBatteryWarnForId.insert(data.batteryPort(),data); updateDialog(); break; } case DataModification::eRemoved: { m_currentBatteryWarnForId.remove(data.batteryPort()); updateDialog(); } } } void NmeBatteryInfoDialog::fillStates(const TrainingAreaBase::BatteryInfo &dataArr, DataModification modType) { if(dataArr.equipmentNumber() != 1) return; auto data = dataArr.batteryStates().at(0); switch (modType) { case DataModification::eAdded: case DataModification::eModified: { m_currentBatteryStateForId.insert(data.batteryPort(),data); updateDialog(); if(data.batteryPort() == 0) m_oudatedFirstBatteryTimer->start(30000); else if(data.batteryPort() == 1) m_oudatedSecondBatteryTimer->start(30000); break; } case DataModification::eRemoved: { if(!m_currentBatteryStateForId.isEmpty()) m_currentBatteryStateForId.remove(data.batteryPort()); updateDialog(); } } } void NmeBatteryInfoDialog::onOutdatedFirstBatteryTimerTimeout() { if(m_currentBatteryStateForId.size() < 2) { m_currentBatteryStateForId.clear(); resetDialog(true, true); return; } m_currentBatteryStateForId.remove(0); resetDialog(true, false); } void NmeBatteryInfoDialog::onOutdatedSecondBatteryTimerTimeout() { if(m_currentBatteryStateForId.size() < 2) { m_currentBatteryStateForId.clear(); resetDialog(true, true); return; } m_currentBatteryStateForId.remove(1); resetDialog(false, true); } void NmeBatteryInfoDialog::retranslate() { translate(m_ui, QStringLiteral("Radio Master Shutdown")); } } // namespace NmeaManagement