Files
qt5-legatus-legacy/Lts/Plugins/NmeaManagement/Gui/BatteryNotification/nme_battery_info_dialog.cpp
T
2026-08-13 18:33:10 +02:00

266 lines
8.8 KiB
C++
Executable File

#include "nme_battery_info_dialog.h"
#include "nme_shutdown_dialog.h"
#include "ui_nme_battery_info_dialog.h"
#include <NGLLogger/NGLLoggerBootstrap.h>
#include <LtsSession/lts_session.h>
#include <LtsSession/lts_session_data.h>
#include <LtsUtilsSettings/settings.h>
#include <LtsWidgets/lts_global_wait_dialog.h>
#include <LtsWidgets/lts_message_dialog.h>
#include <LtsWidgets/lts_base_layout_widget.h>
#include <QCloseEvent>
#include <QApplication>
#include <QDesktopWidget>
#include <QScreen>
#include <QDebug>
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<int,
TrainingAreaBase::BatteryState> currentBatteryStateForId,
const std::shared_ptr<TrainingAreaBase::Interface::Dtc> &tabDtc,
const std::shared_ptr<TrainingAreaBase::Interface::Ftc> &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