Simple Mode
This commit is contained in:
Binary file not shown.
@@ -450,6 +450,7 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
||||
{"SignalAnimation", {PERSISTENT, STRING, "frog", "stock", 0}},
|
||||
{"SignalMetrics", {PERSISTENT, BOOL, "0", "0", 3}},
|
||||
{"SignalToDownload", {CLEAR_ON_MANAGER_START, STRING, "", ""}},
|
||||
{"SimpleMode", {PERSISTENT, BOOL, "0", "0", 0}},
|
||||
{"SLCConfirmation", {PERSISTENT, BOOL, "0", "0", 0}},
|
||||
{"SLCConfirmationHigher", {PERSISTENT, BOOL, "0", "0", 0}},
|
||||
{"SLCConfirmationLower", {PERSISTENT, BOOL, "0", "0", 0}},
|
||||
|
||||
Binary file not shown.
@@ -1,2 +1,2 @@
|
||||
extern const uint8_t gitversion[19];
|
||||
const uint8_t gitversion[19] = "DEV-2b280bd5-DEBUG";
|
||||
const uint8_t gitversion[19] = "DEV-a0ae1eea-DEBUG";
|
||||
|
||||
@@ -1 +1 @@
|
||||
DEV-2b280bd5-DEBUG
|
||||
DEV-a0ae1eea-DEBUG
|
||||
+55
-21
@@ -176,22 +176,43 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
|
||||
home_layout->setContentsMargins(0, 0, 0, 0);
|
||||
home_layout->setSpacing(30);
|
||||
|
||||
// left: stack of DriveStats / DriveSummary
|
||||
QWidget *left_widget = new QWidget(this);
|
||||
QStackedLayout *left_stack = new QStackedLayout(left_widget);
|
||||
left_stack->setContentsMargins(0, 0, 0, 0);
|
||||
// left: stock prime card in simple mode, StarPilot drive stats otherwise
|
||||
left_widget = new QStackedWidget(this);
|
||||
|
||||
left_stack->addWidget(new DriveStats());
|
||||
StarPilotDriveSummary *drive_summary = new StarPilotDriveSummary(this);
|
||||
left_stack->addWidget(drive_summary);
|
||||
|
||||
QObject::connect(drive_summary, &StarPilotDriveSummary::panelClosed, [left_stack]() {
|
||||
left_stack->setCurrentIndex(0);
|
||||
stock_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();
|
||||
stock_left_widget->addWidget(new LayoutWidget(left_prime_layout));
|
||||
stock_left_widget->addWidget(new PrimeAdWidget);
|
||||
stock_left_widget->setStyleSheet("border-radius: 10px;");
|
||||
QObject::connect(uiState()->prime_state, &PrimeState::changed, this, [this]() {
|
||||
stock_left_widget->setCurrentIndex(uiState()->prime_state->isSubscribed() ? 0 : 1);
|
||||
});
|
||||
QObject::connect(uiState(), &UIState::offroadTransition, [left_stack](bool offroad) {
|
||||
left_widget->addWidget(stock_left_widget);
|
||||
|
||||
QWidget *custom_left_widget = new QWidget(this);
|
||||
custom_left_stack = new QStackedLayout(custom_left_widget);
|
||||
custom_left_stack->setContentsMargins(0, 0, 0, 0);
|
||||
custom_left_stack->addWidget(new DriveStats());
|
||||
StarPilotDriveSummary *drive_summary = new StarPilotDriveSummary(this);
|
||||
custom_left_stack->addWidget(drive_summary);
|
||||
left_widget->addWidget(custom_left_widget);
|
||||
left_widget->setCurrentIndex(params.getBool("SimpleMode") ? 0 : 1);
|
||||
|
||||
QObject::connect(drive_summary, &StarPilotDriveSummary::panelClosed, [this]() {
|
||||
custom_left_stack->setCurrentIndex(0);
|
||||
});
|
||||
QObject::connect(uiState(), &UIState::offroadTransition, [this](bool offroad) {
|
||||
static bool previouslyOnroad = false;
|
||||
if (offroad && previouslyOnroad) {
|
||||
left_stack->setCurrentIndex(1);
|
||||
if (offroad && previouslyOnroad && !params.getBool("SimpleMode")) {
|
||||
custom_left_stack->setCurrentIndex(1);
|
||||
}
|
||||
previouslyOnroad = !offroad;
|
||||
});
|
||||
@@ -199,7 +220,7 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
|
||||
home_layout->addWidget(left_widget, 1);
|
||||
|
||||
// right: ExperimentalModeButton, SetupWidget, Random Events Summary
|
||||
QStackedWidget *right_widget = new QStackedWidget(this);
|
||||
right_widget = new QStackedWidget(this);
|
||||
right_widget->setFixedWidth(750);
|
||||
|
||||
QWidget *default_right = new QWidget(this);
|
||||
@@ -224,9 +245,10 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
|
||||
QObject::connect(random_events_summary, &StarPilotDriveSummary::panelClosed, [=]() {
|
||||
right_widget->setCurrentIndex(0);
|
||||
});
|
||||
QObject::connect(uiState(), &UIState::offroadTransition, [right_widget](bool offroad) {
|
||||
QObject::connect(uiState(), &UIState::offroadTransition, [this](bool offroad) {
|
||||
static bool previouslyOnroad = false;
|
||||
if (offroad && previouslyOnroad && starpilotUIState()->starpilot_scene.starpilot_toggles.value("random_events").toBool()) {
|
||||
if (offroad && previouslyOnroad && !params.getBool("SimpleMode") &&
|
||||
starpilotUIState()->starpilot_scene.starpilot_toggles.value("random_events").toBool()) {
|
||||
right_widget->setCurrentIndex(1);
|
||||
}
|
||||
previouslyOnroad = !offroad;
|
||||
@@ -302,13 +324,25 @@ void OffroadHome::refresh() {
|
||||
StarPilotUIState &fs = *starpilotUIState();
|
||||
StarPilotUIScene &starpilot_scene = fs.starpilot_scene;
|
||||
QJsonObject &starpilot_toggles = starpilot_scene.starpilot_toggles;
|
||||
const bool simple_mode = params.getBool("SimpleMode");
|
||||
|
||||
stock_left_widget->setCurrentIndex(uiState()->prime_state->isSubscribed() ? 0 : 1);
|
||||
left_widget->setCurrentIndex(simple_mode ? 0 : 1);
|
||||
if (simple_mode) {
|
||||
custom_left_stack->setCurrentIndex(0);
|
||||
right_widget->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
date->setText(QLocale(uiState()->language.mid(5)).toString(QDateTime::currentDateTime(), "dddd, MMMM d"));
|
||||
date->setVisible(util::system_time_valid());
|
||||
date->setVisible(util::system_time_valid() && !simple_mode);
|
||||
|
||||
QString versionText = getVersion().left(14).trimmed();
|
||||
if (!versionText.startsWith("v", Qt::CaseInsensitive)) {
|
||||
versionText.prepend("v");
|
||||
if (simple_mode) {
|
||||
version->setText(getBrand() + " " + QString::fromStdString(params.get("UpdaterCurrentDescription")));
|
||||
} else {
|
||||
QString versionText = getVersion().left(14).trimmed();
|
||||
if (!versionText.startsWith("v", Qt::CaseInsensitive)) {
|
||||
versionText.prepend("v");
|
||||
}
|
||||
version->setText(getBrand() + " - " + versionText + " - " + cleanModelName(starpilot_toggles.value("model_name").toString()));
|
||||
}
|
||||
version->setText(getBrand() + " - " + versionText + " - " + cleanModelName(starpilot_toggles.value("model_name").toString()));
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QStackedLayout>
|
||||
#include <QStackedWidget>
|
||||
#include <QTimer>
|
||||
#include <QWidget>
|
||||
|
||||
@@ -43,6 +44,10 @@ private:
|
||||
QPushButton* update_notif;
|
||||
|
||||
ElidedLabel* date;
|
||||
QStackedWidget *left_widget;
|
||||
QStackedWidget *stock_left_widget;
|
||||
QStackedLayout *custom_left_stack;
|
||||
QStackedWidget *right_widget;
|
||||
};
|
||||
|
||||
class HomeWindow : public QWidget {
|
||||
|
||||
@@ -528,8 +528,8 @@ void DevicePanel::showDriverView()
|
||||
QMetaObject::activate(this, &staticMetaObject, 1, nullptr);
|
||||
}
|
||||
struct qt_meta_stringdata_TogglesPanel_t {
|
||||
QByteArrayData data[11];
|
||||
char stringdata0[109];
|
||||
QByteArrayData data[13];
|
||||
char stringdata0[135];
|
||||
};
|
||||
#define QT_MOC_LITERAL(idx, ofs, len) \
|
||||
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
||||
@@ -543,16 +543,19 @@ QT_MOC_LITERAL(1, 13, 12), // "updateMetric"
|
||||
QT_MOC_LITERAL(2, 26, 0), // ""
|
||||
QT_MOC_LITERAL(3, 27, 6), // "metric"
|
||||
QT_MOC_LITERAL(4, 34, 7), // "bootRun"
|
||||
QT_MOC_LITERAL(5, 42, 23), // "expandToggleDescription"
|
||||
QT_MOC_LITERAL(6, 66, 5), // "param"
|
||||
QT_MOC_LITERAL(7, 72, 14), // "scrollToToggle"
|
||||
QT_MOC_LITERAL(8, 87, 11), // "updateState"
|
||||
QT_MOC_LITERAL(9, 99, 7), // "UIState"
|
||||
QT_MOC_LITERAL(10, 107, 1) // "s"
|
||||
QT_MOC_LITERAL(5, 42, 17), // "simpleModeChanged"
|
||||
QT_MOC_LITERAL(6, 60, 7), // "enabled"
|
||||
QT_MOC_LITERAL(7, 68, 23), // "expandToggleDescription"
|
||||
QT_MOC_LITERAL(8, 92, 5), // "param"
|
||||
QT_MOC_LITERAL(9, 98, 14), // "scrollToToggle"
|
||||
QT_MOC_LITERAL(10, 113, 11), // "updateState"
|
||||
QT_MOC_LITERAL(11, 125, 7), // "UIState"
|
||||
QT_MOC_LITERAL(12, 133, 1) // "s"
|
||||
|
||||
},
|
||||
"TogglesPanel\0updateMetric\0\0metric\0"
|
||||
"bootRun\0expandToggleDescription\0param\0"
|
||||
"bootRun\0simpleModeChanged\0enabled\0"
|
||||
"expandToggleDescription\0param\0"
|
||||
"scrollToToggle\0updateState\0UIState\0s"
|
||||
};
|
||||
#undef QT_MOC_LITERAL
|
||||
@@ -563,30 +566,32 @@ static const uint qt_meta_data_TogglesPanel[] = {
|
||||
8, // revision
|
||||
0, // classname
|
||||
0, 0, // classinfo
|
||||
5, 14, // methods
|
||||
6, 14, // methods
|
||||
0, 0, // properties
|
||||
0, 0, // enums/sets
|
||||
0, 0, // constructors
|
||||
0, // flags
|
||||
2, // signalCount
|
||||
3, // signalCount
|
||||
|
||||
// signals: name, argc, parameters, tag, flags
|
||||
1, 2, 39, 2, 0x06 /* Public */,
|
||||
1, 1, 44, 2, 0x26 /* Public | MethodCloned */,
|
||||
1, 2, 44, 2, 0x06 /* Public */,
|
||||
1, 1, 49, 2, 0x26 /* Public | MethodCloned */,
|
||||
5, 1, 52, 2, 0x06 /* Public */,
|
||||
|
||||
// slots: name, argc, parameters, tag, flags
|
||||
5, 1, 47, 2, 0x0a /* Public */,
|
||||
7, 1, 50, 2, 0x0a /* Public */,
|
||||
8, 1, 53, 2, 0x08 /* Private */,
|
||||
7, 1, 55, 2, 0x0a /* Public */,
|
||||
9, 1, 58, 2, 0x0a /* Public */,
|
||||
10, 1, 61, 2, 0x08 /* Private */,
|
||||
|
||||
// signals: parameters
|
||||
QMetaType::Void, QMetaType::Bool, QMetaType::Bool, 3, 4,
|
||||
QMetaType::Void, QMetaType::Bool, 3,
|
||||
QMetaType::Void, QMetaType::Bool, 6,
|
||||
|
||||
// slots: parameters
|
||||
QMetaType::Void, QMetaType::QString, 6,
|
||||
QMetaType::Void, QMetaType::QString, 6,
|
||||
QMetaType::Void, 0x80000000 | 9, 10,
|
||||
QMetaType::Void, QMetaType::QString, 8,
|
||||
QMetaType::Void, QMetaType::QString, 8,
|
||||
QMetaType::Void, 0x80000000 | 11, 12,
|
||||
|
||||
0 // eod
|
||||
};
|
||||
@@ -599,9 +604,10 @@ void TogglesPanel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id
|
||||
switch (_id) {
|
||||
case 0: _t->updateMetric((*reinterpret_cast< bool(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
|
||||
case 1: _t->updateMetric((*reinterpret_cast< bool(*)>(_a[1]))); break;
|
||||
case 2: _t->expandToggleDescription((*reinterpret_cast< const QString(*)>(_a[1]))); break;
|
||||
case 3: _t->scrollToToggle((*reinterpret_cast< const QString(*)>(_a[1]))); break;
|
||||
case 4: _t->updateState((*reinterpret_cast< const UIState(*)>(_a[1]))); break;
|
||||
case 2: _t->simpleModeChanged((*reinterpret_cast< bool(*)>(_a[1]))); break;
|
||||
case 3: _t->expandToggleDescription((*reinterpret_cast< const QString(*)>(_a[1]))); break;
|
||||
case 4: _t->scrollToToggle((*reinterpret_cast< const QString(*)>(_a[1]))); break;
|
||||
case 5: _t->updateState((*reinterpret_cast< const UIState(*)>(_a[1]))); break;
|
||||
default: ;
|
||||
}
|
||||
} else if (_c == QMetaObject::IndexOfMethod) {
|
||||
@@ -613,6 +619,13 @@ void TogglesPanel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id
|
||||
return;
|
||||
}
|
||||
}
|
||||
{
|
||||
using _t = void (TogglesPanel::*)(bool );
|
||||
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&TogglesPanel::simpleModeChanged)) {
|
||||
*result = 2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -645,13 +658,13 @@ int TogglesPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||
if (_id < 0)
|
||||
return _id;
|
||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||
if (_id < 5)
|
||||
if (_id < 6)
|
||||
qt_static_metacall(this, _c, _id, _a);
|
||||
_id -= 5;
|
||||
_id -= 6;
|
||||
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||
if (_id < 5)
|
||||
if (_id < 6)
|
||||
*reinterpret_cast<int*>(_a[0]) = -1;
|
||||
_id -= 5;
|
||||
_id -= 6;
|
||||
}
|
||||
return _id;
|
||||
}
|
||||
@@ -662,6 +675,13 @@ void TogglesPanel::updateMetric(bool _t1, bool _t2)
|
||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)) };
|
||||
QMetaObject::activate(this, &staticMetaObject, 0, _a);
|
||||
}
|
||||
|
||||
// SIGNAL 2
|
||||
void TogglesPanel::simpleModeChanged(bool _t1)
|
||||
{
|
||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
|
||||
QMetaObject::activate(this, &staticMetaObject, 2, _a);
|
||||
}
|
||||
struct qt_meta_stringdata_SoftwarePanel_t {
|
||||
QByteArrayData data[1];
|
||||
char stringdata0[14];
|
||||
|
||||
@@ -48,6 +48,13 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
"../assets/icons/warning.png",
|
||||
true,
|
||||
},
|
||||
{
|
||||
"SimpleMode",
|
||||
tr("Simple Mode"),
|
||||
tr("Use a more stock-like Qt interface by hiding most branch-specific UI, theme, sound, and alert styling. This only changes presentation and does not change driving behavior."),
|
||||
"../assets/icons/settings.png",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"DisengageOnAccelerator",
|
||||
tr("Disengage on Accelerator Pedal"),
|
||||
@@ -122,6 +129,13 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
});
|
||||
}
|
||||
|
||||
if (param == "SimpleMode") {
|
||||
QObject::connect(toggle, &ParamControl::toggleFlipped, this, [this](bool state) {
|
||||
updateToggles();
|
||||
emit simpleModeChanged(state);
|
||||
});
|
||||
}
|
||||
|
||||
addItem(toggle);
|
||||
toggles[param.toStdString()] = toggle;
|
||||
|
||||
@@ -172,6 +186,7 @@ void TogglesPanel::showEvent(QShowEvent *event) {
|
||||
void TogglesPanel::updateToggles() {
|
||||
const bool showAllToggles = params.getBool("ShowAllToggles");
|
||||
const bool safe_mode = params.getBool("SafeMode");
|
||||
const bool simple_mode = params.getBool("SimpleMode");
|
||||
if (safe_mode) {
|
||||
if (params.getBool("ExperimentalMode")) {
|
||||
params.putBool("ExperimentalMode", false);
|
||||
@@ -251,6 +266,11 @@ void TogglesPanel::updateToggles() {
|
||||
experimental_mode_toggle->setVisible(showAllToggles || !starpilot_toggles.value("conditional_experimental_mode").toBool());
|
||||
auto record_audio_toggle = toggles["RecordAudio"];
|
||||
record_audio_toggle->setVisible(showAllToggles || !starpilot_toggles.value("no_logging").toBool());
|
||||
|
||||
auto safe_mode_toggle = toggles["SafeMode"];
|
||||
if (safe_mode_toggle != nullptr) {
|
||||
safe_mode_toggle->setVisible(!simple_mode);
|
||||
}
|
||||
}
|
||||
|
||||
GalaxyQRPopup::GalaxyQRPopup(const QString &url, QWidget *parent) : DialogBase(parent) {
|
||||
@@ -694,6 +714,13 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
|
||||
QObject::connect(developerPanel, &DeveloperPanel::showAllTogglesChanged, [this]() {
|
||||
updateDeveloperToggle(params.getInt("TuningLevel"));
|
||||
});
|
||||
QObject::connect(toggles, &TogglesPanel::simpleModeChanged, [this](bool enabled) {
|
||||
updateDeveloperToggle(params.getInt("TuningLevel"));
|
||||
if (enabled && panel_widget->currentIndex() < nav_btns->buttons().size() &&
|
||||
nav_btns->buttons()[panel_widget->currentIndex()]->text() == tr("StarPilot")) {
|
||||
setCurrentPanel(2);
|
||||
}
|
||||
});
|
||||
|
||||
QList<QPair<QString, QWidget *>> panels = {
|
||||
{tr("Device"), device},
|
||||
@@ -831,7 +858,8 @@ void SettingsWindow::updateDeveloperToggle(int tuningLevel) {
|
||||
for (QAbstractButton *btn : nav_btns->buttons()) {
|
||||
if (btn->text() == tr("Developer")) {
|
||||
btn->setVisible(tuningLevel >= 3 || params.getBool("ShowAllToggles"));
|
||||
break;
|
||||
} else if (btn->text() == tr("StarPilot")) {
|
||||
btn->setVisible(!params.getBool("SimpleMode"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,6 +102,7 @@ public:
|
||||
|
||||
signals:
|
||||
void updateMetric(bool metric, bool bootRun=false);
|
||||
void simpleModeChanged(bool enabled);
|
||||
|
||||
public slots:
|
||||
void expandToggleDescription(const QString ¶m);
|
||||
|
||||
@@ -109,11 +109,23 @@ void OnroadAlerts::paintEvent(QPaintEvent *event) {
|
||||
QRect r = QRect(0 + margin, height() - h + margin, width() - margin*2, h - margin*2);
|
||||
|
||||
QPainter p(this);
|
||||
const bool simple_mode = starpilot_toggles.value("simple_mode").toBool();
|
||||
QColor alert_color;
|
||||
if (simple_mode) {
|
||||
cereal::SelfdriveState::AlertStatus status = alert.status;
|
||||
if (status == static_cast<cereal::SelfdriveState::AlertStatus>(cereal::StarPilotSelfdriveState::AlertStatus::STARPILOT)) {
|
||||
status = cereal::SelfdriveState::AlertStatus::NORMAL;
|
||||
}
|
||||
alert_color = alert_colors.value(status, alert_colors.value(cereal::SelfdriveState::AlertStatus::NORMAL));
|
||||
} else {
|
||||
alert_color = starpilot_alert_colors.value(static_cast<cereal::StarPilotSelfdriveState::AlertStatus>(alert.status),
|
||||
alert_colors.value(cereal::SelfdriveState::AlertStatus::NORMAL));
|
||||
}
|
||||
|
||||
// draw background + gradient
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||
p.setBrush(QBrush(starpilot_alert_colors[static_cast<cereal::StarPilotSelfdriveState::AlertStatus>(alert.status)]));
|
||||
p.setBrush(QBrush(alert_color));
|
||||
p.drawRoundedRect(r, radius, radius);
|
||||
|
||||
QLinearGradient g(0, r.y(), 0, r.bottom());
|
||||
|
||||
@@ -93,7 +93,9 @@ void ExperimentalButton::showEvent(QShowEvent *event) {
|
||||
}
|
||||
|
||||
void ExperimentalButton::updateBackgroundColor() {
|
||||
if (isDown() || !engageable) {
|
||||
if (starpilot_toggles.value("simple_mode").toBool()) {
|
||||
background_color = QColor(0, 0, 0, 166);
|
||||
} else if (isDown() || !engageable) {
|
||||
background_color = QColor(0, 0, 0, 166);
|
||||
} else if (starpilot_scene.switchback_mode_enabled) {
|
||||
background_color = bg_colors[STATUS_SWITCHBACK_MODE_ENABLED];
|
||||
|
||||
+43
-13
@@ -61,19 +61,20 @@ void Sidebar::mousePressEvent(QMouseEvent *event) {
|
||||
StarPilotUIState *fs = starpilotUIState();
|
||||
StarPilotUIScene &starpilot_scene = fs->starpilot_scene;
|
||||
QJsonObject &starpilot_toggles = starpilot_scene.starpilot_toggles;
|
||||
const bool simple_mode = starpilot_toggles.value("simple_mode").toBool();
|
||||
|
||||
if (cpuRect.contains(pos) && starpilot_toggles.value("developer_ui").toBool()) {
|
||||
if (!simple_mode && cpuRect.contains(pos) && starpilot_toggles.value("developer_ui").toBool()) {
|
||||
showChip = (showChip + 1) % 3;
|
||||
|
||||
params.putBool("ShowCPU", showChip == 1);
|
||||
params.putBool("ShowGPU", showChip == 2);
|
||||
} else if (memoryRect.contains(pos) && starpilot_toggles.value("developer_ui").toBool()) {
|
||||
} else if (!simple_mode && memoryRect.contains(pos) && starpilot_toggles.value("developer_ui").toBool()) {
|
||||
showMemory = (showMemory + 1) % 4;
|
||||
|
||||
params.putBool("ShowMemoryUsage", showMemory == 1);
|
||||
params.putBool("ShowStorageLeft", showMemory == 2);
|
||||
params.putBool("ShowStorageUsed", showMemory == 3);
|
||||
} else if (tempRect.contains(pos) && starpilot_toggles.value("developer_ui").toBool()) {
|
||||
} else if (!simple_mode && tempRect.contains(pos) && starpilot_toggles.value("developer_ui").toBool()) {
|
||||
showTemp = (showTemp + 1) % 3;
|
||||
|
||||
params.putBool("Fahrenheit", showTemp == 2);
|
||||
@@ -118,6 +119,12 @@ void Sidebar::updateState(const UIState &s, const StarPilotUIState &fs) {
|
||||
|
||||
const StarPilotUIScene &starpilot_scene = fs.starpilot_scene;
|
||||
const QJsonObject &starpilot_toggles = starpilot_scene.starpilot_toggles;
|
||||
const bool simple_mode = starpilot_toggles.value("simple_mode").toBool();
|
||||
static bool previous_simple_mode = simple_mode;
|
||||
if (previous_simple_mode != simple_mode) {
|
||||
updateTheme();
|
||||
previous_simple_mode = simple_mode;
|
||||
}
|
||||
|
||||
const SubMaster &fpsm = *(fs.sm);
|
||||
|
||||
@@ -140,28 +147,29 @@ void Sidebar::updateState(const UIState &s, const StarPilotUIState &fs) {
|
||||
ItemStatus connectStatus;
|
||||
auto last_ping = deviceState.getLastAthenaPingTime();
|
||||
if (desktop_force_online) {
|
||||
connectStatus = ItemStatus{{tr("CONNECT"), tr("ONLINE")}, QColor(starpilot_toggles.value("sidebar_color3").toString())};
|
||||
connectStatus = ItemStatus{{tr("CONNECT"), tr("ONLINE")}, simple_mode ? good_color : QColor(starpilot_toggles.value("sidebar_color3").toString())};
|
||||
} else if (last_ping == 0) {
|
||||
connectStatus = ItemStatus{{tr("CONNECT"), tr("OFFLINE")}, warning_color};
|
||||
} else {
|
||||
connectStatus = nanos_since_boot() - last_ping < 80e9
|
||||
? ItemStatus{{tr("CONNECT"), tr("ONLINE")}, QColor(starpilot_toggles.value("sidebar_color3").toString())}
|
||||
? ItemStatus{{tr("CONNECT"), tr("ONLINE")}, simple_mode ? good_color : QColor(starpilot_toggles.value("sidebar_color3").toString())}
|
||||
: ItemStatus{{tr("CONNECT"), tr("ERROR")}, danger_color};
|
||||
}
|
||||
setProperty("connectStatus", QVariant::fromValue(connectStatus));
|
||||
|
||||
int maxTempC = deviceState.getMaxTempC();
|
||||
QString max_temp = starpilot_toggles.value("fahrenheit").toBool() ? QString::number(maxTempC * 9 / 5 + 32) + "°F" : QString::number(maxTempC) + "°C";
|
||||
ItemStatus tempStatus = {{tr("TEMP"), starpilot_toggles.value("numerical_temp").toBool() ? max_temp : tr("HIGH")}, danger_color};
|
||||
ItemStatus tempStatus = {{tr("TEMP"), simple_mode ? tr("HIGH") : (starpilot_toggles.value("numerical_temp").toBool() ? max_temp : tr("HIGH"))}, danger_color};
|
||||
auto ts = deviceState.getThermalStatus();
|
||||
if (ts == cereal::DeviceState::ThermalStatus::GREEN) {
|
||||
tempStatus = {{tr("TEMP"), starpilot_toggles.value("numerical_temp").toBool() ? max_temp : tr("GOOD")}, QColor(starpilot_toggles.value("sidebar_color1").toString())};
|
||||
tempStatus = {{tr("TEMP"), simple_mode ? tr("GOOD") : (starpilot_toggles.value("numerical_temp").toBool() ? max_temp : tr("GOOD"))},
|
||||
simple_mode ? good_color : QColor(starpilot_toggles.value("sidebar_color1").toString())};
|
||||
} else if (ts == cereal::DeviceState::ThermalStatus::YELLOW) {
|
||||
tempStatus = {{tr("TEMP"), starpilot_toggles.value("numerical_temp").toBool() ? max_temp : tr("OK")}, warning_color};
|
||||
tempStatus = {{tr("TEMP"), simple_mode ? tr("OK") : (starpilot_toggles.value("numerical_temp").toBool() ? max_temp : tr("OK"))}, warning_color};
|
||||
}
|
||||
setProperty("tempStatus", QVariant::fromValue(tempStatus));
|
||||
|
||||
ItemStatus pandaStatus = {{tr("VEHICLE"), tr("ONLINE")}, QColor(starpilot_toggles.value("sidebar_color2").toString())};
|
||||
ItemStatus pandaStatus = {{tr("VEHICLE"), tr("ONLINE")}, simple_mode ? good_color : QColor(starpilot_toggles.value("sidebar_color2").toString())};
|
||||
if (s.scene.pandaType == cereal::PandaState::PandaType::UNKNOWN) {
|
||||
pandaStatus = {{tr("NO"), tr("PANDA")}, danger_color};
|
||||
}
|
||||
@@ -169,7 +177,7 @@ void Sidebar::updateState(const UIState &s, const StarPilotUIState &fs) {
|
||||
|
||||
setProperty("recordingAudio", s.scene.recording_audio);
|
||||
|
||||
if (starpilot_toggles.value("cpu_metrics").toBool() || starpilot_toggles.value("gpu_metrics").toBool()) {
|
||||
if (!simple_mode && (starpilot_toggles.value("cpu_metrics").toBool() || starpilot_toggles.value("gpu_metrics").toBool())) {
|
||||
capnp::List<int8_t>::Reader cpu_loads = deviceState.getCpuUsagePercent();
|
||||
int cpu_usage = cpu_loads.size() != 0 ? std::accumulate(cpu_loads.begin(), cpu_loads.end(), 0) / cpu_loads.size() : 0;
|
||||
int gpu_usage = deviceState.getGpuUsagePercent();
|
||||
@@ -186,7 +194,7 @@ void Sidebar::updateState(const UIState &s, const StarPilotUIState &fs) {
|
||||
setProperty("chipStatus", QVariant::fromValue(chipStatus));
|
||||
}
|
||||
|
||||
if (starpilot_toggles.value("memory_metrics").toBool() || starpilot_toggles.value("storage_left_metrics").toBool() || starpilot_toggles.value("storage_used_metrics").toBool()) {
|
||||
if (!simple_mode && (starpilot_toggles.value("memory_metrics").toBool() || starpilot_toggles.value("storage_left_metrics").toBool() || starpilot_toggles.value("storage_used_metrics").toBool())) {
|
||||
int free_space = deviceState.getFreeSpacePercent();
|
||||
int memory_usage = deviceState.getMemoryUsagePercent();
|
||||
int storage_left = starpilotDeviceState.getFreeSpace();
|
||||
@@ -240,9 +248,10 @@ void Sidebar::paintEvent(QPaintEvent *event) {
|
||||
StarPilotUIState *fs = starpilotUIState();
|
||||
StarPilotUIScene &starpilot_scene = fs->starpilot_scene;
|
||||
QJsonObject &starpilot_toggles = starpilot_scene.starpilot_toggles;
|
||||
const bool simple_mode = starpilot_toggles.value("simple_mode").toBool();
|
||||
|
||||
// network
|
||||
if (starpilot_toggles.value("ip_metrics").toBool()) {
|
||||
if (!simple_mode && starpilot_toggles.value("ip_metrics").toBool()) {
|
||||
p.setPen(QColor(0xff, 0xff, 0xff));
|
||||
p.save();
|
||||
p.setFont(InterFont(30));
|
||||
@@ -270,7 +279,10 @@ void Sidebar::paintEvent(QPaintEvent *event) {
|
||||
|
||||
// metrics
|
||||
drawMetric(p, temp_status.first, temp_status.second, 338);
|
||||
if (starpilot_toggles.value("cpu_metrics").toBool() || starpilot_toggles.value("gpu_metrics").toBool()) {
|
||||
if (simple_mode) {
|
||||
drawMetric(p, panda_status.first, panda_status.second, 496);
|
||||
drawMetric(p, connect_status.first, connect_status.second, 654);
|
||||
} else if (starpilot_toggles.value("cpu_metrics").toBool() || starpilot_toggles.value("gpu_metrics").toBool()) {
|
||||
drawMetric(p, chip_status.first, chip_status.second, 496);
|
||||
} else {
|
||||
drawMetric(p, panda_status.first, panda_status.second, 496);
|
||||
@@ -289,6 +301,24 @@ void Sidebar::showEvent(QShowEvent *event) {
|
||||
}
|
||||
|
||||
void Sidebar::updateTheme() {
|
||||
auto clearMovie = [](QSharedPointer<QMovie> &movie) {
|
||||
if (!movie.isNull()) {
|
||||
movie->stop();
|
||||
movie.reset();
|
||||
}
|
||||
};
|
||||
|
||||
if (starpilotUIState()->starpilot_scene.starpilot_toggles.value("simple_mode").toBool()) {
|
||||
clearMovie(home_gif);
|
||||
clearMovie(flag_gif);
|
||||
clearMovie(settings_gif);
|
||||
|
||||
home_img = loadPixmap("../assets/images/button_home.png", home_btn.size());
|
||||
flag_img = loadPixmap("../assets/images/button_flag.png", home_btn.size());
|
||||
settings_img = loadPixmap("../assets/images/button_settings.png", settings_btn.size(), Qt::IgnoreAspectRatio);
|
||||
return;
|
||||
}
|
||||
|
||||
loadImage("../../starpilot/assets/active_theme/icons/button_home", home_img, home_gif, home_btn.size(), this);
|
||||
loadImage("../../starpilot/assets/active_theme/icons/button_flag", flag_img, flag_gif, home_btn.size(), this);
|
||||
loadImage("../../starpilot/assets/active_theme/icons/button_settings", settings_img, settings_gif, settings_btn.size(), this);
|
||||
|
||||
Binary file not shown.
@@ -530,6 +530,7 @@ class StarPilotVariables:
|
||||
toggle.force_offroad = self.params.get_bool("ForceOffroad")
|
||||
toggle.force_onroad = self.params.get_bool("ForceOnroad")
|
||||
toggle.safe_mode = self.params.get_bool("SafeMode")
|
||||
toggle.simple_mode = self.params.get_bool("SimpleMode")
|
||||
|
||||
toggle.is_metric = self.params.get_bool("IsMetric")
|
||||
distance_conversion = 1 if toggle.is_metric else CV.FOOT_TO_METER
|
||||
@@ -971,6 +972,91 @@ class StarPilotVariables:
|
||||
toggle.startup_alert_top = self.get_value("StartupMessageTop", cast=str, default="")
|
||||
toggle.startup_alert_bottom = self.get_value("StartupMessageBottom", cast=str, default="")
|
||||
|
||||
if toggle.simple_mode:
|
||||
toggle.alert_volume_controller = False
|
||||
|
||||
toggle.color_scheme = "stock"
|
||||
toggle.current_holiday_theme = "stock"
|
||||
toggle.holiday_themes = False
|
||||
toggle.distance_icons = "stock"
|
||||
toggle.icon_pack = "stock"
|
||||
toggle.signal_icons = "stock"
|
||||
toggle.sound_pack = "stock"
|
||||
toggle.random_themes = False
|
||||
toggle.wheel_image = "stock"
|
||||
|
||||
toggle.hide_alerts = False
|
||||
toggle.hide_lead_marker = False
|
||||
toggle.hide_max_speed = False
|
||||
toggle.hide_speed = False
|
||||
toggle.hide_speed_limit = False
|
||||
toggle.use_wheel_speed = False
|
||||
|
||||
toggle.acceleration_path = False
|
||||
toggle.adjacent_paths = False
|
||||
toggle.blind_spot_path = False
|
||||
toggle.compass = False
|
||||
toggle.pedals_on_ui = False
|
||||
toggle.dynamic_pedals_on_ui = False
|
||||
toggle.static_pedals_on_ui = False
|
||||
toggle.rotating_wheel = False
|
||||
|
||||
toggle.cem_status = False
|
||||
toggle.csc_status = False
|
||||
toggle.model_ui = False
|
||||
toggle.dynamic_path_width = False
|
||||
toggle.road_name_ui = False
|
||||
toggle.show_speed_limits = False
|
||||
toggle.speed_limit_vienna = False
|
||||
toggle.speed_limit_sources = False
|
||||
toggle.camera_view = 0
|
||||
toggle.driver_camera_in_reverse = False
|
||||
toggle.onroad_distance_button = False
|
||||
toggle.stopped_timer = False
|
||||
toggle.rainbow_path = False
|
||||
toggle.random_events = False
|
||||
toggle.screen_recorder = False
|
||||
toggle.show_speed_limit_offset = False
|
||||
|
||||
toggle.developer_ui = False
|
||||
toggle.blind_spot_metrics = False
|
||||
toggle.signal_metrics = False
|
||||
toggle.steering_metrics = False
|
||||
toggle.show_fps = False
|
||||
toggle.adjacent_path_metrics = False
|
||||
toggle.lead_info = False
|
||||
toggle.numerical_temp = False
|
||||
toggle.fahrenheit = False
|
||||
toggle.cpu_metrics = False
|
||||
toggle.gpu_metrics = False
|
||||
toggle.ip_metrics = False
|
||||
toggle.memory_metrics = False
|
||||
toggle.storage_left_metrics = False
|
||||
toggle.storage_used_metrics = False
|
||||
toggle.use_si_metrics = False
|
||||
toggle.developer_sidebar = False
|
||||
toggle.developer_sidebar_metric1 = None
|
||||
toggle.developer_sidebar_metric2 = None
|
||||
toggle.developer_sidebar_metric3 = None
|
||||
toggle.developer_sidebar_metric4 = None
|
||||
toggle.developer_sidebar_metric5 = None
|
||||
toggle.developer_sidebar_metric6 = None
|
||||
toggle.developer_sidebar_metric7 = None
|
||||
toggle.adjacent_lead_tracking = False
|
||||
toggle.radar_tracks = False
|
||||
toggle.show_stopping_point = False
|
||||
toggle.show_stopping_point_metrics = False
|
||||
|
||||
toggle.goat_scream_alert = False
|
||||
toggle.goat_scream_critical_alerts = False
|
||||
toggle.green_light_alert = False
|
||||
toggle.lead_departing_alert = False
|
||||
toggle.loud_blindspot_alert = False
|
||||
toggle.speed_limit_changed_alert = False
|
||||
|
||||
toggle.startup_alert_top = "Be ready to take over at any time"
|
||||
toggle.startup_alert_bottom = "Always keep hands on wheel and eyes on road"
|
||||
|
||||
toggle.subaru_sng = self.get_value("SubaruSNG", condition=toggle.car_make == "subaru" and not (CP.flags & SubaruFlags.GLOBAL_GEN2 or CP.flags & SubaruFlags.HYBRID))
|
||||
|
||||
toggle.tethering_config = self.get_value("TetheringEnabled", cast=float)
|
||||
|
||||
@@ -1794,6 +1794,14 @@
|
||||
"data_type": "bool",
|
||||
"ui_type": "toggle",
|
||||
"parent_key": "QOLVisuals"
|
||||
},
|
||||
{
|
||||
"key": "SimpleMode",
|
||||
"label": "Simple Mode",
|
||||
"description": "Use a more stock-like presentation by hiding most branch-specific UI, theme, sound, and alert styling. This only changes presentation and does not change driving behavior.",
|
||||
"data_type": "bool",
|
||||
"ui_type": "toggle",
|
||||
"parent_key": "QOLVisuals"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -247,6 +247,11 @@ void StarPilotAnnotatedCameraWidget::updateState(const UIState &s, const StarPil
|
||||
}
|
||||
|
||||
void StarPilotAnnotatedCameraWidget::mousePressEvent(QMouseEvent *mouseEvent) {
|
||||
if (starpilot_toggles.value("simple_mode").toBool()) {
|
||||
mouseEvent->ignore();
|
||||
return;
|
||||
}
|
||||
|
||||
if (speedLimitChanged && newSpeedLimitRect.contains(mouseEvent->pos())) {
|
||||
params_memory.putBool("SpeedLimitAccepted", true);
|
||||
mouseEvent->accept();
|
||||
@@ -257,6 +262,15 @@ void StarPilotAnnotatedCameraWidget::mousePressEvent(QMouseEvent *mouseEvent) {
|
||||
}
|
||||
|
||||
void StarPilotAnnotatedCameraWidget::paintStarPilotWidgets(QPainter &p, UIState &s) {
|
||||
if (starpilot_toggles.value("simple_mode").toBool()) {
|
||||
cemStatusPosition = QPoint(0, 0);
|
||||
compassPosition = QPoint(0, 0);
|
||||
lateralPausedPosition = QPoint(0, 0);
|
||||
newSpeedLimitRect = QRect();
|
||||
speedLimitHeight = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hideBottomIcons && starpilot_toggles.value("cem_status").toBool()) {
|
||||
paintCEMStatus(p);
|
||||
} else {
|
||||
|
||||
@@ -89,6 +89,7 @@ StarPilotUIState::StarPilotUIState(QObject *parent) : QObject(parent) {
|
||||
{"sidebar_color1", "#FFFFFFFF"},
|
||||
{"sidebar_color2", "#FFFFFFFF"},
|
||||
{"sidebar_color3", "#FFFFFFFF"},
|
||||
{"simple_mode", false},
|
||||
{"standby_mode", false},
|
||||
{"tethering_config", 0},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user