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."),
"../assets/offroad/icon_speed_limit.png",
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) {
auto toggle = new ParamControl(param, title, desc, icon, this);
@ -128,11 +139,6 @@ void TogglesPanel::showEvent(QShowEvent *event) {
updateToggles();
}
void TogglesPanel::updatePersonalitySetting(int personality) {
// Update the personality setting in the UI
long_personality_setting->setCheckedButton(personality);
}
void TogglesPanel::updateToggles() {
auto experimental_mode_toggle = toggles["ExperimentalMode"];
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) {
// setup uiState updates
QObject::connect(uiState(), &UIState::uiUpdate, this, &SettingsWindow::updateState);
// setup two main layouts
sidebar_widget = new QWidget;
QVBoxLayout *sidebar_layout = new QVBoxLayout(sidebar_widget);
@ -394,7 +385,6 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
TogglesPanel *toggles = new TogglesPanel(this);
QObject::connect(this, &SettingsWindow::expandToggleDescription, toggles, &TogglesPanel::expandToggleDescription);
QObject::connect(this, &SettingsWindow::updatePersonalitySetting, toggles, &TogglesPanel::updatePersonalitySetting);
QList<QPair<QString, QWidget *>> panels = {
{tr("Device"), device},

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

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

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

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

Loading…
Cancel
Save