128 lines
4.0 KiB
C++
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";
|
|
}
|