Files
esa-remote-lite/PowerPanel.cpp

128 lines
4.0 KiB
C++

#include "PowerPanel.h"
#include <QFrame>
#include <QLabel>
#include <QVBoxLayout>
static QLabel *makeRow(QWidget *parent)
{
auto *l = new QLabel(parent);
l->setStyleSheet("font-size: 11pt; padding: 2px 0px;");
return l;
}
PowerPanel::PowerPanel(QWidget *parent) : QWidget(parent)
{
auto *outer = new QVBoxLayout(this);
outer->setContentsMargins(10, 10, 10, 10);
outer->setSpacing(2);
auto *heading = new QLabel("Status:", this);
QFont hf = heading->font();
hf.setBold(true);
hf.setPointSize(10);
heading->setFont(hf);
outer->addWidget(heading);
auto *line = new QFrame(this);
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
outer->addWidget(line);
m_statusLabel = makeRow(this);
m_supplyLabel = makeRow(this);
m_externalLabel = makeRow(this);
m_ratedLabel = makeRow(this);
m_batt1Label = makeRow(this);
m_batt2Label = makeRow(this);
m_batt3Label = makeRow(this);
outer->addWidget(m_statusLabel);
outer->addWidget(m_supplyLabel);
outer->addWidget(m_externalLabel);
outer->addWidget(m_ratedLabel);
outer->addWidget(m_batt1Label);
outer->addWidget(m_batt2Label);
outer->addWidget(m_batt3Label);
outer->addStretch(1);
reset();
}
void PowerPanel::reset()
{
const QString style = "font-size: 11pt; padding: 2px 0px;";
m_statusLabel ->setText("Connection status: --"); m_statusLabel ->setStyleSheet(style);
m_supplyLabel ->setText("Supply voltage: --"); m_supplyLabel ->setStyleSheet(style);
m_externalLabel->setText("External voltage: --"); m_externalLabel->setStyleSheet(style);
m_ratedLabel ->setText("Rated voltage: --"); m_ratedLabel ->setStyleSheet(style);
m_batt1Label ->setText("Battery 1 voltage: --"); m_batt1Label ->setStyleSheet(style);
m_batt2Label ->setText("Battery 2 voltage: --"); m_batt2Label ->setStyleSheet(style);
m_batt3Label ->setText("Battery 3 voltage: --"); m_batt3Label ->setStyleSheet(style);
}
// #P0-P STA ext
void PowerPanel::setStatus(const QString &raw)
{
applyLabel(m_statusLabel,
QString("Connection status: %1").arg(statusText(raw)),
statusColour(raw));
}
// #P0-P RTV 14.00
void PowerPanel::setRatedVoltage(const QString &v)
{
applyLabel(m_ratedLabel, QString("Rated voltage: %1 V").arg(v), "#2196a0");
}
// #P0-P VTG supply ext batt1 batt2 batt3
void PowerPanel::setVoltages(const QStringList &v)
{
auto set = [&](QLabel *l, const QString &prefix, int idx) {
if (idx >= v.size()) return;
applyLabel(l, QString("%1: %2 V").arg(prefix, v[idx]), voltColour(v[idx]));
};
set(m_supplyLabel, "Supply voltage", 0);
set(m_externalLabel, "External voltage", 1);
set(m_batt1Label, "Battery 1 voltage", 2);
set(m_batt2Label, "Battery 2 voltage", 3);
set(m_batt3Label, "Battery 3 voltage", 4);
}
void PowerPanel::applyLabel(QLabel *l, const QString &text, const QString &colour)
{
l->setText(text);
l->setStyleSheet(QString("font-size: 11pt; padding: 2px 0px; color: %1;").arg(colour));
}
QString PowerPanel::statusText(const QString &raw) const
{
if (raw == "ext") return "External supply";
if (raw == "bat") return "Battery";
if (raw == "low") return "Battery low";
if (raw == "crit") return "Battery critical";
if (raw == "off") return "Off";
return raw;
}
QString PowerPanel::statusColour(const QString &raw) const
{
if (raw == "ext") return "#2e7d32";
if (raw == "bat") return "#1565c0";
if (raw == "low") return "#e65100";
if (raw == "crit") return "#c62828";
if (raw == "off") return "#888888";
return "#888888";
}
QString PowerPanel::voltColour(const QString &val) const
{
bool ok = false;
const double d = val.toDouble(&ok);
if (!ok) return "palette(text)";
if (d > 10.0) return "#2e7d32";
if (d > 5.0) return "#e65100";
if (d > 0.01) return "#c62828";
return "#888888";
}