Sidebar: update text and color in one place (#20777)
* do not set text&color in ctor * cleanup Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>albatross
parent
27d3f820bf
commit
c405442820
|
@ -2,35 +2,37 @@
|
||||||
#include "sidebar.h"
|
#include "sidebar.h"
|
||||||
#include "qt_window.h"
|
#include "qt_window.h"
|
||||||
|
|
||||||
StatusWidget::StatusWidget(QString label, QString msg, QColor c, QWidget* parent) : QFrame(parent) {
|
StatusWidget::StatusWidget(bool has_substatus, QWidget *parent) : QFrame(parent) {
|
||||||
layout.setSpacing(0);
|
layout = new QVBoxLayout();
|
||||||
|
layout->setSpacing(0);
|
||||||
|
|
||||||
if(msg.length() > 0){
|
status = new QLabel(this);
|
||||||
layout.setContentsMargins(50, 24, 16, 24);
|
|
||||||
status.setAlignment(Qt::AlignLeft | Qt::AlignHCenter);
|
|
||||||
status.setStyleSheet(R"(font-size: 65px; font-weight: 500;)");
|
|
||||||
|
|
||||||
substatus.setAlignment(Qt::AlignLeft | Qt::AlignHCenter);
|
if (has_substatus) {
|
||||||
substatus.setStyleSheet(R"(font-size: 30px; font-weight: 400;)");
|
layout->setContentsMargins(50, 24, 16, 24);
|
||||||
|
status->setAlignment(Qt::AlignLeft | Qt::AlignHCenter);
|
||||||
|
status->setStyleSheet(R"(font-size: 65px; font-weight: 500;)");
|
||||||
|
|
||||||
layout.addWidget(&status, 0, Qt::AlignLeft);
|
substatus = new QLabel(this);
|
||||||
layout.addWidget(&substatus, 0, Qt::AlignLeft);
|
substatus->setAlignment(Qt::AlignLeft | Qt::AlignHCenter);
|
||||||
|
substatus->setStyleSheet(R"(font-size: 30px; font-weight: 400;)");
|
||||||
|
|
||||||
|
layout->addWidget(status, 0, Qt::AlignLeft);
|
||||||
|
layout->addWidget(substatus, 0, Qt::AlignLeft);
|
||||||
} else {
|
} else {
|
||||||
layout.setContentsMargins(40, 24, 16, 24);
|
layout->setContentsMargins(40, 24, 16, 24);
|
||||||
|
|
||||||
status.setAlignment(Qt::AlignCenter);
|
status->setAlignment(Qt::AlignCenter);
|
||||||
status.setStyleSheet(R"(font-size: 38px; font-weight: 500;)");
|
status->setStyleSheet(R"(font-size: 38px; font-weight: 500;)");
|
||||||
layout.addWidget(&status, 0, Qt::AlignCenter);
|
layout->addWidget(status, 0, Qt::AlignCenter);
|
||||||
}
|
}
|
||||||
|
|
||||||
update(label, msg, c);
|
|
||||||
|
|
||||||
setMinimumHeight(124);
|
setMinimumHeight(124);
|
||||||
setStyleSheet("background-color: transparent;");
|
setStyleSheet("background-color: transparent;");
|
||||||
setLayout(&layout);
|
setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatusWidget::paintEvent(QPaintEvent *e){
|
void StatusWidget::paintEvent(QPaintEvent *e) {
|
||||||
QPainter p(this);
|
QPainter p(this);
|
||||||
p.setRenderHint(QPainter::Antialiasing, true);
|
p.setRenderHint(QPainter::Antialiasing, true);
|
||||||
p.setPen(QPen(QColor(0xb2b2b2), 3, Qt::SolidLine, Qt::FlatCap));
|
p.setPen(QPen(QColor(0xb2b2b2), 3, Qt::SolidLine, Qt::FlatCap));
|
||||||
|
@ -43,10 +45,11 @@ void StatusWidget::paintEvent(QPaintEvent *e){
|
||||||
p.drawRoundedRect(QRectF(6, 6, size().width()-12, size().height()-12), 25, 25);
|
p.drawRoundedRect(QRectF(6, 6, size().width()-12, size().height()-12), 25, 25);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatusWidget::update(QString label, QString msg, QColor c) {
|
void StatusWidget::update(const QString &label, const QColor &c, const QString &msg) {
|
||||||
status.setText(label);
|
status->setText(label);
|
||||||
substatus.setText(msg);
|
if (substatus != nullptr) {
|
||||||
|
substatus->setText(msg);
|
||||||
|
}
|
||||||
if (color != c) {
|
if (color != c) {
|
||||||
color = c;
|
color = c;
|
||||||
repaint();
|
repaint();
|
||||||
|
@ -54,26 +57,27 @@ void StatusWidget::update(QString label, QString msg, QColor c) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SignalWidget::SignalWidget(QString text, int strength, QWidget* parent) : QFrame(parent), _strength(strength) {
|
SignalWidget::SignalWidget(QWidget *parent) : QFrame(parent), _strength(0) {
|
||||||
layout.setMargin(0);
|
layout = new QVBoxLayout();
|
||||||
layout.setSpacing(0);
|
layout->setMargin(0);
|
||||||
layout.insertSpacing(0, 45);
|
layout->setSpacing(0);
|
||||||
|
layout->insertSpacing(0, 45);
|
||||||
|
|
||||||
label.setText(text);
|
label = new QLabel(this);
|
||||||
layout.addWidget(&label, 0, Qt::AlignLeft);
|
label->setStyleSheet(R"(font-size: 35px; font-weight: 400;)");
|
||||||
label.setStyleSheet(R"(font-size: 35px; font-weight: 400;)");
|
layout->addWidget(label, 0, Qt::AlignLeft);
|
||||||
|
|
||||||
setFixedWidth(177);
|
setFixedWidth(177);
|
||||||
setLayout(&layout);
|
setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalWidget::paintEvent(QPaintEvent *e){
|
void SignalWidget::paintEvent(QPaintEvent *e) {
|
||||||
QPainter p(this);
|
QPainter p(this);
|
||||||
p.setRenderHint(QPainter::Antialiasing, true);
|
p.setRenderHint(QPainter::Antialiasing, true);
|
||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
p.setBrush(Qt::white);
|
p.setBrush(Qt::white);
|
||||||
for (int i = 0; i < 5 ; i++){
|
for (int i = 0; i < 5; i++) {
|
||||||
if(i == _strength){
|
if (i == _strength) {
|
||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
p.setBrush(Qt::darkGray);
|
p.setBrush(Qt::darkGray);
|
||||||
}
|
}
|
||||||
|
@ -81,13 +85,16 @@ void SignalWidget::paintEvent(QPaintEvent *e){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalWidget::update(QString text, int strength){
|
void SignalWidget::update(const QString &text, int strength) {
|
||||||
label.setText(text);
|
label->setText(text);
|
||||||
_strength = strength;
|
if (_strength != strength) {
|
||||||
|
_strength = strength;
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Sidebar::Sidebar(QWidget* parent) : QFrame(parent) {
|
Sidebar::Sidebar(QWidget *parent) : QFrame(parent) {
|
||||||
QVBoxLayout* layout = new QVBoxLayout();
|
QVBoxLayout *layout = new QVBoxLayout();
|
||||||
layout->setContentsMargins(25, 50, 25, 50);
|
layout->setContentsMargins(25, 50, 25, 50);
|
||||||
layout->setSpacing(35);
|
layout->setSpacing(35);
|
||||||
setFixedSize(300, vwp_h);
|
setFixedSize(300, vwp_h);
|
||||||
|
@ -100,16 +107,16 @@ Sidebar::Sidebar(QWidget* parent) : QFrame(parent) {
|
||||||
layout->addWidget(s_btn, 0, Qt::AlignHCenter);
|
layout->addWidget(s_btn, 0, Qt::AlignHCenter);
|
||||||
QObject::connect(s_btn, &QPushButton::pressed, this, &Sidebar::openSettings);
|
QObject::connect(s_btn, &QPushButton::pressed, this, &Sidebar::openSettings);
|
||||||
|
|
||||||
signal = new SignalWidget("--", 0, this);
|
signal = new SignalWidget(this);
|
||||||
layout->addWidget(signal, 0, Qt::AlignTop | Qt::AlignHCenter);
|
layout->addWidget(signal, 0, Qt::AlignTop | Qt::AlignHCenter);
|
||||||
|
|
||||||
temp = new StatusWidget("0°C", "TEMP", QColor(255, 255, 255), this);
|
temp = new StatusWidget(true, this);
|
||||||
layout->addWidget(temp, 0, Qt::AlignTop);
|
layout->addWidget(temp, 0, Qt::AlignTop);
|
||||||
|
|
||||||
panda = new StatusWidget("NO\nPANDA", "", QColor(201, 34, 49), this);
|
panda = new StatusWidget(false, this);
|
||||||
layout->addWidget(panda, 0, Qt::AlignTop);
|
layout->addWidget(panda, 0, Qt::AlignTop);
|
||||||
|
|
||||||
connect = new StatusWidget("CONNECT\nOFFLINE", "", QColor(218, 202, 37), this);
|
connect = new StatusWidget(false, this);
|
||||||
layout->addWidget(connect, 0, Qt::AlignTop);
|
layout->addWidget(connect, 0, Qt::AlignTop);
|
||||||
|
|
||||||
QImage image = QImageReader("../assets/images/button_home.png").read();
|
QImage image = QImageReader("../assets/images/button_home.png").read();
|
||||||
|
@ -131,22 +138,22 @@ Sidebar::Sidebar(QWidget* parent) : QFrame(parent) {
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sidebar::update(const UIState &s){
|
void Sidebar::update(const UIState &s) {
|
||||||
static std::map<NetStatus, std::pair<QString, QColor>> connectivity_map = {
|
static std::map<NetStatus, std::pair<QString, QColor>> connectivity_map = {
|
||||||
{NET_ERROR, {"CONNECT\nERROR", COLOR_DANGER}},
|
{NET_ERROR, {"CONNECT\nERROR", COLOR_DANGER}},
|
||||||
{NET_CONNECTED, {"CONNECT\nONLINE", COLOR_GOOD}},
|
{NET_CONNECTED, {"CONNECT\nONLINE", COLOR_GOOD}},
|
||||||
{NET_DISCONNECTED, {"CONNECT\nOFFLINE", COLOR_WARNING}},
|
{NET_DISCONNECTED, {"CONNECT\nOFFLINE", COLOR_WARNING}},
|
||||||
};
|
};
|
||||||
auto net_params = connectivity_map[s.scene.athenaStatus];
|
auto net_params = connectivity_map[s.scene.athenaStatus];
|
||||||
connect->update(net_params.first, "", net_params.second);
|
connect->update(net_params.first, net_params.second);
|
||||||
|
|
||||||
static std::map<cereal::DeviceState::ThermalStatus, QColor> temp_severity_map = {
|
static std::map<cereal::DeviceState::ThermalStatus, QColor> temp_severity_map = {
|
||||||
{cereal::DeviceState::ThermalStatus::GREEN, COLOR_GOOD},
|
{cereal::DeviceState::ThermalStatus::GREEN, COLOR_GOOD},
|
||||||
{cereal::DeviceState::ThermalStatus::YELLOW, COLOR_WARNING},
|
{cereal::DeviceState::ThermalStatus::YELLOW, COLOR_WARNING},
|
||||||
{cereal::DeviceState::ThermalStatus::RED, COLOR_DANGER},
|
{cereal::DeviceState::ThermalStatus::RED, COLOR_DANGER},
|
||||||
{cereal::DeviceState::ThermalStatus::DANGER, COLOR_DANGER}};
|
{cereal::DeviceState::ThermalStatus::DANGER, COLOR_DANGER}};
|
||||||
QString temp_val = QString("%1 °C").arg((int)s.scene.deviceState.getAmbientTempC());
|
QString temp_val = QString("%1 °C").arg((int)s.scene.deviceState.getAmbientTempC());
|
||||||
temp->update(temp_val, "TEMP", temp_severity_map[s.scene.deviceState.getThermalStatus()]);
|
temp->update(temp_val, temp_severity_map[s.scene.deviceState.getThermalStatus()], "TEMP");
|
||||||
|
|
||||||
static std::map<cereal::DeviceState::NetworkType, const char *> network_type_map = {
|
static std::map<cereal::DeviceState::NetworkType, const char *> network_type_map = {
|
||||||
{cereal::DeviceState::NetworkType::NONE, "--"},
|
{cereal::DeviceState::NetworkType::NONE, "--"},
|
||||||
|
@ -177,5 +184,5 @@ void Sidebar::update(const UIState &s){
|
||||||
panda_message = QString("SAT CNT\n%1").arg(s.scene.satelliteCount);
|
panda_message = QString("SAT CNT\n%1").arg(s.scene.satelliteCount);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
panda->update(panda_message, "", panda_color);
|
panda->update(panda_message, panda_color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,16 +12,16 @@ class SignalWidget : public QFrame {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SignalWidget(QString text, int strength, QWidget* parent = 0);
|
SignalWidget(QWidget* parent = 0);
|
||||||
void update(QString text, int strength);
|
void update(const QString &text, int strength);
|
||||||
QLabel label;
|
QLabel *label;
|
||||||
int _strength = 0;
|
int _strength = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent*) override;
|
void paintEvent(QPaintEvent*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout layout;
|
QVBoxLayout *layout;
|
||||||
|
|
||||||
const float _dotspace = 37; // spacing between dots
|
const float _dotspace = 37; // spacing between dots
|
||||||
const float _top = 10;
|
const float _top = 10;
|
||||||
|
@ -32,17 +32,17 @@ class StatusWidget : public QFrame {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
StatusWidget(QString label, QString msg, QColor c, QWidget* parent = 0);
|
StatusWidget(bool has_substatus, QWidget* parent = 0);
|
||||||
void update(QString label, QString msg, QColor c);
|
void update(const QString &label, const QColor &c, const QString &msg = "");
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent*) override;
|
void paintEvent(QPaintEvent*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QLabel *status;
|
||||||
|
QLabel *substatus = nullptr;
|
||||||
QColor color = COLOR_WARNING;
|
QColor color = COLOR_WARNING;
|
||||||
QLabel status;
|
QVBoxLayout *layout;
|
||||||
QLabel substatus;
|
|
||||||
QVBoxLayout layout;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sidebar : public QFrame {
|
class Sidebar : public QFrame {
|
||||||
|
|
Loading…
Reference in New Issue