mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-02 03:52:11 +08:00
DevicePanel: split long constructor into multiple functions (#23043)
* begin refactor * split long constructor to multiple functions * one connection to signal * merge master old-commit-hash: 5394fe1ae799e38d5c5433a2e530d5be84ee7e99
This commit is contained in:
@@ -109,72 +109,53 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
}
|
||||
}
|
||||
|
||||
DevicePanel::DevicePanel(QWidget* parent) : ListWidget(parent) {
|
||||
setSpacing(50);
|
||||
DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
Params params = Params();
|
||||
|
||||
setSpacing(50);
|
||||
addItem(new LabelControl("Dongle ID", getDongleId().value_or("N/A")));
|
||||
addItem(new LabelControl("Serial", params.get("HardwareSerial").c_str()));
|
||||
|
||||
// offroad-only buttons
|
||||
|
||||
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)");
|
||||
connect(dcamBtn, &ButtonControl::clicked, [=]() { emit showDriverView(); });
|
||||
addItem(dcamBtn);
|
||||
|
||||
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.";
|
||||
auto resetCalibBtn = new ButtonControl("Reset Calibration", "RESET", resetCalibDesc);
|
||||
auto resetCalibBtn = new ButtonControl("Reset Calibration", "RESET", " ");
|
||||
connect(resetCalibBtn, &ButtonControl::showDescription, this, &DevicePanel::updateCalibDescription);
|
||||
connect(resetCalibBtn, &ButtonControl::clicked, [&]() {
|
||||
if (ConfirmationDialog::confirm("Are you sure you want to reset calibration?", this)) {
|
||||
params.remove("CalibrationParams");
|
||||
}
|
||||
});
|
||||
connect(resetCalibBtn, &ButtonControl::showDescription, [&]() {
|
||||
QString desc = resetCalibDesc;
|
||||
std::string calib_bytes = params.get("CalibrationParams");
|
||||
if (!calib_bytes.empty()) {
|
||||
try {
|
||||
AlignedBuffer aligned_buf;
|
||||
capnp::FlatArrayMessageReader cmsg(aligned_buf.align(calib_bytes.data(), calib_bytes.size()));
|
||||
auto calib = cmsg.getRoot<cereal::Event>().getLiveCalibration();
|
||||
if (calib.getCalStatus() != 0) {
|
||||
double pitch = calib.getRpyCalib()[1] * (180 / M_PI);
|
||||
double yaw = calib.getRpyCalib()[2] * (180 / M_PI);
|
||||
desc += QString(" Your device is pointed %1° %2 and %3° %4.")
|
||||
.arg(QString::number(std::abs(pitch), 'g', 1), pitch > 0 ? "up" : "down",
|
||||
QString::number(std::abs(yaw), 'g', 1), yaw > 0 ? "right" : "left");
|
||||
}
|
||||
} catch (kj::Exception) {
|
||||
qInfo() << "invalid CalibrationParams";
|
||||
}
|
||||
}
|
||||
resetCalibBtn->setDescription(desc);
|
||||
});
|
||||
addItem(resetCalibBtn);
|
||||
|
||||
ButtonControl *retrainingBtn = nullptr;
|
||||
if (!params.getBool("Passive")) {
|
||||
retrainingBtn = new ButtonControl("Review Training Guide", "REVIEW", "Review the rules, features, and limitations of openpilot");
|
||||
auto retrainingBtn = new ButtonControl("Review Training Guide", "REVIEW", "Review the rules, features, and limitations of openpilot");
|
||||
connect(retrainingBtn, &ButtonControl::clicked, [=]() {
|
||||
if (ConfirmationDialog::confirm("Are you sure you want to review the training guide?", this)) {
|
||||
emit reviewTrainingGuide();
|
||||
}
|
||||
});
|
||||
addItem(retrainingBtn);
|
||||
}
|
||||
|
||||
ButtonControl *regulatoryBtn = nullptr;
|
||||
if (Hardware::TICI()) {
|
||||
regulatoryBtn = new ButtonControl("Regulatory", "VIEW", "");
|
||||
auto regulatoryBtn = new ButtonControl("Regulatory", "VIEW", "");
|
||||
connect(regulatoryBtn, &ButtonControl::clicked, [=]() {
|
||||
const std::string txt = util::read_file("../assets/offroad/fcc.html");
|
||||
RichTextDialog::alert(QString::fromStdString(txt), this);
|
||||
});
|
||||
addItem(regulatoryBtn);
|
||||
}
|
||||
|
||||
for (auto btn : {dcamBtn, resetCalibBtn, retrainingBtn, regulatoryBtn}) {
|
||||
if (btn) {
|
||||
connect(parent, SIGNAL(offroadTransition(bool)), btn, SLOT(setEnabled(bool)));
|
||||
addItem(btn);
|
||||
QObject::connect(parent, &SettingsWindow::offroadTransition, [=](bool offroad) {
|
||||
for (auto btn : findChildren<ButtonControl *>()) {
|
||||
btn->setEnabled(offroad);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// power buttons
|
||||
QHBoxLayout *power_layout = new QHBoxLayout();
|
||||
@@ -183,34 +164,12 @@ DevicePanel::DevicePanel(QWidget* parent) : ListWidget(parent) {
|
||||
QPushButton *reboot_btn = new QPushButton("Reboot");
|
||||
reboot_btn->setObjectName("reboot_btn");
|
||||
power_layout->addWidget(reboot_btn);
|
||||
QObject::connect(reboot_btn, &QPushButton::clicked, [&]() {
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
if (ConfirmationDialog::confirm("Are you sure you want to reboot?", this)) {
|
||||
// Check engaged again in case it changed while the dialog was open
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
params.putBool("DoReboot", true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ConfirmationDialog::alert("Disengage to Reboot", this);
|
||||
}
|
||||
});
|
||||
QObject::connect(reboot_btn, &QPushButton::clicked, this, &DevicePanel::reboot);
|
||||
|
||||
QPushButton *poweroff_btn = new QPushButton("Power Off");
|
||||
poweroff_btn->setObjectName("poweroff_btn");
|
||||
power_layout->addWidget(poweroff_btn);
|
||||
QObject::connect(poweroff_btn, &QPushButton::clicked, [&]() {
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
if (ConfirmationDialog::confirm("Are you sure you want to power off?", this)) {
|
||||
// Check engaged again in case it changed while the dialog was open
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
params.putBool("DoShutdown", true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ConfirmationDialog::alert("Disengage to Power Off", this);
|
||||
}
|
||||
});
|
||||
QObject::connect(poweroff_btn, &QPushButton::clicked, this, &DevicePanel::poweroff);
|
||||
|
||||
setStyleSheet(R"(
|
||||
QPushButton {
|
||||
@@ -225,6 +184,56 @@ DevicePanel::DevicePanel(QWidget* parent) : ListWidget(parent) {
|
||||
addItem(power_layout);
|
||||
}
|
||||
|
||||
void DevicePanel::updateCalibDescription() {
|
||||
QString desc =
|
||||
"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.";
|
||||
std::string calib_bytes = Params().get("CalibrationParams");
|
||||
if (!calib_bytes.empty()) {
|
||||
try {
|
||||
AlignedBuffer aligned_buf;
|
||||
capnp::FlatArrayMessageReader cmsg(aligned_buf.align(calib_bytes.data(), calib_bytes.size()));
|
||||
auto calib = cmsg.getRoot<cereal::Event>().getLiveCalibration();
|
||||
if (calib.getCalStatus() != 0) {
|
||||
double pitch = calib.getRpyCalib()[1] * (180 / M_PI);
|
||||
double yaw = calib.getRpyCalib()[2] * (180 / M_PI);
|
||||
desc += QString(" Your device is pointed %1° %2 and %3° %4.")
|
||||
.arg(QString::number(std::abs(pitch), 'g', 1), pitch > 0 ? "up" : "down",
|
||||
QString::number(std::abs(yaw), 'g', 1), yaw > 0 ? "right" : "left");
|
||||
}
|
||||
} catch (kj::Exception) {
|
||||
qInfo() << "invalid CalibrationParams";
|
||||
}
|
||||
}
|
||||
qobject_cast<ButtonControl *>(sender())->setDescription(desc);
|
||||
}
|
||||
|
||||
void DevicePanel::reboot() {
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
if (ConfirmationDialog::confirm("Are you sure you want to reboot?", this)) {
|
||||
// Check engaged again in case it changed while the dialog was open
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
Params().putBool("DoReboot", true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ConfirmationDialog::alert("Disengage to Reboot", this);
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePanel::poweroff() {
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
if (ConfirmationDialog::confirm("Are you sure you want to power off?", this)) {
|
||||
// Check engaged again in case it changed while the dialog was open
|
||||
if (QUIState::ui_state.status == UIStatus::STATUS_DISENGAGED) {
|
||||
Params().putBool("DoShutdown", true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ConfirmationDialog::alert("Disengage to Power Off", this);
|
||||
}
|
||||
}
|
||||
|
||||
SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) {
|
||||
gitBranchLbl = new LabelControl("Git Branch");
|
||||
gitCommitLbl = new LabelControl("Git Commit");
|
||||
|
||||
@@ -38,10 +38,15 @@ private:
|
||||
class DevicePanel : public ListWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DevicePanel(QWidget* parent = nullptr);
|
||||
explicit DevicePanel(SettingsWindow *parent);
|
||||
signals:
|
||||
void reviewTrainingGuide();
|
||||
void showDriverView();
|
||||
|
||||
private slots:
|
||||
void poweroff();
|
||||
void reboot();
|
||||
void updateCalibDescription();
|
||||
};
|
||||
|
||||
class TogglesPanel : public ListWidget {
|
||||
|
||||
Reference in New Issue
Block a user