mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-09-29 02:43:47 +08:00
77 lines
3.1 KiB
C++
77 lines
3.1 KiB
C++
#include "frogpilot/ui/qt/onroad/frogpilot_buttons.h"
|
|
|
|
DrivingPersonalityButton::DrivingPersonalityButton(QWidget *parent) : QPushButton(parent) {
|
|
setFixedSize(btn_size + UI_BORDER_SIZE, btn_size);
|
|
|
|
QObject::connect(frogpilotUIState(), &FrogPilotUIState::themeUpdated, this, &DrivingPersonalityButton::updateTheme);
|
|
QObject::connect(this, &QPushButton::pressed, [this] {params_memory.putBool("OnroadDistanceButtonPressed", true);});
|
|
QObject::connect(this, &QPushButton::released, [this] {params_memory.putBool("OnroadDistanceButtonPressed", false);});
|
|
}
|
|
|
|
void DrivingPersonalityButton::showEvent(QShowEvent *event) {
|
|
updateTheme();
|
|
}
|
|
|
|
void DrivingPersonalityButton::updateTheme() {
|
|
for (QMap<int, QPair<QPixmap, QSharedPointer<QMovie>>>::iterator it = icon_map.begin(); it != icon_map.end(); ++it) {
|
|
QSharedPointer<QMovie> &movie = it.value().second;
|
|
if (!movie.isNull()) {
|
|
QObject::disconnect(movie.data(), nullptr, this, nullptr);
|
|
movie->stop();
|
|
}
|
|
}
|
|
|
|
icon_map.clear();
|
|
|
|
QPixmap traffic_img, aggressive_img, standard_img, relaxed_img;
|
|
QSharedPointer<QMovie> traffic_gif, aggressive_gif, standard_gif, relaxed_gif;
|
|
|
|
loadImage("../../frogpilot/assets/active_theme/distance_icons/traffic", traffic_img, traffic_gif, QSize(btn_size, btn_size), this);
|
|
loadImage("../../frogpilot/assets/active_theme/distance_icons/aggressive", aggressive_img, aggressive_gif, QSize(btn_size, btn_size), this);
|
|
loadImage("../../frogpilot/assets/active_theme/distance_icons/standard", standard_img, standard_gif, QSize(btn_size, btn_size), this);
|
|
loadImage("../../frogpilot/assets/active_theme/distance_icons/relaxed", relaxed_img, relaxed_gif, QSize(btn_size, btn_size), this);
|
|
|
|
icon_map.insert(0, qMakePair(traffic_img, traffic_gif));
|
|
icon_map.insert(1, qMakePair(aggressive_img, aggressive_gif));
|
|
icon_map.insert(2, qMakePair(standard_img, standard_gif));
|
|
icon_map.insert(3, qMakePair(relaxed_img, relaxed_gif));
|
|
|
|
theme_updated = true;
|
|
}
|
|
|
|
void DrivingPersonalityButton::updateState(const UIState &s, const FrogPilotUIState &fs) {
|
|
const UIScene &scene = s.scene;
|
|
|
|
const SubMaster &fpsm = *(fs.sm);
|
|
|
|
const cereal::FrogPilotCarState::Reader &frogpilotCarState = fpsm["frogpilotCarState"].getFrogpilotCarState();
|
|
|
|
bool new_traffic_mode_active = frogpilotCarState.getTrafficModeEnabled();
|
|
|
|
int new_personality = static_cast<int>(scene.personality) + 1;
|
|
|
|
bool state_changed = (traffic_mode_active != new_traffic_mode_active) ||
|
|
(personality != new_personality && !new_traffic_mode_active);
|
|
|
|
if (!state_changed && !theme_updated) {
|
|
return;
|
|
}
|
|
|
|
traffic_mode_active = new_traffic_mode_active;
|
|
|
|
personality = new_personality;
|
|
|
|
theme_updated = false;
|
|
|
|
QPair<QPixmap, QSharedPointer<QMovie>> icon = icon_map.value(traffic_mode_active ? 0 : personality);
|
|
currentImg = icon.first;
|
|
currentGif = icon.second.data();
|
|
}
|
|
|
|
void DrivingPersonalityButton::paintEvent(QPaintEvent *event) {
|
|
QPainter p(this);
|
|
p.setRenderHint(QPainter::Antialiasing);
|
|
|
|
drawIcon(p, rect().center() + QPoint(UI_BORDER_SIZE / 2, 0), currentGif ? currentGif->currentPixmap() : currentImg, Qt::transparent, 1.0);
|
|
}
|