|
|
|
@ -25,14 +25,20 @@ const QString ICON_SUFFIX = ".png"; |
|
|
|
|
MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings), velocity_filter(0, 10, 0.05) { |
|
|
|
|
QObject::connect(uiState(), &UIState::uiUpdate, this, &MapWindow::updateState); |
|
|
|
|
|
|
|
|
|
map_overlay = new QWidget (this); |
|
|
|
|
map_overlay->setAttribute(Qt::WA_TranslucentBackground, true); |
|
|
|
|
QVBoxLayout *overlay_layout = new QVBoxLayout(map_overlay); |
|
|
|
|
overlay_layout->setContentsMargins(0, 0, 0, 0); |
|
|
|
|
|
|
|
|
|
// Instructions
|
|
|
|
|
map_instructions = new MapInstructions(this); |
|
|
|
|
QObject::connect(this, &MapWindow::instructionsChanged, map_instructions, &MapInstructions::updateInstructions); |
|
|
|
|
QObject::connect(this, &MapWindow::distanceChanged, map_instructions, &MapInstructions::updateDistance); |
|
|
|
|
map_instructions->setFixedWidth(width()); |
|
|
|
|
map_instructions->setVisible(false); |
|
|
|
|
|
|
|
|
|
map_eta = new MapETA(this); |
|
|
|
|
map_eta->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); |
|
|
|
|
map_eta->setFixedHeight(120); |
|
|
|
|
|
|
|
|
|
// Settings button
|
|
|
|
|
QSize icon_size(120, 120); |
|
|
|
@ -41,22 +47,28 @@ MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings), |
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|
)"); |
|
|
|
|
settings_btn->show(); // force update
|
|
|
|
|
settings_btn->move(UI_BORDER_SIZE, 1080 - UI_BORDER_SIZE*3 - settings_btn->height()); |
|
|
|
|
QObject::connect(settings_btn, &QPushButton::clicked, [=]() { |
|
|
|
|
emit openSettings(); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
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"); |
|
|
|
|
if (last_gps_position.has_value()) { |
|
|
|
|
last_position = *last_gps_position; |
|
|
|
@ -202,17 +214,8 @@ void MapWindow::updateState(const UIState &s) { |
|
|
|
|
clearRoute(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO: only move if position should change
|
|
|
|
|
// don't move while map isn't visible
|
|
|
|
|
if (isVisible()) { |
|
|
|
|
auto pos = 1080 - UI_BORDER_SIZE*2 - settings_btn->height() - UI_BORDER_SIZE; |
|
|
|
|
if (map_eta->isVisible()) { |
|
|
|
|
settings_btn->move(UI_BORDER_SIZE, pos - map_eta->height()); |
|
|
|
|
settings_btn->setIcon(settings_icon); |
|
|
|
|
} else { |
|
|
|
|
settings_btn->move(UI_BORDER_SIZE, pos); |
|
|
|
|
settings_btn->setIcon(directions_icon); |
|
|
|
|
} |
|
|
|
|
settings_btn->setIcon(map_eta->isVisible() ? settings_icon : directions_icon); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -234,8 +237,7 @@ void MapWindow::updateState(const UIState &s) { |
|
|
|
|
|
|
|
|
|
void MapWindow::resizeGL(int w, int h) { |
|
|
|
|
m_map->resize(size() / MAP_SCALE); |
|
|
|
|
map_instructions->setFixedWidth(width()); |
|
|
|
|
map_eta->setGeometry(0, height() - 120, w, 120); |
|
|
|
|
map_overlay->setFixedSize(width(), height()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MapWindow::initializeGL() { |
|
|
|
@ -406,12 +408,7 @@ MapInstructions::MapInstructions(QWidget * parent) : QWidget(parent) { |
|
|
|
|
main_layout->addLayout(layout); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
setStyleSheet(R"( |
|
|
|
|
* { |
|
|
|
|
color: white; |
|
|
|
|
font-family: "Inter"; |
|
|
|
|
} |
|
|
|
|
)"); |
|
|
|
|
setStyleSheet("color:white"); |
|
|
|
|
|
|
|
|
|
QPalette pal = palette(); |
|
|
|
|
pal.setColor(QPalette::Background, QColor(0, 0, 0, 150)); |
|
|
|
@ -467,11 +464,6 @@ void MapInstructions::noError() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void MapInstructions::updateInstructions(cereal::NavInstruction::Reader instruction) { |
|
|
|
|
// Word wrap widgets need fixed width
|
|
|
|
|
primary->setFixedWidth(width() - 250); |
|
|
|
|
secondary->setFixedWidth(width() - 250); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Show instruction text
|
|
|
|
|
QString primary_str = QString::fromStdString(instruction.getManeuverPrimaryText()); |
|
|
|
|
QString secondary_str = QString::fromStdString(instruction.getManeuverSecondaryText()); |
|
|
|
@ -545,8 +537,7 @@ void MapInstructions::updateInstructions(cereal::NavInstruction::Reader instruct |
|
|
|
|
} |
|
|
|
|
lane_widget->setVisible(has_lanes); |
|
|
|
|
|
|
|
|
|
show(); |
|
|
|
|
resize(sizeHint()); |
|
|
|
|
setVisible(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|