setup: add openpilot button (#31628)

* setup: add openpilot button

* rename
pull/31630/head
Adeeb Shihadeh 1 year ago committed by GitHub
parent e9a10ca712
commit 6cf7599bcd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 122
      selfdrive/ui/qt/setup/setup.cc
  2. 1
      selfdrive/ui/qt/setup/setup.h
  3. 12
      selfdrive/ui/translations/main_ar.ts
  4. 12
      selfdrive/ui/translations/main_de.ts
  5. 12
      selfdrive/ui/translations/main_fr.ts
  6. 12
      selfdrive/ui/translations/main_ja.ts
  7. 12
      selfdrive/ui/translations/main_ko.ts
  8. 12
      selfdrive/ui/translations/main_pt-BR.ts
  9. 12
      selfdrive/ui/translations/main_th.ts
  10. 12
      selfdrive/ui/translations/main_tr.ts
  11. 12
      selfdrive/ui/translations/main_zh-CHS.ts
  12. 12
      selfdrive/ui/translations/main_zh-CHT.ts

@ -20,7 +20,7 @@
#include "selfdrive/ui/qt/widgets/input.h" #include "selfdrive/ui/qt/widgets/input.h"
const std::string USER_AGENT = "AGNOSSetup-"; const std::string USER_AGENT = "AGNOSSetup-";
const QString TEST_URL = "https://openpilot.comma.ai"; const QString OPENPILOT_URL = "https://openpilot.comma.ai";
bool is_elf(char *fname) { bool is_elf(char *fname) {
FILE *fp = fopen(fname, "rb"); FILE *fp = fopen(fname, "rb");
@ -201,20 +201,7 @@ QWidget * Setup::network_setup() {
QPushButton *cont = new QPushButton(); QPushButton *cont = new QPushButton();
cont->setObjectName("navBtn"); cont->setObjectName("navBtn");
cont->setProperty("primary", true); cont->setProperty("primary", true);
QObject::connect(cont, &QPushButton::clicked, [=]() { QObject::connect(cont, &QPushButton::clicked, this, &Setup::nextPage);
auto w = currentWidget();
QTimer::singleShot(0, [=]() {
setCurrentWidget(downloading_widget);
});
QString url = InputDialog::getText(tr("Enter URL"), this, tr("for Custom Software"));
if (!url.isEmpty()) {
QTimer::singleShot(1000, this, [=]() {
download(url);
});
} else {
setCurrentWidget(w);
}
});
blayout->addWidget(cont); blayout->addWidget(cont);
// setup timer for testing internet connection // setup timer for testing internet connection
@ -229,11 +216,11 @@ QWidget * Setup::network_setup() {
} }
repaint(); repaint();
}); });
request->sendRequest(TEST_URL); request->sendRequest(OPENPILOT_URL);
QTimer *timer = new QTimer(this); QTimer *timer = new QTimer(this);
QObject::connect(timer, &QTimer::timeout, [=]() { QObject::connect(timer, &QTimer::timeout, [=]() {
if (!request->active() && cont->isVisible()) { if (!request->active() && cont->isVisible()) {
request->sendRequest(TEST_URL); request->sendRequest(OPENPILOT_URL);
} }
}); });
timer->start(1000); timer->start(1000);
@ -241,6 +228,106 @@ QWidget * Setup::network_setup() {
return widget; return widget;
} }
QWidget * radio_button(QString title, QButtonGroup *group) {
QPushButton *btn = new QPushButton(title);
btn->setCheckable(true);
group->addButton(btn);
btn->setStyleSheet(R"(
QPushButton {
height: 230;
padding-left: 100px;
padding-right: 100px;
text-align: left;
font-size: 80px;
font-weight: 400;
border-radius: 10px;
background-color: #4F4F4F;
}
QPushButton:checked {
background-color: #465BEA;
}
)");
// checkmark icon
QPixmap pix(":/img_circled_check.svg");
btn->setIcon(pix);
btn->setIconSize(QSize(0, 0));
btn->setLayoutDirection(Qt::RightToLeft);
QObject::connect(btn, &QPushButton::toggled, [=](bool checked) {
btn->setIconSize(checked ? QSize(104, 104) : QSize(0, 0));
});
return btn;
}
QWidget * Setup::software_selection() {
QWidget *widget = new QWidget();
QVBoxLayout *main_layout = new QVBoxLayout(widget);
main_layout->setContentsMargins(55, 50, 55, 50);
main_layout->setSpacing(0);
// title
QLabel *title = new QLabel(tr("Choose Software to Install"));
title->setStyleSheet("font-size: 90px; font-weight: 500;");
main_layout->addWidget(title, 0, Qt::AlignLeft | Qt::AlignTop);
main_layout->addSpacing(50);
// openpilot + custom radio buttons
QButtonGroup *group = new QButtonGroup(widget);
group->setExclusive(true);
QWidget *openpilot = radio_button(tr("openpilot"), group);
main_layout->addWidget(openpilot);
main_layout->addSpacing(30);
QWidget *custom = radio_button(tr("Custom Software"), group);
main_layout->addWidget(custom);
main_layout->addStretch();
// back + continue buttons
QHBoxLayout *blayout = new QHBoxLayout;
main_layout->addLayout(blayout);
blayout->setSpacing(50);
QPushButton *back = new QPushButton(tr("Back"));
back->setObjectName("navBtn");
QObject::connect(back, &QPushButton::clicked, this, &Setup::prevPage);
blayout->addWidget(back);
QPushButton *cont = new QPushButton(tr("Continue"));
cont->setObjectName("navBtn");
cont->setEnabled(false);
cont->setProperty("primary", true);
blayout->addWidget(cont);
QObject::connect(cont, &QPushButton::clicked, [=]() {
auto w = currentWidget();
QTimer::singleShot(0, [=]() {
setCurrentWidget(downloading_widget);
});
QString url = OPENPILOT_URL;
if (group->checkedButton() != openpilot) {
url = InputDialog::getText(tr("Enter URL"), this, tr("for Custom Software"));
}
if (!url.isEmpty()) {
QTimer::singleShot(1000, this, [=]() {
download(url);
});
} else {
setCurrentWidget(w);
}
});
connect(group, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [=](QAbstractButton *btn) {
btn->setChecked(true);
cont->setEnabled(true);
});
return widget;
}
QWidget * Setup::downloading() { QWidget * Setup::downloading() {
QWidget *widget = new QWidget(); QWidget *widget = new QWidget();
QVBoxLayout *main_layout = new QVBoxLayout(widget); QVBoxLayout *main_layout = new QVBoxLayout(widget);
@ -326,6 +413,7 @@ Setup::Setup(QWidget *parent) : QStackedWidget(parent) {
addWidget(getting_started()); addWidget(getting_started());
addWidget(network_setup()); addWidget(network_setup());
addWidget(software_selection());
downloading_widget = downloading(); downloading_widget = downloading();
addWidget(downloading_widget); addWidget(downloading_widget);

@ -17,6 +17,7 @@ private:
QWidget *low_voltage(); QWidget *low_voltage();
QWidget *getting_started(); QWidget *getting_started();
QWidget *network_setup(); QWidget *network_setup();
QWidget *software_selection();
QWidget *downloading(); QWidget *downloading();
QWidget *download_failed(QLabel *url, QLabel *body); QWidget *download_failed(QLabel *url, QLabel *body);

@ -762,6 +762,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation>اختر لغة</translation> <translation>اختر لغة</translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -744,6 +744,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation>Sprache wählen</translation> <translation>Sprache wählen</translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -746,6 +746,18 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Select a language</source> <source>Select a language</source>
<translation>Choisir une langue</translation> <translation>Choisir une langue</translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -740,6 +740,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -742,6 +742,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -746,6 +746,18 @@ Isso pode levar até um minuto.</translation>
<source>Select a language</source> <source>Select a language</source>
<translation>Selecione o Idioma</translation> <translation>Selecione o Idioma</translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -742,6 +742,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -740,6 +740,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation>Dil seçin</translation> <translation>Dil seçin</translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -742,6 +742,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

@ -742,6 +742,18 @@ This may take up to a minute.</source>
<source>Select a language</source> <source>Select a language</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Choose Software to Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot</source>
<translation type="unfinished">openpilot</translation>
</message>
<message>
<source>Custom Software</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SetupWidget</name> <name>SetupWidget</name>

Loading…
Cancel
Save