mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-09-18 05:23:42 +08:00
8da0514955
* exit offroad btn on offroad-home * Remove alert for Always-Offroad. Replaced with header "Always Offroad Active" * refresh state when device wakes up * cleanup * cleaning * Add pulsing glow effect to ExitOffroadButton Introduced a QTimer-based mechanism to create a pulsing glow effect around the ExitOffroadButton. This enhances visual feedback by animating the outline with varying alpha transparency, improving UI responsiveness and aesthetics. * move custom asset to sunnypilot --------- Co-authored-by: DevTekVE <devtekve@gmail.com>
159 lines
5.2 KiB
C++
159 lines
5.2 KiB
C++
/**
|
|
* Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
|
*
|
|
* This file is part of sunnypilot and is licensed under the MIT License.
|
|
* See the LICENSE.md file in the root directory for more details.
|
|
*/
|
|
|
|
#include "selfdrive/ui/qt/offroad/offroad_home.h"
|
|
|
|
#include "selfdrive/ui/qt/offroad/experimental_mode.h"
|
|
#include "selfdrive/ui/qt/util.h"
|
|
#include "selfdrive/ui/qt/widgets/prime.h"
|
|
|
|
// OffroadHome: the offroad home page
|
|
|
|
OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
|
|
QVBoxLayout* main_layout = new QVBoxLayout(this);
|
|
main_layout->setContentsMargins(40, 40, 40, 40);
|
|
|
|
// top header
|
|
header_layout = new QHBoxLayout();
|
|
header_layout->setContentsMargins(0, 0, 0, 0);
|
|
header_layout->setSpacing(16);
|
|
|
|
update_notif = new QPushButton(tr("UPDATE"));
|
|
update_notif->setVisible(false);
|
|
update_notif->setStyleSheet("background-color: #364DEF;");
|
|
QObject::connect(update_notif, &QPushButton::clicked, [=]() { center_layout->setCurrentIndex(1); });
|
|
header_layout->addWidget(update_notif, 0, Qt::AlignHCenter | Qt::AlignLeft);
|
|
|
|
alert_notif = new QPushButton();
|
|
alert_notif->setVisible(false);
|
|
alert_notif->setStyleSheet("background-color: #E22C2C;");
|
|
QObject::connect(alert_notif, &QPushButton::clicked, [=] { center_layout->setCurrentIndex(2); });
|
|
header_layout->addWidget(alert_notif, 0, Qt::AlignHCenter | Qt::AlignLeft);
|
|
|
|
version = new ElidedLabel();
|
|
header_layout->addWidget(version, 0, Qt::AlignHCenter | Qt::AlignRight);
|
|
|
|
main_layout->addLayout(header_layout);
|
|
|
|
// main content
|
|
main_layout->addSpacing(25);
|
|
center_layout = new QStackedLayout();
|
|
|
|
QWidget *home_widget = new QWidget(this);
|
|
{
|
|
home_layout = new QHBoxLayout(home_widget);
|
|
home_layout->setContentsMargins(0, 0, 0, 0);
|
|
home_layout->setSpacing(30);
|
|
|
|
#ifndef SUNNYPILOT
|
|
// left: PrimeAdWidget
|
|
QStackedWidget *left_widget = new QStackedWidget(this);
|
|
QVBoxLayout *left_prime_layout = new QVBoxLayout();
|
|
left_prime_layout->setContentsMargins(0, 0, 0, 0);
|
|
QWidget *prime_user = new PrimeUserWidget();
|
|
prime_user->setStyleSheet(R"(
|
|
border-radius: 10px;
|
|
background-color: #333333;
|
|
)");
|
|
left_prime_layout->addWidget(prime_user);
|
|
left_prime_layout->addStretch();
|
|
left_widget->addWidget(new LayoutWidget(left_prime_layout));
|
|
left_widget->addWidget(new PrimeAdWidget);
|
|
left_widget->setStyleSheet("border-radius: 10px;");
|
|
|
|
connect(uiState()->prime_state, &PrimeState::changed, [left_widget]() {
|
|
left_widget->setCurrentIndex(uiState()->prime_state->isSubscribed() ? 0 : 1);
|
|
});
|
|
|
|
home_layout->addWidget(left_widget, 1);
|
|
#endif
|
|
|
|
// right: ExperimentalModeButton, SetupWidget
|
|
QWidget* right_widget = new QWidget(this);
|
|
QVBoxLayout* right_column = new QVBoxLayout(right_widget);
|
|
right_column->setContentsMargins(0, 0, 0, 0);
|
|
right_widget->setFixedWidth(750);
|
|
right_column->setSpacing(30);
|
|
|
|
ExperimentalModeButton *experimental_mode = new ExperimentalModeButton(this);
|
|
QObject::connect(experimental_mode, &ExperimentalModeButton::openSettings, this, &OffroadHome::openSettings);
|
|
right_column->addWidget(experimental_mode, 1);
|
|
|
|
SetupWidget *setup_widget = new SetupWidget;
|
|
QObject::connect(setup_widget, &SetupWidget::openSettings, this, &OffroadHome::openSettings);
|
|
right_column->addWidget(setup_widget, 1);
|
|
|
|
home_layout->addWidget(right_widget, 1);
|
|
}
|
|
center_layout->addWidget(home_widget);
|
|
|
|
// add update & alerts widgets
|
|
update_widget = new UpdateAlert();
|
|
QObject::connect(update_widget, &UpdateAlert::dismiss, [=]() { center_layout->setCurrentIndex(0); });
|
|
center_layout->addWidget(update_widget);
|
|
alerts_widget = new OffroadAlert();
|
|
QObject::connect(alerts_widget, &OffroadAlert::dismiss, [=]() { center_layout->setCurrentIndex(0); });
|
|
center_layout->addWidget(alerts_widget);
|
|
|
|
main_layout->addLayout(center_layout, 1);
|
|
|
|
// set up refresh timer
|
|
timer = new QTimer(this);
|
|
timer->callOnTimeout(this, &OffroadHome::refresh);
|
|
|
|
setStyleSheet(R"(
|
|
* {
|
|
color: white;
|
|
}
|
|
OffroadHome {
|
|
background-color: black;
|
|
}
|
|
OffroadHome > QPushButton {
|
|
padding: 15px 30px;
|
|
border-radius: 5px;
|
|
font-size: 40px;
|
|
font-weight: 500;
|
|
}
|
|
OffroadHome > QLabel {
|
|
font-size: 55px;
|
|
}
|
|
)");
|
|
}
|
|
|
|
void OffroadHome::showEvent(QShowEvent *event) {
|
|
refresh();
|
|
timer->start(10 * 1000);
|
|
}
|
|
|
|
void OffroadHome::hideEvent(QHideEvent *event) {
|
|
timer->stop();
|
|
}
|
|
|
|
void OffroadHome::refresh() {
|
|
version->setText(getBrand() + " " + QString::fromStdString(params.get("UpdaterCurrentDescription")));
|
|
|
|
bool updateAvailable = update_widget->refresh();
|
|
int alerts = alerts_widget->refresh();
|
|
|
|
// pop-up new notification
|
|
int idx = center_layout->currentIndex();
|
|
if (!updateAvailable && !alerts) {
|
|
idx = 0;
|
|
} else if (updateAvailable && (!update_notif->isVisible() || (!alerts && idx == 2))) {
|
|
idx = 1;
|
|
} else if (alerts && (!alert_notif->isVisible() || (!updateAvailable && idx == 1))) {
|
|
idx = 2;
|
|
}
|
|
center_layout->setCurrentIndex(idx);
|
|
|
|
update_notif->setVisible(updateAvailable);
|
|
alert_notif->setVisible(alerts);
|
|
if (alerts) {
|
|
alert_notif->setText(QString::number(alerts) + (alerts > 1 ? tr(" ALERTS") : tr(" ALERT")));
|
|
}
|
|
}
|