From 629cfd845f1b6fd8723c915f025ba0c18e58a2a0 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 20 Sep 2025 17:23:24 -0400 Subject: [PATCH] ui: fix scrolling behavior in Speed Limit settings (#1269) * rename * ui: fix scrolling behavior in Speed Limit settings --- .../longitudinal/speed_limit/speed_limit_policy.cc | 5 ++++- .../settings/longitudinal/speed_limit/speed_limit_policy.h | 2 ++ .../longitudinal/speed_limit/speed_limit_settings.cc | 7 +++++-- .../longitudinal/speed_limit/speed_limit_settings.h | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.cc index 46f361a15..764a8e020 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.cc @@ -4,6 +4,7 @@ * 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 #include "selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.h" @@ -38,8 +39,9 @@ SpeedLimitPolicy::SpeedLimitPolicy(QWidget *parent) : QWidget(parent) { list->addItem(speed_limit_policy); connect(speed_limit_policy, &ButtonParamControlSP::buttonClicked, this, &SpeedLimitPolicy::refresh); + speedLimitPolicyScroller = new ScrollViewSP(list, this); + main_layout->addWidget(speedLimitPolicyScroller); refresh(); - main_layout->addWidget(list); }; void SpeedLimitPolicy::refresh() { @@ -48,6 +50,7 @@ void SpeedLimitPolicy::refresh() { } void SpeedLimitPolicy::showEvent(QShowEvent *event) { + speedLimitPolicyScroller->verticalScrollBar()->setValue(0); refresh(); speed_limit_policy->showDescription(); } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.h index adeb115db..219aa53c6 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.h @@ -10,6 +10,7 @@ #include "selfdrive/ui/sunnypilot/ui.h" #include "selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/helpers.h" #include "selfdrive/ui/sunnypilot/qt/widgets/controls.h" +#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" class SpeedLimitPolicy : public QWidget { Q_OBJECT @@ -25,6 +26,7 @@ signals: private: Params params; ButtonParamControlSP *speed_limit_policy; + ScrollViewSP *speedLimitPolicyScroller; static QString sourceDescription(SpeedLimitSourcePolicy type = SpeedLimitSourcePolicy::CAR_ONLY) { QString car_only = tr("⦿ Car Only: Use Speed Limit data only from Car"); diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.cc index 6f4883361..eed0306ca 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.cc @@ -31,7 +31,7 @@ SpeedLimitSettings::SpeedLimitSettings(QWidget *parent) : QStackedWidget(parent) }; speed_limit_mode_settings = new ButtonParamControlSP( "SpeedLimitMode", - tr("Speed Limit Mode"), + tr("Speed Limit"), "", "", speed_limit_mode_texts, @@ -43,10 +43,12 @@ SpeedLimitSettings::SpeedLimitSettings(QWidget *parent) : QStackedWidget(parent) speedLimitSource = new PushButtonSP(tr("Customize Source")); connect(speedLimitSource, &QPushButton::clicked, [&]() { + speedLimitScroller->setLastScrollPosition(); setCurrentWidget(speedLimitPolicyScreen); speedLimitPolicyScreen->refresh(); }); connect(speedLimitPolicyScreen, &SpeedLimitPolicy::backPress, [&]() { + speedLimitScroller->restoreScrollPosition(); setCurrentWidget(subPanelFrame); showEvent(new QShowEvent()); }); @@ -92,7 +94,8 @@ SpeedLimitSettings::SpeedLimitSettings(QWidget *parent) : QStackedWidget(parent) connect(speed_limit_offset_settings, &ButtonParamControlSP::buttonClicked, this, &SpeedLimitSettings::refresh); refresh(); - subPanelLayout->addWidget(list); + speedLimitScroller = new ScrollViewSP(list, this); + subPanelLayout->addWidget(speedLimitScroller); addWidget(subPanelFrame); addWidget(speedLimitPolicyScreen); setCurrentWidget(subPanelFrame); diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.h index f83f45055..61c86f920 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_settings.h @@ -12,6 +12,7 @@ #include "selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/helpers.h" #include "selfdrive/ui/sunnypilot/qt/offroad/settings/longitudinal/speed_limit/speed_limit_policy.h" #include "selfdrive/ui/sunnypilot/qt/widgets/controls.h" +#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h" class SpeedLimitSettings : public QStackedWidget { Q_OBJECT @@ -26,6 +27,7 @@ signals: private: Params params; + ScrollViewSP *speedLimitScroller; QFrame *subPanelFrame; ButtonParamControlSP *speed_limit_mode_settings; PushButtonSP *speedLimitSource;