mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-25 07:52:03 +08:00
ui: new nav settings button (#29068)
* add image * remove extra spacing * add images * use nav-settings-square-smaller.png * draft * clean up * kinda works! * nop need to update state * can just use clicked * MORE * remove old button * slightly smaller (todo change image)) * this works but is ugly * remove old settings button * draft * no it's not * draft 2.0 * clean up * clean up * let's make map_settings_btn public * since we don't have map, use enabled * fix image size * can do clean up in another PR show * add line * rename * useless spacing * use old nav icon * handle DM icon (and test) * clean up * no reason * remove old image * don't use setCurrentIndex * Revert "don't use setCurrentIndex" This reverts commit 6fde765a3cd3a9ee39205614587a23fbfbc60950. * also can use a ternary * seems cleanest This reverts commit f9287230704b94f46b6bb5376d9a17075a20caf7.
This commit is contained in:
@@ -34,29 +34,6 @@ MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings),
|
||||
map_eta->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
map_eta->setFixedHeight(120);
|
||||
|
||||
// Settings button
|
||||
QSize icon_size(120, 120);
|
||||
directions_icon = loadPixmap("../assets/navigation/icon_directions_outlined.svg", icon_size);
|
||||
settings_icon = loadPixmap("../assets/navigation/icon_settings.svg", icon_size);
|
||||
|
||||
settings_btn = new QPushButton(directions_icon, "", this);
|
||||
settings_btn->setIconSize(icon_size);
|
||||
settings_btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
settings_btn->setStyleSheet(R"(
|
||||
QPushButton {
|
||||
background-color: #96000000;
|
||||
border-radius: 50px;
|
||||
padding: 24px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #D9000000;
|
||||
}
|
||||
)");
|
||||
QObject::connect(settings_btn, &QPushButton::clicked, [=]() {
|
||||
emit requestSettings(true);
|
||||
});
|
||||
|
||||
error = new QLabel(this);
|
||||
error->setStyleSheet(R"(color:white;padding:50px 11px;font-size: 90px; background-color:rgb(0, 0, 0, 150);)");
|
||||
error->setAlignment(Qt::AlignCenter);
|
||||
@@ -64,8 +41,6 @@ MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings),
|
||||
overlay_layout->addWidget(error);
|
||||
overlay_layout->addWidget(map_instructions);
|
||||
overlay_layout->addStretch(1);
|
||||
overlay_layout->addWidget(settings_btn, Qt::AlignLeft);
|
||||
overlay_layout->addSpacing(UI_BORDER_SIZE);
|
||||
overlay_layout->addWidget(map_eta);
|
||||
|
||||
auto last_gps_position = coordinate_from_param("LastGPSPosition");
|
||||
@@ -252,10 +227,6 @@ void MapWindow::updateState(const UIState &s) {
|
||||
} else {
|
||||
clearRoute();
|
||||
}
|
||||
|
||||
if (isVisible()) {
|
||||
settings_btn->setIcon(map_eta->isVisible() ? settings_icon : directions_icon);
|
||||
}
|
||||
}
|
||||
|
||||
if (sm.rcv_frame("navRoute") != route_rcv_frame) {
|
||||
|
||||
@@ -68,8 +68,6 @@ private:
|
||||
QLabel *error;
|
||||
MapInstructions* map_instructions;
|
||||
MapETA* map_eta;
|
||||
QPushButton *settings_btn;
|
||||
QPixmap directions_icon, settings_icon;
|
||||
|
||||
// Blue with normal nav, green when nav is input into the model
|
||||
QColor getNavPathColor(bool nav_enabled) {
|
||||
|
||||
@@ -33,3 +33,11 @@ MapPanel::MapPanel(const QMapboxGLSettings &mapboxSettings, QWidget *parent) : Q
|
||||
});
|
||||
content_stack->addWidget(settings);
|
||||
}
|
||||
|
||||
void MapPanel::toggleMapSettings() {
|
||||
// show settings if not visible, then toggle between map and settings
|
||||
int new_index = isVisible() ? (1 - content_stack->currentIndex()) : 1;
|
||||
content_stack->setCurrentIndex(new_index);
|
||||
emit mapPanelRequested();
|
||||
show();
|
||||
}
|
||||
|
||||
@@ -13,6 +13,9 @@ public:
|
||||
signals:
|
||||
void mapPanelRequested();
|
||||
|
||||
public slots:
|
||||
void toggleMapSettings();
|
||||
|
||||
private:
|
||||
QStackedLayout *content_stack;
|
||||
};
|
||||
|
||||
@@ -92,6 +92,8 @@ void OnroadWindow::offroadTransition(bool offroad) {
|
||||
map = m;
|
||||
|
||||
QObject::connect(m, &MapPanel::mapPanelRequested, this, &OnroadWindow::mapPanelRequested);
|
||||
QObject::connect(nvg->map_settings_btn, &MapSettingsButton::clicked, m, &MapPanel::toggleMapSettings);
|
||||
nvg->map_settings_btn->setEnabled(true);
|
||||
|
||||
m->setFixedWidth(topWidget(this)->width() / 2 - UI_BORDER_SIZE);
|
||||
split->insertWidget(0, m);
|
||||
@@ -221,17 +223,45 @@ void ExperimentalButton::paintEvent(QPaintEvent *event) {
|
||||
}
|
||||
|
||||
|
||||
// MapSettingsButton
|
||||
MapSettingsButton::MapSettingsButton(QWidget *parent) : QPushButton(parent) {
|
||||
setFixedSize(btn_size, btn_size);
|
||||
settings_img = loadPixmap("../assets/navigation/icon_directions_outlined.svg", {img_size, img_size});
|
||||
|
||||
// hidden by default, made visible if map is created (has prime or mapbox token)
|
||||
setVisible(false);
|
||||
setEnabled(false);
|
||||
}
|
||||
|
||||
void MapSettingsButton::paintEvent(QPaintEvent *event) {
|
||||
QPainter p(this);
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
QPoint center(btn_size / 2, btn_size / 2);
|
||||
|
||||
p.setOpacity(1.0);
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setBrush(QColor(0, 0, 0, 166));
|
||||
p.drawEllipse(center, btn_size / 2, btn_size / 2);
|
||||
p.setOpacity(isDown() ? 0.6 : 1.0);
|
||||
p.drawPixmap((btn_size - img_size) / 2, (btn_size - img_size) / 2, settings_img);
|
||||
}
|
||||
|
||||
|
||||
// Window that shows camera view and variety of info drawn on top
|
||||
AnnotatedCameraWidget::AnnotatedCameraWidget(VisionStreamType type, QWidget* parent) : fps_filter(UI_FREQ, 3, 1. / UI_FREQ), CameraWidget("camerad", type, true, parent) {
|
||||
pm = std::make_unique<PubMaster, const std::initializer_list<const char *>>({"uiDebug"});
|
||||
|
||||
QVBoxLayout *main_layout = new QVBoxLayout(this);
|
||||
main_layout = new QVBoxLayout(this);
|
||||
main_layout->setMargin(UI_BORDER_SIZE);
|
||||
main_layout->setSpacing(0);
|
||||
|
||||
experimental_btn = new ExperimentalButton(this);
|
||||
main_layout->addWidget(experimental_btn, 0, Qt::AlignTop | Qt::AlignRight);
|
||||
|
||||
map_settings_btn = new MapSettingsButton(this);
|
||||
main_layout->addWidget(map_settings_btn, 0, Qt::AlignBottom | Qt::AlignRight);
|
||||
|
||||
dm_img = loadPixmap("../assets/img_driver_face.png", {img_size + 5, img_size + 5});
|
||||
}
|
||||
|
||||
@@ -276,7 +306,7 @@ void AnnotatedCameraWidget::updateState(const UIState &s) {
|
||||
setProperty("speed", cur_speed);
|
||||
setProperty("setSpeed", set_speed);
|
||||
setProperty("speedUnit", s.scene.is_metric ? tr("km/h") : tr("mph"));
|
||||
setProperty("hideDM", (cs.getAlertSize() != cereal::ControlsState::AlertSize::NONE));
|
||||
setProperty("hideBottomIcons", (cs.getAlertSize() != cereal::ControlsState::AlertSize::NONE));
|
||||
setProperty("status", s.status);
|
||||
|
||||
// update engageability/experimental mode button
|
||||
@@ -288,6 +318,12 @@ void AnnotatedCameraWidget::updateState(const UIState &s) {
|
||||
setProperty("rightHandDM", dm_state.getIsRHD());
|
||||
// DM icon transition
|
||||
dm_fade_state = std::clamp(dm_fade_state+0.2*(0.5-dmActive), 0.0, 1.0);
|
||||
|
||||
// hide map settings button for alerts and flip for right hand DM
|
||||
if (map_settings_btn->isEnabled()) {
|
||||
map_settings_btn->setVisible(!hideBottomIcons);
|
||||
main_layout->setAlignment(map_settings_btn, (rightHandDM ? Qt::AlignLeft : Qt::AlignRight) | Qt::AlignBottom);
|
||||
}
|
||||
}
|
||||
|
||||
void AnnotatedCameraWidget::drawHud(QPainter &p) {
|
||||
@@ -648,7 +684,7 @@ void AnnotatedCameraWidget::paintGL() {
|
||||
}
|
||||
|
||||
// DMoji
|
||||
if (!hideDM && (sm.rcv_frame("driverStateV2") > s->scene.started_frame)) {
|
||||
if (!hideBottomIcons && (sm.rcv_frame("driverStateV2") > s->scene.started_frame)) {
|
||||
update_dmonitoring(s, sm["driverStateV2"].getDriverStateV2(), dm_fade_state, rightHandDM);
|
||||
drawDriverState(painter, s);
|
||||
}
|
||||
|
||||
@@ -47,6 +47,19 @@ private:
|
||||
bool engageable;
|
||||
};
|
||||
|
||||
|
||||
class MapSettingsButton : public QPushButton {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MapSettingsButton(QWidget *parent = 0);
|
||||
|
||||
private:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
|
||||
QPixmap settings_img;
|
||||
};
|
||||
|
||||
// container window for the NVG UI
|
||||
class AnnotatedCameraWidget : public CameraWidget {
|
||||
Q_OBJECT
|
||||
@@ -60,7 +73,7 @@ class AnnotatedCameraWidget : public CameraWidget {
|
||||
Q_PROPERTY(bool is_metric MEMBER is_metric);
|
||||
|
||||
Q_PROPERTY(bool dmActive MEMBER dmActive);
|
||||
Q_PROPERTY(bool hideDM MEMBER hideDM);
|
||||
Q_PROPERTY(bool hideBottomIcons MEMBER hideBottomIcons);
|
||||
Q_PROPERTY(bool rightHandDM MEMBER rightHandDM);
|
||||
Q_PROPERTY(int status MEMBER status);
|
||||
|
||||
@@ -68,10 +81,13 @@ public:
|
||||
explicit AnnotatedCameraWidget(VisionStreamType type, QWidget* parent = 0);
|
||||
void updateState(const UIState &s);
|
||||
|
||||
MapSettingsButton *map_settings_btn;
|
||||
|
||||
private:
|
||||
void drawIcon(QPainter &p, int x, int y, QPixmap &img, QBrush bg, float opacity);
|
||||
void drawText(QPainter &p, int x, int y, const QString &text, int alpha = 255);
|
||||
|
||||
QVBoxLayout *main_layout;
|
||||
ExperimentalButton *experimental_btn;
|
||||
QPixmap dm_img;
|
||||
float speed;
|
||||
@@ -81,7 +97,7 @@ private:
|
||||
bool is_cruise_set = false;
|
||||
bool is_metric = false;
|
||||
bool dmActive = false;
|
||||
bool hideDM = false;
|
||||
bool hideBottomIcons = false;
|
||||
bool rightHandDM = false;
|
||||
float dm_fade_state = 1.0;
|
||||
bool has_us_speed_limit = false;
|
||||
|
||||
Reference in New Issue
Block a user