Simple Mode

This commit is contained in:
firestar5683
2026-04-07 22:32:53 -05:00
parent c2ff6b573a
commit 2d7d7a1246
18 changed files with 307 additions and 65 deletions
Binary file not shown.
+1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -1 +1 @@
DEV-2b280bd5-DEBUG
DEV-a0ae1eea-DEBUG
+55 -21
View File
@@ -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()));
}
+5
View File
@@ -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 {
+46 -26
View File
@@ -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];
+29 -1
View File
@@ -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"));
}
}
}
+1
View File
@@ -102,6 +102,7 @@ public:
signals:
void updateMetric(bool metric, bool bootRun=false);
void simpleModeChanged(bool enabled);
public slots:
void expandToggleDescription(const QString &param);
+13 -1
View File
@@ -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());
+3 -1
View File
@@ -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
View File
@@ -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);
BIN
View File
Binary file not shown.
+86
View File
@@ -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 {
+1
View File
@@ -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},
};