ParamWatcher is nice

pull/31792/head
Shane Smiskol 1 year ago
parent a4d1b5441f
commit 1589e0898c
  1. 32
      selfdrive/ui/qt/offroad/settings.cc
  2. 6
      selfdrive/ui/qt/offroad/settings.h
  3. 10
      selfdrive/ui/qt/widgets/controls.h
  4. 2
      selfdrive/ui/ui.cc
  5. 1
      selfdrive/ui/ui.h

@ -95,6 +95,17 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
"your steering wheel distance button."), "your steering wheel distance button."),
"../assets/offroad/icon_speed_limit.png", "../assets/offroad/icon_speed_limit.png",
longi_button_texts); longi_button_texts);
// Watch param to update the personality setting in the UI
ParamWatcher *lp_watch = new ParamWatcher(this);
lp_watch->addParam("LongitudinalPersonality");
QObject::connect(lp_watch, &ParamWatcher::paramChanged, [=](const QString &param_name, const QString &param_value) {
lp_watch->addParam("LongitudinalPersonality");
if (isVisible()) {
long_personality_setting->refresh();
}
});
for (auto &[param, title, desc, icon] : toggle_defs) { for (auto &[param, title, desc, icon] : toggle_defs) {
auto toggle = new ParamControl(param, title, desc, icon, this); auto toggle = new ParamControl(param, title, desc, icon, this);
@ -128,11 +139,6 @@ void TogglesPanel::showEvent(QShowEvent *event) {
updateToggles(); updateToggles();
} }
void TogglesPanel::updatePersonalitySetting(int personality) {
// Update the personality setting in the UI
long_personality_setting->setCheckedButton(personality);
}
void TogglesPanel::updateToggles() { void TogglesPanel::updateToggles() {
auto experimental_mode_toggle = toggles["ExperimentalMode"]; auto experimental_mode_toggle = toggles["ExperimentalMode"];
auto op_long_toggle = toggles["ExperimentalLongitudinalEnabled"]; auto op_long_toggle = toggles["ExperimentalLongitudinalEnabled"];
@ -346,23 +352,8 @@ void SettingsWindow::setCurrentPanel(int index, const QString &param) {
} }
} }
void SettingsWindow::updateState(const UIState &s) {
const SubMaster &sm = *(s.sm);
if (sm.updated("longitudinalPlan")) {
auto personality = sm["longitudinalPlan"].getLongitudinalPlan().getPersonality();
if (personality != s.scene.personality && s.scene.started) {
emit updatePersonalitySetting(static_cast<int>(personality));
}
uiState()->scene.personality = personality;
}
}
SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
// setup uiState updates
QObject::connect(uiState(), &UIState::uiUpdate, this, &SettingsWindow::updateState);
// setup two main layouts // setup two main layouts
sidebar_widget = new QWidget; sidebar_widget = new QWidget;
QVBoxLayout *sidebar_layout = new QVBoxLayout(sidebar_widget); QVBoxLayout *sidebar_layout = new QVBoxLayout(sidebar_widget);
@ -394,7 +385,6 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
TogglesPanel *toggles = new TogglesPanel(this); TogglesPanel *toggles = new TogglesPanel(this);
QObject::connect(this, &SettingsWindow::expandToggleDescription, toggles, &TogglesPanel::expandToggleDescription); QObject::connect(this, &SettingsWindow::expandToggleDescription, toggles, &TogglesPanel::expandToggleDescription);
QObject::connect(this, &SettingsWindow::updatePersonalitySetting, toggles, &TogglesPanel::updatePersonalitySetting);
QList<QPair<QString, QWidget *>> panels = { QList<QPair<QString, QWidget *>> panels = {
{tr("Device"), device}, {tr("Device"), device},

@ -11,7 +11,6 @@
#include <QWidget> #include <QWidget>
#include "selfdrive/ui/ui.h"
#include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/qt/util.h"
#include "selfdrive/ui/qt/widgets/controls.h" #include "selfdrive/ui/qt/widgets/controls.h"
@ -23,9 +22,6 @@ public:
explicit SettingsWindow(QWidget *parent = 0); explicit SettingsWindow(QWidget *parent = 0);
void setCurrentPanel(int index, const QString &param = ""); void setCurrentPanel(int index, const QString &param = "");
private slots:
void updateState(const UIState &s);
protected: protected:
void showEvent(QShowEvent *event) override; void showEvent(QShowEvent *event) override;
@ -34,7 +30,6 @@ signals:
void reviewTrainingGuide(); void reviewTrainingGuide();
void showDriverView(); void showDriverView();
void expandToggleDescription(const QString &param); void expandToggleDescription(const QString &param);
void updatePersonalitySetting(int personality);
private: private:
QPushButton *sidebar_alert_widget; QPushButton *sidebar_alert_widget;
@ -68,7 +63,6 @@ public:
public slots: public slots:
void expandToggleDescription(const QString &param); void expandToggleDescription(const QString &param);
void updatePersonalitySetting(int personality);
private: private:
Params params; Params params;

@ -8,6 +8,7 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QPainter> #include <QPainter>
#include <QDebug>
#include <QPushButton> #include <QPushButton>
#include "common/params.h" #include "common/params.h"
@ -234,8 +235,13 @@ public:
} }
} }
void setCheckedButton(int id) { void refresh() {
button_group->button(id)->setChecked(true); int value = atoi(params.get(key).c_str());
button_group->button(value)->setChecked(true);
}
void showEvent(QShowEvent *event) override {
refresh();
} }
private: private:

@ -248,7 +248,7 @@ UIState::UIState(QObject *parent) : QObject(parent) {
sm = std::make_unique<SubMaster, const std::initializer_list<const char *>>({ sm = std::make_unique<SubMaster, const std::initializer_list<const char *>>({
"modelV2", "controlsState", "liveCalibration", "radarState", "deviceState", "modelV2", "controlsState", "liveCalibration", "radarState", "deviceState",
"pandaStates", "carParams", "driverMonitoringState", "carState", "liveLocationKalman", "driverStateV2", "pandaStates", "carParams", "driverMonitoringState", "carState", "liveLocationKalman", "driverStateV2",
"wideRoadCameraState", "managerState", "navInstruction", "navRoute", "uiPlan", "longitudinalPlan", "wideRoadCameraState", "managerState", "navInstruction", "navRoute", "uiPlan",
}); });
Params params; Params params;

@ -158,7 +158,6 @@ typedef struct UIScene {
float light_sensor; float light_sensor;
bool started, ignition, is_metric, map_on_left, longitudinal_control; bool started, ignition, is_metric, map_on_left, longitudinal_control;
cereal::LongitudinalPersonality personality;
bool world_objects_visible = false; bool world_objects_visible = false;
uint64_t started_frame; uint64_t started_frame;
} UIScene; } UIScene;

Loading…
Cancel
Save