mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-06-25 20:42:10 +08:00
ListWidget - ListWidgetSP
This commit is contained in:
@@ -13,7 +13,11 @@
|
||||
|
||||
#include "selfdrive/ui/ui.h"
|
||||
#include "selfdrive/ui/qt/util.h"
|
||||
#ifdef SUNNYPILOT
|
||||
#include "selfdrive/ui/sunnypilot/qt/widgets/sp_priv_controls.h"
|
||||
#else
|
||||
#include "selfdrive/ui/qt/widgets/controls.h"
|
||||
#endif
|
||||
|
||||
#ifdef SUNNYPILOT
|
||||
#include "selfdrive/ui/sunnypilot/qt/widgets/sp_priv_controls.h"
|
||||
|
||||
@@ -281,7 +281,7 @@ private:
|
||||
class ListWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ListWidget(QWidget *parent = 0, const bool split_line = true) : QWidget(parent), _split_line(split_line), outer_layout(this) {
|
||||
explicit ListWidget(QWidget *parent = 0) : QWidget(parent), outer_layout(this) {
|
||||
outer_layout.setMargin(0);
|
||||
outer_layout.setSpacing(0);
|
||||
outer_layout.addLayout(&inner_layout);
|
||||
@@ -293,22 +293,11 @@ class ListWidget : public QWidget {
|
||||
inline void addItem(QLayout *layout) { inner_layout.addLayout(layout); }
|
||||
inline void setSpacing(int spacing) { inner_layout.setSpacing(spacing); }
|
||||
|
||||
inline void AddWidgetAt(const int index, QWidget *new_widget) { inner_layout.insertWidget(index, new_widget); }
|
||||
inline void RemoveWidgetAt(const int index) {
|
||||
if (QLayoutItem* item; (item = inner_layout.takeAt(index)) != nullptr) {
|
||||
if(item->widget()) delete item->widget();
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
inline void ReplaceOrAddWidget(QWidget *old_widget, QWidget *new_widget) {
|
||||
if (const int index = inner_layout.indexOf(old_widget); index != -1) {
|
||||
RemoveWidgetAt(index);
|
||||
AddWidgetAt(index, new_widget);
|
||||
} else {
|
||||
addItem(new_widget);
|
||||
}
|
||||
}
|
||||
#ifdef SUNNYPILOT
|
||||
LIST_WIDGET_FUNCTION_1
|
||||
LIST_WIDGET_FUNCTION_2
|
||||
LIST_WIDGET_FUCNTION_3
|
||||
#endif
|
||||
|
||||
private:
|
||||
void paintEvent(QPaintEvent *) override {
|
||||
@@ -316,7 +305,7 @@ private:
|
||||
p.setPen(Qt::gray);
|
||||
for (int i = 0; i < inner_layout.count() - 1; ++i) {
|
||||
QWidget *widget = inner_layout.itemAt(i)->widget();
|
||||
if ((widget == nullptr || widget->isVisible()) && _split_line) {
|
||||
if (widget == nullptr || widget->isVisible()) {
|
||||
QRect r = inner_layout.itemAt(i)->geometry();
|
||||
int bottom = r.bottom() + inner_layout.spacing() / 2;
|
||||
p.drawLine(r.left() + 40, bottom, r.right() - 40, bottom);
|
||||
@@ -324,9 +313,11 @@ private:
|
||||
}
|
||||
}
|
||||
QVBoxLayout outer_layout;
|
||||
QVBoxLayout inner_layout;
|
||||
|
||||
bool _split_line;
|
||||
#ifdef SUNNYPILOT
|
||||
protected:
|
||||
#endif
|
||||
QVBoxLayout inner_layout;
|
||||
};
|
||||
|
||||
// convenience class for wrapping layouts
|
||||
|
||||
@@ -10,7 +10,7 @@ CustomOffsetsSettings::CustomOffsetsSettings(QWidget* parent) : QWidget(parent)
|
||||
connect(back, &QPushButton::clicked, [=]() { emit backPress(); });
|
||||
main_layout->addWidget(back, 0, Qt::AlignLeft);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
|
||||
// Controls: Camera Offset (cm)
|
||||
camera_offset = new CameraOffset();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "selfdrive/ui/sunnypilot/qt/offroad/display_settings.h"
|
||||
|
||||
DisplayPanel::DisplayPanel(QWidget *parent) : ListWidget(parent, false) {
|
||||
DisplayPanel::DisplayPanel(QWidget *parent) : ListWidgetSP(parent, false) {
|
||||
// param, title, desc, icon
|
||||
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
|
||||
@@ -50,7 +50,7 @@ private:
|
||||
Params params;
|
||||
};
|
||||
|
||||
class DisplayPanel : public ListWidget {
|
||||
class DisplayPanel : public ListWidgetSP {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
@@ -10,7 +10,7 @@ LaneChangeSettings::LaneChangeSettings(QWidget* parent) : QWidget(parent) {
|
||||
connect(back, &QPushButton::clicked, [=]() { emit backPress(); });
|
||||
main_layout->addWidget(back, 0, Qt::AlignLeft);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
// param, title, desc, icon
|
||||
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ MadsSettings::MadsSettings(QWidget* parent) : QWidget(parent) {
|
||||
connect(back, &QPushButton::clicked, [=]() { emit backPress(); });
|
||||
main_layout->addWidget(back, 0, Qt::AlignLeft);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
// param, title, desc, icon
|
||||
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
MonitoringPanel::MonitoringPanel(QWidget *parent) : QFrame(parent) {
|
||||
main_layout = new QStackedLayout(this);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
// param, title, desc, icon
|
||||
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
OsmPanel::OsmPanel(QWidget *parent) : QFrame(parent) {
|
||||
main_layout = new QStackedLayout(this);
|
||||
|
||||
const auto list = new ListWidget(this, false);
|
||||
const auto list = new ListWidgetSP(this, false);
|
||||
list->addItem(mapdVersion = new LabelControl(tr("Mapd Version"), "Loading..."));
|
||||
list->addItem(setupOsmDeleteMapsButton(parent));
|
||||
list->addItem(offlineMapsETA = new LabelControl(tr("Offline Maps ETA"), ""));
|
||||
|
||||
@@ -10,7 +10,7 @@ SlcSettings::SlcSettings(QWidget* parent) : QWidget(parent) {
|
||||
connect(back, &QPushButton::clicked, [=]() { emit backPress(); });
|
||||
main_layout->addWidget(back, 0, Qt::AlignLeft);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
|
||||
std::vector<QString> speed_limit_engage_texts{tr("Auto"), tr("User Confirm")};
|
||||
speed_limit_engage_settings = new ButtonParamControlSP(
|
||||
|
||||
@@ -10,7 +10,7 @@ SpeedLimitPolicySettings::SpeedLimitPolicySettings(QWidget* parent) : QWidget(pa
|
||||
connect(back, &QPushButton::clicked, [=]() { emit backPress(); });
|
||||
main_layout->addWidget(back, 0, Qt::AlignLeft);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
|
||||
speed_limit_policy = new ButtonParamControlSP(
|
||||
"SpeedLimitControlPolicy",
|
||||
|
||||
@@ -10,7 +10,7 @@ SpeedLimitWarningSettings::SpeedLimitWarningSettings(QWidget* parent) : QWidget(
|
||||
connect(back, &QPushButton::clicked, [=]() { emit backPress(); });
|
||||
main_layout->addWidget(back, 0, Qt::AlignLeft);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
|
||||
std::vector<QString> speed_limit_warning_texts{tr("Off"), tr("Display"), tr("Chime")};
|
||||
speed_limit_warning_settings = new ButtonParamControlSP(
|
||||
|
||||
@@ -16,7 +16,7 @@ SunnylinkPanel::SunnylinkPanel(QWidget* parent) : QFrame(parent) {
|
||||
connect(uiState(), &UIState::sunnylinkRolesChanged, this, &SunnylinkPanel::updateLabels);
|
||||
connect(uiState(), &UIState::sunnylinkDeviceUsersChanged, this, &SunnylinkPanel::updateLabels);
|
||||
|
||||
auto list = new ListWidget(this, false);
|
||||
auto list = new ListWidgetSP(this, false);
|
||||
sunnylinkEnabledBtn = new ParamControlSP(
|
||||
"SunnylinkEnabled",
|
||||
tr("Enable sunnylink"),
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
SunnypilotPanel::SunnypilotPanel(QWidget *parent) : QFrame(parent) {
|
||||
main_layout = new QStackedLayout(this);
|
||||
|
||||
ListWidget *list = new ListWidget(this, false);
|
||||
ListWidgetSP *list = new ListWidgetSP(this, false);
|
||||
// param, title, desc, icon
|
||||
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
|
||||
@@ -67,7 +67,7 @@ void VehiclePanel::updateToggles() {
|
||||
setCarBtn->setText(((set == "=== Not Selected ===") || (set.length() == 0)) ? prompt_select : set);
|
||||
}
|
||||
|
||||
SPVehiclesTogglesPanel::SPVehiclesTogglesPanel(VehiclePanel *parent) : ListWidget(parent, false) {
|
||||
SPVehiclesTogglesPanel::SPVehiclesTogglesPanel(VehiclePanel *parent) : ListWidgetSP(parent, false) {
|
||||
setSpacing(50);
|
||||
|
||||
// Hyundai/Kia/Genesis
|
||||
|
||||
@@ -31,7 +31,7 @@ private:
|
||||
QString prompt_select = tr("Select your car");
|
||||
};
|
||||
|
||||
class SPVehiclesTogglesPanel : public ListWidget {
|
||||
class SPVehiclesTogglesPanel : public ListWidgetSP {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SPVehiclesTogglesPanel(VehiclePanel *parent);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "selfdrive/ui/sunnypilot/qt/offroad/visuals_settings.h"
|
||||
|
||||
VisualsPanel::VisualsPanel(QWidget *parent) : ListWidget(parent) {
|
||||
VisualsPanel::VisualsPanel(QWidget *parent) : ListWidgetSP(parent) {
|
||||
// param, title, desc, icon
|
||||
std::vector<std::tuple<QString, QString, QString, QString>> toggle_defs{
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "selfdrive/ui/ui.h"
|
||||
#include "selfdrive/ui/sunnypilot/qt/widgets/sp_priv_controls.h"
|
||||
|
||||
class VisualsPanel : public ListWidget {
|
||||
class VisualsPanel : public ListWidgetSP {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
@@ -22,3 +22,25 @@
|
||||
|
||||
#define BUTTON_CONTROL_FUNCTION_1 \
|
||||
inline void click() { btn.click(); } \
|
||||
|
||||
// ListWidget
|
||||
#define LIST_WIDGET_FUNCTION_1 \
|
||||
inline void AddWidgetAt(const int index, QWidget *new_widget) { inner_layout.insertWidget(index, new_widget); } \
|
||||
|
||||
#define LIST_WIDGET_FUNCTION_2 \
|
||||
inline void RemoveWidgetAt(const int index) { \
|
||||
if (QLayoutItem* item; (item = inner_layout.takeAt(index)) != nullptr) { \
|
||||
if(item->widget()) delete item->widget(); \
|
||||
delete item; \
|
||||
} \
|
||||
} \
|
||||
|
||||
#define LIST_WIDGET_FUCNTION_3 \
|
||||
inline void ReplaceOrAddWidget(QWidget *old_widget, QWidget *new_widget) { \
|
||||
if (const int index = inner_layout.indexOf(old_widget); index != -1) { \
|
||||
RemoveWidgetAt(index); \
|
||||
AddWidgetAt(index, new_widget); \
|
||||
} else { \
|
||||
addItem(new_widget); \
|
||||
} \
|
||||
} \
|
||||
|
||||
@@ -183,6 +183,30 @@ private:
|
||||
bool button_group_enabled = true;
|
||||
};
|
||||
|
||||
class ListWidgetSP : public ListWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ListWidgetSP(QWidget *parent = 0, const bool split_line = true) : ListWidget(parent), _split_line(split_line) {
|
||||
}
|
||||
|
||||
private:
|
||||
void paintEvent(QPaintEvent *) override {
|
||||
QPainter p(this);
|
||||
p.setPen(Qt::gray);
|
||||
for (int i = 0; i < inner_layout.count() - 1; ++i) {
|
||||
QWidget *widget = inner_layout.itemAt(i)->widget();
|
||||
if ((widget == nullptr || widget->isVisible()) && _split_line) {
|
||||
QRect r = inner_layout.itemAt(i)->geometry();
|
||||
int bottom = r.bottom() + inner_layout.spacing() / 2;
|
||||
p.drawLine(r.left() + 40, bottom, r.right() - 40, bottom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool _split_line = false;
|
||||
};
|
||||
|
||||
class OptionControlSP : public AbstractControlSP {
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
Reference in New Issue
Block a user