#include "PowerPanel.h" #include #include #include 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 *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"; }