From d06d10da68aa7987ed5eecf28be908f9efdb79f5 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Mon, 22 Mar 2021 12:02:00 +0800 Subject: [PATCH] Qt: update developer page when it's visible (#20396) * simplify&cleanup * cleanup Co-authored-by: Adeeb Shihadeh old-commit-hash: ddde7efb4b0639436f7d19b191ee02201e0f97c5 --- selfdrive/ui/qt/offroad/settings.cc | 44 +++++++++++++++------------- selfdrive/ui/qt/offroad/settings.hpp | 10 +++++++ 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index c3c5f16fad..8cb9c06552 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -31,7 +31,7 @@ QFrame* horizontal_line(QWidget* parent = 0){ return line; } -QWidget* labelWidget(QString labelName, QString labelContent){ +QWidget *labelWidget(QString labelName, QString labelContent, QLabel **label = nullptr) { QHBoxLayout* labelLayout = new QHBoxLayout; labelLayout->addWidget(new QLabel(labelName), 0, Qt::AlignLeft); QLabel* paramContent = new QLabel(labelContent); @@ -39,6 +39,7 @@ QWidget* labelWidget(QString labelName, QString labelContent){ labelLayout->addWidget(paramContent, 0, Qt::AlignRight); QWidget* labelWidget = new QWidget; labelWidget->setLayout(labelLayout); + if (label) *label = paramContent; return labelWidget; } @@ -157,7 +158,8 @@ QWidget * device_panel() { //} for (auto &l : labels) { - device_layout->addWidget(labelWidget(QString::fromStdString(l.first), QString::fromStdString(l.second)), 0, Qt::AlignTop); + device_layout->addWidget(labelWidget(QString::fromStdString(l.first), + QString::fromStdString(l.second)), 0, Qt::AlignTop); } QPushButton* dcam_view = new QPushButton("Driver camera view"); @@ -218,13 +220,17 @@ QWidget * device_panel() { return widget; } -QWidget * developer_panel() { - QVBoxLayout *main_layout = new QVBoxLayout; +DeveloperPanel::DeveloperPanel(QWidget* parent) : QFrame(parent) { + QVBoxLayout *main_layout = new QVBoxLayout(this); main_layout->setMargin(100); + setLayout(main_layout); + setStyleSheet(R"(QLabel {font-size: 50px;})"); +} +void DeveloperPanel::showEvent(QShowEvent *event) { Params params = Params(); std::string brand = params.read_db_bool("Passive") ? "dashcam" : "openpilot"; - std::vector> labels = { + QList> dev_params = { {"Version", brand + " v" + params.get("Version", false)}, {"Git Branch", params.get("GitBranch", false)}, {"Git Commit", params.get("GitCommit", false).substr(0, 10)}, @@ -232,23 +238,19 @@ QWidget * developer_panel() { {"OS Version", Hardware::get_os_version()}, }; - for (int i = 0; i < labels.size(); i++) { - auto l = labels[i]; - main_layout->addWidget(labelWidget(QString::fromStdString(l.first), QString::fromStdString(l.second))); - - if(i+1 < labels.size()) { - main_layout->addWidget(horizontal_line()); + for (int i = 0; i < dev_params.size(); i++) { + const auto &[name, value] = dev_params[i]; + if (labels.size() > i) { + labels[i]->setText(QString::fromStdString(value)); + } else { + QLabel *label = nullptr; + layout()->addWidget(labelWidget(name, QString::fromStdString(value), &label)); + if (i < (dev_params.size() - 1)) { + layout()->addWidget(horizontal_line()); + } + labels.push_back(label); } } - - QWidget *widget = new QWidget; - widget->setLayout(main_layout); - widget->setStyleSheet(R"( - QLabel { - font-size: 50px; - } - )"); - return widget; } QWidget * network_panel(QWidget * parent) { @@ -318,7 +320,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { {"Device", device_panel()}, {"Network", network_panel(this)}, {"Toggles", toggles_panel()}, - {"Developer", developer_panel()}, + {"Developer", new DeveloperPanel()}, }; sidebar_layout->addSpacing(45); diff --git a/selfdrive/ui/qt/offroad/settings.hpp b/selfdrive/ui/qt/offroad/settings.hpp index 6ceb7d0248..3ddfdfb91d 100644 --- a/selfdrive/ui/qt/offroad/settings.hpp +++ b/selfdrive/ui/qt/offroad/settings.hpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,15 @@ public slots: void checkboxClicked(int state); }; +class DeveloperPanel : public QFrame { + Q_OBJECT +public: + explicit DeveloperPanel(QWidget* parent = nullptr); + +protected: + void showEvent(QShowEvent *event) override; + QList labels; +}; // *** settings window ***