|  |  |  | @ -2,35 +2,37 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include "sidebar.h" | 
			
		
	
		
			
				
					|  |  |  |  | #include "qt_window.h" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | StatusWidget::StatusWidget(QString label, QString msg, QColor c, QWidget* parent) : QFrame(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   layout.setSpacing(0); | 
			
		
	
		
			
				
					|  |  |  |  | StatusWidget::StatusWidget(bool has_substatus, QWidget *parent) : QFrame(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   layout = new QVBoxLayout(); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->setSpacing(0); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   if(msg.length() > 0){ | 
			
		
	
		
			
				
					|  |  |  |  |     layout.setContentsMargins(50, 24, 16, 24); | 
			
		
	
		
			
				
					|  |  |  |  |     status.setAlignment(Qt::AlignLeft | Qt::AlignHCenter); | 
			
		
	
		
			
				
					|  |  |  |  |     status.setStyleSheet(R"(font-size: 65px; font-weight: 500;)"); | 
			
		
	
		
			
				
					|  |  |  |  |   status = new QLabel(this); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     substatus.setAlignment(Qt::AlignLeft | Qt::AlignHCenter); | 
			
		
	
		
			
				
					|  |  |  |  |     substatus.setStyleSheet(R"(font-size: 30px; font-weight: 400;)"); | 
			
		
	
		
			
				
					|  |  |  |  |   if (has_substatus) { | 
			
		
	
		
			
				
					|  |  |  |  |     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); | 
			
		
	
		
			
				
					|  |  |  |  |     layout.addWidget(&substatus, 0, Qt::AlignLeft); | 
			
		
	
		
			
				
					|  |  |  |  |     substatus = new QLabel(this); | 
			
		
	
		
			
				
					|  |  |  |  |     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 { | 
			
		
	
		
			
				
					|  |  |  |  |     layout.setContentsMargins(40, 24, 16, 24); | 
			
		
	
		
			
				
					|  |  |  |  |     layout->setContentsMargins(40, 24, 16, 24); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     status.setAlignment(Qt::AlignCenter); | 
			
		
	
		
			
				
					|  |  |  |  |     status.setStyleSheet(R"(font-size: 38px; font-weight: 500;)"); | 
			
		
	
		
			
				
					|  |  |  |  |     layout.addWidget(&status, 0, Qt::AlignCenter); | 
			
		
	
		
			
				
					|  |  |  |  |     status->setAlignment(Qt::AlignCenter); | 
			
		
	
		
			
				
					|  |  |  |  |     status->setStyleSheet(R"(font-size: 38px; font-weight: 500;)"); | 
			
		
	
		
			
				
					|  |  |  |  |     layout->addWidget(status, 0, Qt::AlignCenter); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   update(label, msg, c); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   setMinimumHeight(124); | 
			
		
	
		
			
				
					|  |  |  |  |   setStyleSheet("background-color: transparent;"); | 
			
		
	
		
			
				
					|  |  |  |  |   setLayout(&layout); | 
			
		
	
		
			
				
					|  |  |  |  |   setLayout(layout); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void StatusWidget::paintEvent(QPaintEvent *e){ | 
			
		
	
		
			
				
					|  |  |  |  | void StatusWidget::paintEvent(QPaintEvent *e) { | 
			
		
	
		
			
				
					|  |  |  |  |   QPainter p(this); | 
			
		
	
		
			
				
					|  |  |  |  |   p.setRenderHint(QPainter::Antialiasing, true); | 
			
		
	
		
			
				
					|  |  |  |  |   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); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void StatusWidget::update(QString label, QString msg, QColor c) { | 
			
		
	
		
			
				
					|  |  |  |  |   status.setText(label); | 
			
		
	
		
			
				
					|  |  |  |  |   substatus.setText(msg); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void StatusWidget::update(const QString &label, const QColor &c, const QString &msg) { | 
			
		
	
		
			
				
					|  |  |  |  |   status->setText(label); | 
			
		
	
		
			
				
					|  |  |  |  |   if (substatus != nullptr) { | 
			
		
	
		
			
				
					|  |  |  |  |     substatus->setText(msg); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   if (color != c) { | 
			
		
	
		
			
				
					|  |  |  |  |     color = c; | 
			
		
	
		
			
				
					|  |  |  |  |     repaint(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -54,26 +57,27 @@ void StatusWidget::update(QString label, QString msg, QColor c) { | 
			
		
	
		
			
				
					|  |  |  |  |   return; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | SignalWidget::SignalWidget(QString text, int strength, QWidget* parent) : QFrame(parent), _strength(strength) { | 
			
		
	
		
			
				
					|  |  |  |  |   layout.setMargin(0); | 
			
		
	
		
			
				
					|  |  |  |  |   layout.setSpacing(0); | 
			
		
	
		
			
				
					|  |  |  |  |   layout.insertSpacing(0, 45); | 
			
		
	
		
			
				
					|  |  |  |  | SignalWidget::SignalWidget(QWidget *parent) : QFrame(parent), _strength(0) { | 
			
		
	
		
			
				
					|  |  |  |  |   layout = new QVBoxLayout(); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->setMargin(0); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->setSpacing(0); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->insertSpacing(0, 45); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   label.setText(text); | 
			
		
	
		
			
				
					|  |  |  |  |   layout.addWidget(&label, 0, Qt::AlignLeft); | 
			
		
	
		
			
				
					|  |  |  |  |   label.setStyleSheet(R"(font-size: 35px; font-weight: 400;)"); | 
			
		
	
		
			
				
					|  |  |  |  |   label = new QLabel(this); | 
			
		
	
		
			
				
					|  |  |  |  |   label->setStyleSheet(R"(font-size: 35px; font-weight: 400;)"); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->addWidget(label, 0, Qt::AlignLeft); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   setFixedWidth(177); | 
			
		
	
		
			
				
					|  |  |  |  |   setLayout(&layout); | 
			
		
	
		
			
				
					|  |  |  |  |   setLayout(layout); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void SignalWidget::paintEvent(QPaintEvent *e){ | 
			
		
	
		
			
				
					|  |  |  |  | void SignalWidget::paintEvent(QPaintEvent *e) { | 
			
		
	
		
			
				
					|  |  |  |  |   QPainter p(this); | 
			
		
	
		
			
				
					|  |  |  |  |   p.setRenderHint(QPainter::Antialiasing, true); | 
			
		
	
		
			
				
					|  |  |  |  |   p.setPen(Qt::NoPen); | 
			
		
	
		
			
				
					|  |  |  |  |   p.setBrush(Qt::white); | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = 0; i < 5 ; i++){ | 
			
		
	
		
			
				
					|  |  |  |  |     if(i == _strength){ | 
			
		
	
		
			
				
					|  |  |  |  |   for (int i = 0; i < 5; i++) { | 
			
		
	
		
			
				
					|  |  |  |  |     if (i == _strength) { | 
			
		
	
		
			
				
					|  |  |  |  |       p.setPen(Qt::NoPen); | 
			
		
	
		
			
				
					|  |  |  |  |       p.setBrush(Qt::darkGray); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  |  | @ -81,13 +85,16 @@ void SignalWidget::paintEvent(QPaintEvent *e){ | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void SignalWidget::update(QString text, int strength){ | 
			
		
	
		
			
				
					|  |  |  |  |   label.setText(text); | 
			
		
	
		
			
				
					|  |  |  |  | void SignalWidget::update(const QString &text, int strength) { | 
			
		
	
		
			
				
					|  |  |  |  |   label->setText(text); | 
			
		
	
		
			
				
					|  |  |  |  |   if (_strength != strength) { | 
			
		
	
		
			
				
					|  |  |  |  |     _strength = strength; | 
			
		
	
		
			
				
					|  |  |  |  |     repaint(); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | Sidebar::Sidebar(QWidget* parent) : QFrame(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   QVBoxLayout* layout = new QVBoxLayout(); | 
			
		
	
		
			
				
					|  |  |  |  | Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   QVBoxLayout *layout = new QVBoxLayout(); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->setContentsMargins(25, 50, 25, 50); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->setSpacing(35); | 
			
		
	
		
			
				
					|  |  |  |  |   setFixedSize(300, vwp_h); | 
			
		
	
	
		
			
				
					|  |  |  | @ -100,16 +107,16 @@ Sidebar::Sidebar(QWidget* parent) : QFrame(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   layout->addWidget(s_btn, 0, Qt::AlignHCenter); | 
			
		
	
		
			
				
					|  |  |  |  |   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); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   temp = new StatusWidget("0°C", "TEMP", QColor(255, 255, 255), this); | 
			
		
	
		
			
				
					|  |  |  |  |   temp = new StatusWidget(true, this); | 
			
		
	
		
			
				
					|  |  |  |  |   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); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   connect = new StatusWidget("CONNECT\nOFFLINE", "",  QColor(218, 202, 37), this); | 
			
		
	
		
			
				
					|  |  |  |  |   connect = new StatusWidget(false, this); | 
			
		
	
		
			
				
					|  |  |  |  |   layout->addWidget(connect, 0, Qt::AlignTop); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   QImage image = QImageReader("../assets/images/button_home.png").read(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -131,14 +138,14 @@ Sidebar::Sidebar(QWidget* parent) : QFrame(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   setLayout(layout); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void Sidebar::update(const UIState &s){ | 
			
		
	
		
			
				
					|  |  |  |  | void Sidebar::update(const UIState &s) { | 
			
		
	
		
			
				
					|  |  |  |  |   static std::map<NetStatus, std::pair<QString, QColor>> connectivity_map = { | 
			
		
	
		
			
				
					|  |  |  |  |       {NET_ERROR, {"CONNECT\nERROR", COLOR_DANGER}}, | 
			
		
	
		
			
				
					|  |  |  |  |       {NET_CONNECTED, {"CONNECT\nONLINE", COLOR_GOOD}}, | 
			
		
	
		
			
				
					|  |  |  |  |       {NET_DISCONNECTED, {"CONNECT\nOFFLINE", COLOR_WARNING}}, | 
			
		
	
		
			
				
					|  |  |  |  |   }; | 
			
		
	
		
			
				
					|  |  |  |  |   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 = { | 
			
		
	
		
			
				
					|  |  |  |  |       {cereal::DeviceState::ThermalStatus::GREEN, COLOR_GOOD}, | 
			
		
	
	
		
			
				
					|  |  |  | @ -146,7 +153,7 @@ void Sidebar::update(const UIState &s){ | 
			
		
	
		
			
				
					|  |  |  |  |       {cereal::DeviceState::ThermalStatus::RED, COLOR_DANGER}, | 
			
		
	
		
			
				
					|  |  |  |  |       {cereal::DeviceState::ThermalStatus::DANGER, COLOR_DANGER}}; | 
			
		
	
		
			
				
					|  |  |  |  |   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 = { | 
			
		
	
		
			
				
					|  |  |  |  |       {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); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  |   panda->update(panda_message, "", panda_color); | 
			
		
	
		
			
				
					|  |  |  |  |   panda->update(panda_message, panda_color); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |