diff --git a/selfdrive/ui/qt/offroad/developer_panel.cc b/selfdrive/ui/qt/offroad/developer_panel.cc
index 3e9647d2c..fbfb16294 100644
--- a/selfdrive/ui/qt/offroad/developer_panel.cc
+++ b/selfdrive/ui/qt/offroad/developer_panel.cc
@@ -45,17 +45,6 @@ DeveloperPanel::DeveloperPanel(SettingsWindow *parent) : ListWidget(parent) {
});
addItem(experimentalLongitudinalToggle);
- enableGithubRunner = new ParamControl("EnableGithubRunner", tr("Enable GitHub runner service"), tr("Enables or disables the github runner service."), "");
- addItem(enableGithubRunner);
-
- // error log button
- errorLogBtn = new ButtonControl(tr("Error Log"), tr("VIEW"), tr("View the error log for sunnypilot crashes."));
- connect(errorLogBtn, &ButtonControl::clicked, [=]() {
- std::string txt = util::read_file("/data/community/crashes/error.log");
- ConfirmationDialog::rich(QString::fromStdString(txt), this);
- });
- addItem(errorLogBtn);
-
// Joystick and longitudinal maneuvers should be hidden on release branches
is_release = params.getBool("IsReleaseBranch");
@@ -104,8 +93,6 @@ void DeveloperPanel::updateToggles(bool _offroad) {
experimentalLongitudinalToggle->refresh();
// Handle specific controls visibility for release branches
- enableGithubRunner->setVisible(!is_release);
- errorLogBtn->setVisible(!is_release);
joystickToggle->setVisible(!is_release);
offroad = _offroad;
diff --git a/selfdrive/ui/qt/offroad/developer_panel.h b/selfdrive/ui/qt/offroad/developer_panel.h
index c15b574f5..51b1b0b6f 100644
--- a/selfdrive/ui/qt/offroad/developer_panel.h
+++ b/selfdrive/ui/qt/offroad/developer_panel.h
@@ -16,10 +16,8 @@ private:
Params params;
ParamControl* adbToggle;
ParamControl* joystickToggle;
- ButtonControl* errorLogBtn;
ParamControl* longManeuverToggle;
ParamControl* experimentalLongitudinalToggle;
- ParamControl* enableGithubRunner;
bool is_release;
bool offroad = false;
diff --git a/selfdrive/ui/sunnypilot/SConscript b/selfdrive/ui/sunnypilot/SConscript
index 41cc09141..810338aae 100644
--- a/selfdrive/ui/sunnypilot/SConscript
+++ b/selfdrive/ui/sunnypilot/SConscript
@@ -21,6 +21,7 @@ qt_src = [
"sunnypilot/qt/home.cc",
"sunnypilot/qt/offroad/exit_offroad_button.cc",
"sunnypilot/qt/offroad/offroad_home.cc",
+ "sunnypilot/qt/offroad/settings/developer_panel.cc",
"sunnypilot/qt/offroad/settings/device_panel.cc",
"sunnypilot/qt/offroad/settings/lateral_panel.cc",
"sunnypilot/qt/offroad/settings/longitudinal_panel.cc",
diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.cc
new file mode 100644
index 000000000..a11a6cdbe
--- /dev/null
+++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.cc
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
+ *
+ * This file is part of sunnypilot and is licensed under the MIT License.
+ * See the LICENSE.md file in the root directory for more details.
+ */
+#include "selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.h"
+
+DeveloperPanelSP::DeveloperPanelSP(SettingsWindow *parent) : DeveloperPanel(parent) {
+ // Github Runner Toggle
+ enableGithubRunner = new ParamControlSP("EnableGithubRunner", tr("Enable GitHub runner service"), tr("Enables or disables the github runner service."), "");
+ addItem(enableGithubRunner);
+
+ // Error log button
+ errorLogBtn = new ButtonControlSP(tr("Error Log"), tr("VIEW"), tr("View the error log for sunnypilot crashes."));
+ connect(errorLogBtn, &ButtonControlSP::clicked, [=]() {
+ QFileInfo file("/data/community/crashes/error.log");
+ QString text;
+ if (file.exists()) {
+ text = "" + file.lastModified().toString("dd-MMM-yyyy hh:mm:ss ").toUpper() + "
";
+ }
+ text += QString::fromStdString(util::read_file("/data/community/crashes/error.log"));
+ ConfirmationDialog::rich(text, this);
+ });
+ addItem(errorLogBtn);
+
+ QObject::connect(uiState(), &UIState::offroadTransition, this, &DeveloperPanelSP::updateToggles);
+}
+
+void DeveloperPanelSP::updateToggles(bool offroad) {
+ bool is_release = params.getBool("IsReleaseBranch");
+
+ enableGithubRunner->setVisible(!is_release);
+ errorLogBtn->setVisible(!is_release);
+}
+
+void DeveloperPanelSP::showEvent(QShowEvent *event) {
+ DeveloperPanel::showEvent(event);
+ updateToggles(!uiState()->scene.started);
+}
diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.h
new file mode 100644
index 000000000..ba707b64d
--- /dev/null
+++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.h
@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
+ *
+ * This file is part of sunnypilot and is licensed under the MIT License.
+ * See the LICENSE.md file in the root directory for more details.
+ */
+#pragma once
+
+#include
+
+#include "selfdrive/ui/qt/offroad/developer_panel.h"
+
+class DeveloperPanelSP : public DeveloperPanel {
+ Q_OBJECT
+public:
+ explicit DeveloperPanelSP(SettingsWindow *parent);
+
+private:
+ ParamControlSP *enableGithubRunner;
+ ButtonControlSP *errorLogBtn;
+ Params params;
+
+private slots:
+ void updateToggles(bool offroad);
+
+protected:
+ void showEvent(QShowEvent *event) override;
+};
diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/settings.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/settings.cc
index 05ea5ff89..5415e75ea 100644
--- a/selfdrive/ui/sunnypilot/qt/offroad/settings/settings.cc
+++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/settings.cc
@@ -8,10 +8,10 @@
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/settings.h"
#include "selfdrive/ui/sunnypilot/qt/widgets/scrollview.h"
-#include "selfdrive/ui/qt/offroad/developer_panel.h"
#include "selfdrive/ui/qt/offroad/firehose.h"
#include "selfdrive/ui/sunnypilot/qt/network/networking.h"
+#include "selfdrive/ui/sunnypilot/qt/offroad/settings/developer_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/device_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/models_panel.h"
#include "selfdrive/ui/sunnypilot/qt/offroad/settings/software_panel.h"
@@ -91,7 +91,7 @@ SettingsWindowSP::SettingsWindowSP(QWidget *parent) : SettingsWindow(parent) {
PanelInfo(" " + tr("Trips"), new TripsPanel(this), "../../sunnypilot/selfdrive/assets/offroad/icon_trips.png"),
PanelInfo(" " + tr("Vehicle"), new VehiclePanel(this), "../../sunnypilot/selfdrive/assets/offroad/icon_vehicle.png"),
PanelInfo(" " + tr("Firehose"), new FirehosePanel(this), "../../sunnypilot/selfdrive/assets/offroad/icon_firehose.svg"),
- PanelInfo(" " + tr("Developer"), new DeveloperPanel(this), "../assets/icons/shell.png"),
+ PanelInfo(" " + tr("Developer"), new DeveloperPanelSP(this), "../assets/icons/shell.png"),
};
nav_btns = new QButtonGroup(this);