wip
This commit is contained in:
@@ -5,7 +5,7 @@ cd /data/openpilot
|
|||||||
# Initialize a counter for the timeout
|
# Initialize a counter for the timeout
|
||||||
# timeout=5
|
# timeout=5
|
||||||
|
|
||||||
ssh-import-key-gh hansonxyz
|
# ssh-import-key-gh hansonxyz
|
||||||
|
|
||||||
# this code doesnt work
|
# this code doesnt work
|
||||||
# # Loop until we have a network connection or the timeout expires
|
# # Loop until we have a network connection or the timeout expires
|
||||||
|
|||||||
@@ -9,153 +9,136 @@
|
|||||||
#include "common/params.h"
|
#include "common/params.h"
|
||||||
#include "common/timing.h"
|
#include "common/timing.h"
|
||||||
|
|
||||||
RecordButton::RecordButton(QWidget *parent) : QPushButton(parent) {
|
LogoWidget::logoWidget(QWidget *parent) : QWidget(parent) {
|
||||||
setCheckable(true);
|
setAttribute(Qt::WA_OpaquePaintEvent);
|
||||||
setChecked(false);
|
setFixedSize(spinner_size);
|
||||||
setFixedSize(148, 148);
|
|
||||||
|
|
||||||
QObject::connect(this, &QPushButton::toggled, [=]() {
|
// pre-compute all the track imgs. make this a gif instead?
|
||||||
setEnabled(false);
|
QPixmap comma_img = loadPixmap("../assets/img_spinner_comma.png", spinner_size);
|
||||||
});
|
QPixmap track_img = loadPixmap("../assets/img_spinner_track.png", spinner_size);
|
||||||
}
|
|
||||||
|
|
||||||
void RecordButton::paintEvent(QPaintEvent *event) {
|
QTransform transform(1, 0, 0, 1, width() / 2, height() / 2);
|
||||||
QPainter p(this);
|
QPixmap pm(spinner_size);
|
||||||
p.setRenderHint(QPainter::Antialiasing);
|
QPainter p(&pm);
|
||||||
|
p.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||||
|
// p.resetTransform();
|
||||||
|
p.fillRect(0, 0, spinner_size.width(), spinner_size.height(), Qt::black);
|
||||||
|
p.drawPixmap(0, 0, comma_img);
|
||||||
|
// p.setTransform(transform.rotate(360 / spinner_fps));
|
||||||
|
// p.drawPixmap(-width() / 2, -height() / 2, track_img);
|
||||||
|
// track_imgs[i] = pm.copy();
|
||||||
|
|
||||||
QPoint center(width() / 2, height() / 2);
|
// m_anim.setDuration(1000);
|
||||||
|
// m_anim.setStartValue(0);
|
||||||
|
// m_anim.setEndValue(int(track_imgs.size() -1));
|
||||||
|
// m_anim.setLoopCount(-1);
|
||||||
|
// m_anim.start();
|
||||||
|
|
||||||
QColor bg(isChecked() ? "#FFFFFF" : "#737373");
|
// connect(&m_anim, SIGNAL(valueChanged(QVariant)), SLOT(update()));
|
||||||
QColor accent(isChecked() ? "#FF0000" : "#FFFFFF");
|
|
||||||
if (!isEnabled()) {
|
|
||||||
bg = QColor("#404040");
|
|
||||||
accent = QColor("#FFFFFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isDown()) {
|
|
||||||
accent.setAlphaF(0.7);
|
|
||||||
}
|
|
||||||
|
|
||||||
p.setPen(Qt::NoPen);
|
|
||||||
p.setBrush(bg);
|
|
||||||
p.drawEllipse(center, 74, 74);
|
|
||||||
|
|
||||||
p.setPen(QPen(accent, 6));
|
|
||||||
p.setBrush(Qt::NoBrush);
|
|
||||||
p.drawEllipse(center, 42, 42);
|
|
||||||
|
|
||||||
p.setPen(Qt::NoPen);
|
|
||||||
p.setBrush(accent);
|
|
||||||
p.drawEllipse(center, 22, 22);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BodyWindow::BodyWindow(QWidget *parent) : fuel_filter(1.0, 5., 1. / UI_FREQ), QWidget(parent) {
|
|
||||||
QStackedLayout *layout = new QStackedLayout(this);
|
|
||||||
layout->setStackingMode(QStackedLayout::StackAll);
|
|
||||||
|
|
||||||
QWidget *w = new QWidget;
|
|
||||||
QVBoxLayout *vlayout = new QVBoxLayout(w);
|
|
||||||
vlayout->setMargin(45);
|
|
||||||
layout->addWidget(w);
|
|
||||||
|
|
||||||
// face
|
|
||||||
face = new QLabel();
|
|
||||||
face->setAlignment(Qt::AlignCenter);
|
|
||||||
layout->addWidget(face);
|
|
||||||
awake = new QMovie("../assets/body/awake.gif", {}, this);
|
|
||||||
awake->setCacheMode(QMovie::CacheAll);
|
|
||||||
sleep = new QMovie("../assets/body/sleep.gif", {}, this);
|
|
||||||
sleep->setCacheMode(QMovie::CacheAll);
|
|
||||||
|
|
||||||
// record button
|
|
||||||
btn = new RecordButton(this);
|
|
||||||
vlayout->addWidget(btn, 0, Qt::AlignBottom | Qt::AlignRight);
|
|
||||||
QObject::connect(btn, &QPushButton::clicked, [=](bool checked) {
|
|
||||||
btn->setEnabled(false);
|
|
||||||
Params().putBool("DisableLogging", !checked);
|
|
||||||
last_button = nanos_since_boot();
|
|
||||||
});
|
|
||||||
w->raise();
|
|
||||||
|
|
||||||
QObject::connect(uiState(), &UIState::uiUpdate, this, &BodyWindow::updateState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BodyWindow::paintEvent(QPaintEvent *event) {
|
void BodyWindow::paintEvent(QPaintEvent *event) {
|
||||||
QPainter p(this);
|
QPainter painter(this);
|
||||||
p.setRenderHint(QPainter::Antialiasing);
|
|
||||||
|
|
||||||
p.fillRect(rect(), QColor(0, 0, 0));
|
|
||||||
|
|
||||||
// battery outline + detail
|
|
||||||
p.translate(width() - 136, 16);
|
|
||||||
const QColor gray = QColor("#737373");
|
|
||||||
p.setBrush(Qt::NoBrush);
|
|
||||||
p.setPen(QPen(gray, 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
|
|
||||||
p.drawRoundedRect(2, 2, 78, 36, 8, 8);
|
|
||||||
|
|
||||||
p.setPen(Qt::NoPen);
|
|
||||||
p.setBrush(gray);
|
|
||||||
p.drawRoundedRect(84, 12, 6, 16, 4, 4);
|
|
||||||
p.drawRect(84, 12, 3, 16);
|
|
||||||
|
|
||||||
// battery level
|
|
||||||
double fuel = std::clamp(fuel_filter.x(), 0.2f, 1.0f);
|
|
||||||
const int m = 5; // manual margin since we can't do an inner border
|
|
||||||
p.setPen(Qt::NoPen);
|
|
||||||
p.setBrush(fuel > 0.25 ? QColor("#32D74B") : QColor("#FF453A"));
|
|
||||||
p.drawRoundedRect(2 + m, 2 + m, (78 - 2*m)*fuel, 36 - 2*m, 4, 4);
|
|
||||||
|
|
||||||
// charging status
|
|
||||||
if (charging) {
|
|
||||||
p.setPen(Qt::NoPen);
|
|
||||||
p.setBrush(Qt::white);
|
|
||||||
const QPolygonF charger({
|
|
||||||
QPointF(12.31, 0),
|
|
||||||
QPointF(12.31, 16.92),
|
|
||||||
QPointF(18.46, 16.92),
|
|
||||||
QPointF(6.15, 40),
|
|
||||||
QPointF(6.15, 23.08),
|
|
||||||
QPointF(0, 23.08),
|
|
||||||
});
|
|
||||||
p.drawPolygon(charger.translated(98, 0));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BodyWindow::offroadTransition(bool offroad) {
|
BodyWindow::BodyWindow(QWidget *parent) : fuel_filter(1.0, 5., 1. / UI_FREQ), QWidget(parent) {
|
||||||
btn->setChecked(true);
|
QGridLayout *layout = new QGridLayout(this);
|
||||||
btn->setEnabled(true);
|
main_layout->setSpacing(0);
|
||||||
fuel_filter.reset(1.0);
|
main_layout->setMargin(200);
|
||||||
|
|
||||||
|
main_layout->logoWidget(new LogoWidget(this), 0, 0, Qt::AlignHCenter | Qt::AlignVCenter);
|
||||||
|
|
||||||
|
setStyleSheet(R"(
|
||||||
|
BodyWindow {
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
)");
|
||||||
|
|
||||||
|
notifier = new QSocketNotifier(fileno(stdin), QSocketNotifier::Read);
|
||||||
|
QObject::connect(uiState(), &UIState::uiUpdate, this, &BodyWindow::updateState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BodyWindow::updateState(const UIState &s) {
|
void BodyWindow::updateState(const UIState &s) {
|
||||||
if (!isVisible()) {
|
// if (!isVisible()) {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
const SubMaster &sm = *(s.sm);
|
|
||||||
auto cs = sm["carState"].getCarState();
|
|
||||||
|
|
||||||
charging = cs.getCharging();
|
|
||||||
fuel_filter.update(cs.getFuelGauge());
|
|
||||||
|
|
||||||
// TODO: use carState.standstill when that's fixed
|
|
||||||
const bool standstill = std::abs(cs.getVEgo()) < 0.01;
|
|
||||||
QMovie *m = standstill ? sleep : awake;
|
|
||||||
if (m != face->movie()) {
|
|
||||||
face->setMovie(m);
|
|
||||||
face->movie()->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
// update record button state
|
|
||||||
if (sm.updated("managerState") && (sm.rcv_time("managerState") - last_button)*1e-9 > 0.5) {
|
|
||||||
for (auto proc : sm["managerState"].getManagerState().getProcesses()) {
|
|
||||||
if (proc.getName() == "loggerd") {
|
|
||||||
btn->setEnabled(true);
|
|
||||||
btn->setChecked(proc.getRunning());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// void BodyWindow::paintEvent(QPaintEvent *event) {
|
||||||
|
// QPainter p(this);
|
||||||
|
// p.setRenderHint(QPainter::Antialiasing);
|
||||||
|
|
||||||
|
// p.fillRect(rect(), QColor(0, 0, 0));
|
||||||
|
|
||||||
|
// // battery outline + detail
|
||||||
|
// p.translate(width() - 136, 16);
|
||||||
|
// const QColor gray = QColor("#737373");
|
||||||
|
// p.setBrush(Qt::NoBrush);
|
||||||
|
// p.setPen(QPen(gray, 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
|
||||||
|
// p.drawRoundedRect(2, 2, 78, 36, 8, 8);
|
||||||
|
|
||||||
|
// p.setPen(Qt::NoPen);
|
||||||
|
// p.setBrush(gray);
|
||||||
|
// p.drawRoundedRect(84, 12, 6, 16, 4, 4);
|
||||||
|
// p.drawRect(84, 12, 3, 16);
|
||||||
|
|
||||||
|
// // battery level
|
||||||
|
// double fuel = std::clamp(fuel_filter.x(), 0.2f, 1.0f);
|
||||||
|
// const int m = 5; // manual margin since we can't do an inner border
|
||||||
|
// p.setPen(Qt::NoPen);
|
||||||
|
// p.setBrush(fuel > 0.25 ? QColor("#32D74B") : QColor("#FF453A"));
|
||||||
|
// p.drawRoundedRect(2 + m, 2 + m, (78 - 2*m)*fuel, 36 - 2*m, 4, 4);
|
||||||
|
|
||||||
|
// // charging status
|
||||||
|
// if (charging) {
|
||||||
|
// p.setPen(Qt::NoPen);
|
||||||
|
// p.setBrush(Qt::white);
|
||||||
|
// const QPolygonF charger({
|
||||||
|
// QPointF(12.31, 0),
|
||||||
|
// QPointF(12.31, 16.92),
|
||||||
|
// QPointF(18.46, 16.92),
|
||||||
|
// QPointF(6.15, 40),
|
||||||
|
// QPointF(6.15, 23.08),
|
||||||
|
// QPointF(0, 23.08),
|
||||||
|
// });
|
||||||
|
// p.drawPolygon(charger.translated(98, 0));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void BodyWindow::offroadTransition(bool offroad) {
|
||||||
|
// btn->setChecked(true);
|
||||||
|
// btn->setEnabled(true);
|
||||||
|
// fuel_filter.reset(1.0);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void BodyWindow::updateState(const UIState &s) {
|
||||||
|
// if (!isVisible()) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const SubMaster &sm = *(s.sm);
|
||||||
|
// auto cs = sm["carState"].getCarState();
|
||||||
|
|
||||||
|
// charging = cs.getCharging();
|
||||||
|
// fuel_filter.update(cs.getFuelGauge());
|
||||||
|
|
||||||
|
// // TODO: use carState.standstill when that's fixed
|
||||||
|
// const bool standstill = std::abs(cs.getVEgo()) < 0.01;
|
||||||
|
// QMovie *m = standstill ? sleep : awake;
|
||||||
|
// if (m != face->movie()) {
|
||||||
|
// face->setMovie(m);
|
||||||
|
// face->movie()->start();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // update record button state
|
||||||
|
// if (sm.updated("managerState") && (sm.rcv_time("managerState") - last_button)*1e-9 > 0.5) {
|
||||||
|
// for (auto proc : sm["managerState"].getManagerState().getProcesses()) {
|
||||||
|
// if (proc.getName() == "loggerd") {
|
||||||
|
// btn->setEnabled(true);
|
||||||
|
// btn->setChecked(proc.getRunning());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// update();
|
||||||
|
// }
|
||||||
|
|||||||
@@ -7,32 +7,40 @@
|
|||||||
#include "common/util.h"
|
#include "common/util.h"
|
||||||
#include "selfdrive/ui/ui.h"
|
#include "selfdrive/ui/ui.h"
|
||||||
|
|
||||||
class RecordButton : public QPushButton {
|
class LogoWidget : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RecordButton(QWidget* parent = 0);
|
LogoWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void paintEvent(QPaintEvent*) override;
|
void paintEvent(QPaintEvent*) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BodyWindow : public QWidget {
|
// class RecordButton : public QPushButton {
|
||||||
Q_OBJECT
|
// Q_OBJECT
|
||||||
|
|
||||||
public:
|
// public:
|
||||||
BodyWindow(QWidget* parent = 0);
|
// RecordButton(QWidget* parent = 0);
|
||||||
|
|
||||||
private:
|
// private:
|
||||||
bool charging = false;
|
// void paintEvent(QPaintEvent*) override;
|
||||||
uint64_t last_button = 0;
|
// };
|
||||||
FirstOrderFilter fuel_filter;
|
|
||||||
QLabel *face;
|
|
||||||
QMovie *awake, *sleep;
|
|
||||||
RecordButton *btn;
|
|
||||||
void paintEvent(QPaintEvent*) override;
|
|
||||||
|
|
||||||
private slots:
|
// class BodyWindow : public QWidget {
|
||||||
void updateState(const UIState &s);
|
// Q_OBJECT
|
||||||
void offroadTransition(bool onroad);
|
|
||||||
};
|
// public:
|
||||||
|
// BodyWindow(QWidget* parent = 0);
|
||||||
|
|
||||||
|
// private:
|
||||||
|
// bool charging = false;
|
||||||
|
// uint64_t last_button = 0;
|
||||||
|
// FirstOrderFilter fuel_filter;
|
||||||
|
// QLabel *face;
|
||||||
|
// QMovie *awake, *sleep;
|
||||||
|
// RecordButton *btn;
|
||||||
|
// void paintEvent(QPaintEvent*) override;
|
||||||
|
|
||||||
|
// private slots:
|
||||||
|
// void updateState(const UIState &s);
|
||||||
|
// void offroadTransition(bool onroad);
|
||||||
|
// };
|
||||||
|
|||||||
161
selfdrive/ui/qt/body.org
Normal file
161
selfdrive/ui/qt/body.org
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
#include "selfdrive/ui/qt/body.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QStackedLayout>
|
||||||
|
|
||||||
|
#include "common/params.h"
|
||||||
|
#include "common/timing.h"
|
||||||
|
|
||||||
|
RecordButton::RecordButton(QWidget *parent) : QPushButton(parent) {
|
||||||
|
setCheckable(true);
|
||||||
|
setChecked(false);
|
||||||
|
setFixedSize(148, 148);
|
||||||
|
|
||||||
|
QObject::connect(this, &QPushButton::toggled, [=]() {
|
||||||
|
setEnabled(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void RecordButton::paintEvent(QPaintEvent *event) {
|
||||||
|
QPainter p(this);
|
||||||
|
p.setRenderHint(QPainter::Antialiasing);
|
||||||
|
|
||||||
|
QPoint center(width() / 2, height() / 2);
|
||||||
|
|
||||||
|
QColor bg(isChecked() ? "#FFFFFF" : "#737373");
|
||||||
|
QColor accent(isChecked() ? "#FF0000" : "#FFFFFF");
|
||||||
|
if (!isEnabled()) {
|
||||||
|
bg = QColor("#404040");
|
||||||
|
accent = QColor("#FFFFFF");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDown()) {
|
||||||
|
accent.setAlphaF(0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
p.setBrush(bg);
|
||||||
|
p.drawEllipse(center, 74, 74);
|
||||||
|
|
||||||
|
p.setPen(QPen(accent, 6));
|
||||||
|
p.setBrush(Qt::NoBrush);
|
||||||
|
p.drawEllipse(center, 42, 42);
|
||||||
|
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
p.setBrush(accent);
|
||||||
|
p.drawEllipse(center, 22, 22);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BodyWindow::BodyWindow(QWidget *parent) : fuel_filter(1.0, 5., 1. / UI_FREQ), QWidget(parent) {
|
||||||
|
QStackedLayout *layout = new QStackedLayout(this);
|
||||||
|
layout->setStackingMode(QStackedLayout::StackAll);
|
||||||
|
|
||||||
|
QWidget *w = new QWidget;
|
||||||
|
QVBoxLayout *vlayout = new QVBoxLayout(w);
|
||||||
|
vlayout->setMargin(45);
|
||||||
|
layout->addWidget(w);
|
||||||
|
|
||||||
|
// face
|
||||||
|
face = new QLabel();
|
||||||
|
face->setAlignment(Qt::AlignCenter);
|
||||||
|
layout->addWidget(face);
|
||||||
|
awake = new QMovie("../assets/body/awake.gif", {}, this);
|
||||||
|
awake->setCacheMode(QMovie::CacheAll);
|
||||||
|
sleep = new QMovie("../assets/body/sleep.gif", {}, this);
|
||||||
|
sleep->setCacheMode(QMovie::CacheAll);
|
||||||
|
|
||||||
|
// record button
|
||||||
|
btn = new RecordButton(this);
|
||||||
|
vlayout->addWidget(btn, 0, Qt::AlignBottom | Qt::AlignRight);
|
||||||
|
QObject::connect(btn, &QPushButton::clicked, [=](bool checked) {
|
||||||
|
btn->setEnabled(false);
|
||||||
|
Params().putBool("DisableLogging", !checked);
|
||||||
|
last_button = nanos_since_boot();
|
||||||
|
});
|
||||||
|
w->raise();
|
||||||
|
|
||||||
|
QObject::connect(uiState(), &UIState::uiUpdate, this, &BodyWindow::updateState);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BodyWindow::paintEvent(QPaintEvent *event) {
|
||||||
|
QPainter p(this);
|
||||||
|
p.setRenderHint(QPainter::Antialiasing);
|
||||||
|
|
||||||
|
p.fillRect(rect(), QColor(0, 0, 0));
|
||||||
|
|
||||||
|
// battery outline + detail
|
||||||
|
p.translate(width() - 136, 16);
|
||||||
|
const QColor gray = QColor("#737373");
|
||||||
|
p.setBrush(Qt::NoBrush);
|
||||||
|
p.setPen(QPen(gray, 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
|
||||||
|
p.drawRoundedRect(2, 2, 78, 36, 8, 8);
|
||||||
|
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
p.setBrush(gray);
|
||||||
|
p.drawRoundedRect(84, 12, 6, 16, 4, 4);
|
||||||
|
p.drawRect(84, 12, 3, 16);
|
||||||
|
|
||||||
|
// battery level
|
||||||
|
double fuel = std::clamp(fuel_filter.x(), 0.2f, 1.0f);
|
||||||
|
const int m = 5; // manual margin since we can't do an inner border
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
p.setBrush(fuel > 0.25 ? QColor("#32D74B") : QColor("#FF453A"));
|
||||||
|
p.drawRoundedRect(2 + m, 2 + m, (78 - 2*m)*fuel, 36 - 2*m, 4, 4);
|
||||||
|
|
||||||
|
// charging status
|
||||||
|
if (charging) {
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
p.setBrush(Qt::white);
|
||||||
|
const QPolygonF charger({
|
||||||
|
QPointF(12.31, 0),
|
||||||
|
QPointF(12.31, 16.92),
|
||||||
|
QPointF(18.46, 16.92),
|
||||||
|
QPointF(6.15, 40),
|
||||||
|
QPointF(6.15, 23.08),
|
||||||
|
QPointF(0, 23.08),
|
||||||
|
});
|
||||||
|
p.drawPolygon(charger.translated(98, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BodyWindow::offroadTransition(bool offroad) {
|
||||||
|
btn->setChecked(true);
|
||||||
|
btn->setEnabled(true);
|
||||||
|
fuel_filter.reset(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BodyWindow::updateState(const UIState &s) {
|
||||||
|
if (!isVisible()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const SubMaster &sm = *(s.sm);
|
||||||
|
auto cs = sm["carState"].getCarState();
|
||||||
|
|
||||||
|
charging = cs.getCharging();
|
||||||
|
fuel_filter.update(cs.getFuelGauge());
|
||||||
|
|
||||||
|
// TODO: use carState.standstill when that's fixed
|
||||||
|
const bool standstill = std::abs(cs.getVEgo()) < 0.01;
|
||||||
|
QMovie *m = standstill ? sleep : awake;
|
||||||
|
if (m != face->movie()) {
|
||||||
|
face->setMovie(m);
|
||||||
|
face->movie()->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// update record button state
|
||||||
|
if (sm.updated("managerState") && (sm.rcv_time("managerState") - last_button)*1e-9 > 0.5) {
|
||||||
|
for (auto proc : sm["managerState"].getManagerState().getProcesses()) {
|
||||||
|
if (proc.getName() == "loggerd") {
|
||||||
|
btn->setEnabled(true);
|
||||||
|
btn->setChecked(proc.getRunning());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
@@ -45,7 +45,7 @@ HomeWindow::HomeWindow(QWidget* parent) : QWidget(parent) {
|
|||||||
});
|
});
|
||||||
slayout->addWidget(driver_view);
|
slayout->addWidget(driver_view);
|
||||||
setAttribute(Qt::WA_NoSystemBackground);
|
setAttribute(Qt::WA_NoSystemBackground);
|
||||||
QObject::connect(uiState(), &UIState::uiUpdate, this, &HomeWindow::updateState);
|
// QObject::connect(uiState(), &UIState::uiUpdate, this, &HomeWindow::updateState);
|
||||||
QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition);
|
QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition);
|
||||||
QObject::connect(uiState(), &UIState::offroadTransition, sidebar, &Sidebar::offroadTransition);
|
QObject::connect(uiState(), &UIState::offroadTransition, sidebar, &Sidebar::offroadTransition);
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ void HomeWindow::offroadTransition(bool offroad) {
|
|||||||
body->setEnabled(false);
|
body->setEnabled(false);
|
||||||
sidebar->setVisible(offroad);
|
sidebar->setVisible(offroad);
|
||||||
if (offroad) {
|
if (offroad) {
|
||||||
slayout->setCurrentWidget(home);
|
slayout->setCurrentWidget(body);
|
||||||
} else {
|
} else {
|
||||||
slayout->setCurrentWidget(onroad);
|
slayout->setCurrentWidget(onroad);
|
||||||
}
|
}
|
||||||
@@ -83,16 +83,20 @@ void HomeWindow::showDriverView(bool show) {
|
|||||||
emit closeSettings();
|
emit closeSettings();
|
||||||
slayout->setCurrentWidget(driver_view);
|
slayout->setCurrentWidget(driver_view);
|
||||||
} else {
|
} else {
|
||||||
slayout->setCurrentWidget(home);
|
slayout->setCurrentWidget(body);
|
||||||
}
|
}
|
||||||
sidebar->setVisible(show == false);
|
sidebar->setVisible(show == false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HomeWindow::mousePressEvent(QMouseEvent* e) {
|
void HomeWindow::mousePressEvent(QMouseEvent* e) {
|
||||||
// Handle sidebar collapsing
|
// Handle sidebar collapsing
|
||||||
|
if (body->isVisible()) {
|
||||||
|
slayout->setCurrentWidget(home);
|
||||||
|
} else {
|
||||||
if ((onroad->isVisible() || body->isVisible()) && (!sidebar->isVisible() || e->x() > sidebar->width())) {
|
if ((onroad->isVisible() || body->isVisible()) && (!sidebar->isVisible() || e->x() > sidebar->width())) {
|
||||||
sidebar->setVisible(!sidebar->isVisible() && !onroad->isMapVisible());
|
sidebar->setVisible(!sidebar->isVisible() && !onroad->isMapVisible());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HomeWindow::mouseDoubleClickEvent(QMouseEvent* e) {
|
void HomeWindow::mouseDoubleClickEvent(QMouseEvent* e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user