UI: refactor ButtonControl (#21315)

pull/21324/head
Dean Lee 4 years ago committed by GitHub
parent 6e4c2aa4d2
commit 8675c970d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      selfdrive/ui/qt/offroad/networking.cc
  2. 33
      selfdrive/ui/qt/offroad/settings.cc
  3. 22
      selfdrive/ui/qt/widgets/controls.cc
  4. 31
      selfdrive/ui/qt/widgets/controls.h
  5. 35
      selfdrive/ui/qt/widgets/ssh_keys.cc
  6. 2
      selfdrive/ui/qt/widgets/ssh_keys.h

@ -145,7 +145,8 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid
main_layout->addWidget(horizontal_line(), 0); main_layout->addWidget(horizontal_line(), 0);
// Change tethering password // Change tethering password
editPasswordButton = new ButtonControl("Tethering Password", "EDIT", "", [=]() { editPasswordButton = new ButtonControl("Tethering Password", "EDIT");
connect(editPasswordButton, &ButtonControl::released, [=]() {
QString pass = InputDialog::getText("Enter new tethering password", 8); QString pass = InputDialog::getText("Enter new tethering password", 8);
if (pass.size()) { if (pass.size()) {
wifi->changeTetheringPassword(pass); wifi->changeTetheringPassword(pass);

@ -113,18 +113,18 @@ DevicePanel::DevicePanel(QWidget* parent) : QWidget(parent) {
main_layout->addWidget(new LabelControl("Serial", serial)); main_layout->addWidget(new LabelControl("Serial", serial));
// offroad-only buttons // offroad-only buttons
QList<ButtonControl*> offroad_btns;
offroad_btns.append(new ButtonControl("Driver Camera", "PREVIEW", auto dcamBtn = new ButtonControl("Driver Camera", "PREVIEW",
"Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)", "Preview the driver facing camera to help optimize device mounting position for best driver monitoring experience. (vehicle must be off)");
[=]() { emit showDriverView(); }, "", this)); connect(dcamBtn, &ButtonControl::released, [=]() { emit showDriverView(); });
QString resetCalibDesc = "openpilot requires the device to be mounted within 4° left or right and within 5° up or down. openpilot is continuously calibrating, resetting is rarely required."; QString resetCalibDesc = "openpilot requires the device to be mounted within 4° left or right and within 5° up or down. openpilot is continuously calibrating, resetting is rarely required.";
ButtonControl *resetCalibBtn = new ButtonControl("Reset Calibration", "RESET", resetCalibDesc, [=]() { auto resetCalibBtn = new ButtonControl("Reset Calibration", "RESET", resetCalibDesc);
connect(resetCalibBtn, &ButtonControl::released, [=]() {
if (ConfirmationDialog::confirm("Are you sure you want to reset calibration?", this)) { if (ConfirmationDialog::confirm("Are you sure you want to reset calibration?", this)) {
Params().remove("CalibrationParams"); Params().remove("CalibrationParams");
} }
}, "", this); });
connect(resetCalibBtn, &ButtonControl::showDescription, [=]() { connect(resetCalibBtn, &ButtonControl::showDescription, [=]() {
QString desc = resetCalibDesc; QString desc = resetCalibDesc;
std::string calib_bytes = Params().get("CalibrationParams"); std::string calib_bytes = Params().get("CalibrationParams");
@ -146,25 +146,25 @@ DevicePanel::DevicePanel(QWidget* parent) : QWidget(parent) {
} }
resetCalibBtn->setDescription(desc); resetCalibBtn->setDescription(desc);
}); });
offroad_btns.append(resetCalibBtn);
offroad_btns.append(new ButtonControl("Review Training Guide", "REVIEW", auto retrainingBtn = new ButtonControl("Review Training Guide", "REVIEW", "Review the rules, features, and limitations of openpilot");
"Review the rules, features, and limitations of openpilot", [=]() { connect(retrainingBtn, &ButtonControl::released, [=]() {
if (ConfirmationDialog::confirm("Are you sure you want to review the training guide?", this)) { if (ConfirmationDialog::confirm("Are you sure you want to review the training guide?", this)) {
Params().remove("CompletedTrainingVersion"); Params().remove("CompletedTrainingVersion");
emit reviewTrainingGuide(); emit reviewTrainingGuide();
} }
}, "", this)); });
offroad_btns.append(new ButtonControl("Uninstall " + getBrand(), "UNINSTALL", "", [=]() { auto uninstallBtn = new ButtonControl("Uninstall " + getBrand(), "UNINSTALL");
connect(uninstallBtn, &ButtonControl::released, [=]() {
if (ConfirmationDialog::confirm("Are you sure you want to uninstall?", this)) { if (ConfirmationDialog::confirm("Are you sure you want to uninstall?", this)) {
Params().putBool("DoUninstall", true); Params().putBool("DoUninstall", true);
} }
}, "", this)); });
for(auto &btn : offroad_btns) { for (auto btn : {dcamBtn, resetCalibBtn, retrainingBtn, uninstallBtn}) {
main_layout->addWidget(horizontal_line()); main_layout->addWidget(horizontal_line());
QObject::connect(parent, SIGNAL(offroadTransition(bool)), btn, SLOT(setEnabled(bool))); connect(parent, SIGNAL(offroadTransition(bool)), btn, SLOT(setEnabled(bool)));
main_layout->addWidget(btn); main_layout->addWidget(btn);
} }
@ -207,7 +207,8 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : QWidget(parent) {
osVersionLbl = new LabelControl("OS Version"); osVersionLbl = new LabelControl("OS Version");
versionLbl = new LabelControl("Version", "", QString::fromStdString(params.get("ReleaseNotes")).trimmed()); versionLbl = new LabelControl("Version", "", QString::fromStdString(params.get("ReleaseNotes")).trimmed());
lastUpdateLbl = new LabelControl("Last Update Check", "", "The last time openpilot successfully checked for an update. The updater only runs while the car is off."); lastUpdateLbl = new LabelControl("Last Update Check", "", "The last time openpilot successfully checked for an update. The updater only runs while the car is off.");
updateBtn = new ButtonControl("Check for Update", "", "", [=]() { updateBtn = new ButtonControl("Check for Update", "");
connect(updateBtn, &ButtonControl::released, [=]() {
if (params.getBool("IsOffroad")) { if (params.getBool("IsOffroad")) {
const QString paramsPath = QString::fromStdString(params.getParamsPath()); const QString paramsPath = QString::fromStdString(params.getParamsPath());
fs_watch->addPath(paramsPath + "/d/LastUpdateTime"); fs_watch->addPath(paramsPath + "/d/LastUpdateTime");
@ -216,7 +217,7 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : QWidget(parent) {
updateBtn->setEnabled(false); updateBtn->setEnabled(false);
} }
std::system("pkill -1 -f selfdrive.updated"); std::system("pkill -1 -f selfdrive.updated");
}, "", this); });
QVBoxLayout *main_layout = new QVBoxLayout(this); QVBoxLayout *main_layout = new QVBoxLayout(this);
QWidget *widgets[] = {versionLbl, lastUpdateLbl, updateBtn, gitBranchLbl, gitCommitLbl, osVersionLbl}; QWidget *widgets[] = {versionLbl, lastUpdateLbl, updateBtn, gitBranchLbl, gitCommitLbl, osVersionLbl};

@ -63,3 +63,25 @@ void AbstractControl::hideEvent(QHideEvent *e) {
description->hide(); description->hide();
} }
} }
// controls
ButtonControl::ButtonControl(const QString &title, const QString &text, const QString &desc, QWidget *parent) : AbstractControl(title, desc, "", parent) {
btn.setText(text);
btn.setStyleSheet(R"(
QPushButton {
padding: 0;
border-radius: 50px;
font-size: 35px;
font-weight: 500;
color: #E4E4E4;
background-color: #393939;
}
QPushButton:disabled {
color: #33E4E4E4;
}
)");
btn.setFixedSize(250, 100);
QObject::connect(&btn, &QPushButton::released, this, &ButtonControl::released);
hlayout->addWidget(&btn);
}

@ -56,32 +56,15 @@ class ButtonControl : public AbstractControl {
Q_OBJECT Q_OBJECT
public: public:
template <typename Functor> ButtonControl(const QString &title, const QString &text, const QString &desc = "", QWidget *parent = nullptr);
ButtonControl(const QString &title, const QString &text, const QString &desc, Functor functor, const QString &icon = "", QWidget *parent = nullptr) : AbstractControl(title, desc, icon, parent) { inline void setText(const QString &text) { btn.setText(text); }
btn.setText(text); inline QString text() const { return btn.text(); }
btn.setStyleSheet(R"(
QPushButton { signals:
padding: 0; void released();
border-radius: 50px;
font-size: 35px;
font-weight: 500;
color: #E4E4E4;
background-color: #393939;
}
QPushButton:disabled {
color: #33E4E4E4;
}
)");
btn.setFixedSize(250, 100);
QObject::connect(&btn, &QPushButton::released, functor);
hlayout->addWidget(&btn);
}
void setText(const QString &text) { btn.setText(text); }
public slots: public slots:
void setEnabled(bool enabled) { void setEnabled(bool enabled) { btn.setEnabled(enabled); };
btn.setEnabled(enabled);
};
private: private:
QPushButton btn; QPushButton btn;

@ -4,32 +4,17 @@
#include "selfdrive/ui/qt/api.h" #include "selfdrive/ui/qt/api.h"
#include "selfdrive/ui/qt/widgets/input.h" #include "selfdrive/ui/qt/widgets/input.h"
SshControl::SshControl() : AbstractControl("SSH Keys", "Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username other than your own. A comma employee will NEVER ask you to add their GitHub username.", "") { SshControl::SshControl() : ButtonControl("SSH Keys", "", "Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username other than your own. A comma employee will NEVER ask you to add their GitHub username.") {
username_label.setAlignment(Qt::AlignRight | Qt::AlignVCenter);
// setup widget
hlayout->addStretch(1);
username_label.setAlignment(Qt::AlignVCenter);
username_label.setStyleSheet("color: #aaaaaa"); username_label.setStyleSheet("color: #aaaaaa");
hlayout->addWidget(&username_label); hlayout->insertWidget(1, &username_label);
btn.setStyleSheet(R"(
padding: 0;
border-radius: 50px;
font-size: 35px;
font-weight: 500;
color: #E4E4E4;
background-color: #393939;
)");
btn.setFixedSize(250, 100);
hlayout->addWidget(&btn);
QObject::connect(&btn, &QPushButton::released, [=]() { QObject::connect(this, &ButtonControl::released, [=]() {
if (btn.text() == "ADD") { if (text() == "ADD") {
QString username = InputDialog::getText("Enter your GitHub username"); QString username = InputDialog::getText("Enter your GitHub username");
if (username.length() > 0) { if (username.length() > 0) {
btn.setText("LOADING"); setText("LOADING");
btn.setEnabled(false); setEnabled(false);
getUserKeys(username); getUserKeys(username);
} }
} else { } else {
@ -46,12 +31,12 @@ void SshControl::refresh() {
QString param = QString::fromStdString(params.get("GithubSshKeys")); QString param = QString::fromStdString(params.get("GithubSshKeys"));
if (param.length()) { if (param.length()) {
username_label.setText(QString::fromStdString(params.get("GithubUsername"))); username_label.setText(QString::fromStdString(params.get("GithubUsername")));
btn.setText("REMOVE"); setText("REMOVE");
} else { } else {
username_label.setText(""); username_label.setText("");
btn.setText("ADD"); setText("ADD");
} }
btn.setEnabled(true); setEnabled(true);
} }
void SshControl::getUserKeys(const QString &username) { void SshControl::getUserKeys(const QString &username) {

@ -18,7 +18,7 @@ public:
}; };
// SSH key management widget // SSH key management widget
class SshControl : public AbstractControl { class SshControl : public ButtonControl {
Q_OBJECT Q_OBJECT
public: public:

Loading…
Cancel
Save