Files
location_plotter/src/MapWidget.h
T
onur 73227452c3
Ubuntu build / build-and-test (ubuntu-22.04) (push) Has been cancelled
Ubuntu build / build-and-test (ubuntu-24.04) (push) Has been cancelled
Merge GUI updates into macOS branch
# Conflicts:
#	src/GlobeWidget.cpp
#	src/GlobeWidget.h
#	src/MainWindow.h
#	src/MapWidget.cpp
#	src/MapWidget.h
#	src/RinexNavigation.cpp
2026-07-24 00:14:47 +03:00

97 lines
3.0 KiB
C++

#pragma once
#include "TelemetryPoint.h"
#include <QHash>
#include <QPixmap>
#include <QPoint>
#include <QSet>
#include <QWidget>
#include <optional>
class QNetworkAccessManager;
class QLabel;
class MapWidget : public QWidget {
Q_OBJECT
public:
explicit MapWidget(QWidget *parent = nullptr);
void setPoints(const QVector<TelemetryPoint> &points);
void fitToPoints();
void clearPoints();
void setAverageMarker(double latitude, double longitude, double radiusMeters);
void clearAverageMarker();
void setCepMarker(double latitude, double longitude,
const std::optional<double> &radiusMeters);
void clearCepMarker();
[[nodiscard]] QPointF centerCoordinate() const;
public slots:
void setAutoFollow(bool enabled);
void setTelemetryOverlayEnabled(bool enabled);
void setAverageOverlayEnabled(bool enabled);
void setRecentPointsEnabled(bool enabled);
void zoomIn();
void zoomOut();
signals:
void autoFollowChanged(bool enabled);
void referenceLocationSelected(double latitude, double longitude);
protected:
bool event(QEvent *event) override;
void paintEvent(QPaintEvent *event) override;
void wheelEvent(QWheelEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
private:
QPointF coordinateToWorld(double latitude, double longitude, int zoom) const;
QPointF worldToCoordinate(const QPointF &world, int zoom) const;
QPointF coordinateToScreen(double latitude, double longitude) const;
QPointF screenToCoordinate(const QPointF &screen) const;
QPointF topLeftWorld() const;
void drawTiles(QPainter &painter);
void drawTelemetry(QPainter &painter);
void drawLegend(QPainter &painter);
void drawAverageOverlay(QPainter &painter);
void drawCepOverlay(QPainter &painter);
void drawCepMarker(QPainter &painter);
void drawEmptyState(QPainter &painter);
void requestTile(int tileX, int tileY, int zoom);
void setZoomKeepingPoint(int newZoom, const QPointF &screenAnchor);
void disableAutoFollowFromUserAction();
int preferredFocusIndex() const;
QVector<TelemetryPoint> m_points;
QNetworkAccessManager *m_network = nullptr;
QLabel *m_attributionLabel = nullptr;
QHash<QString, QPixmap> m_tileCache;
QSet<QString> m_pendingTiles;
double m_centerLat = 39.0;
double m_centerLon = 35.0;
int m_zoom = 6;
bool m_autoFollow = true;
bool m_showTelemetryOverlay = true;
bool m_showAverageOverlay = true;
bool m_showRecentPoints = true;
bool m_hasAverageMarker = false;
double m_averageLat = 0.0;
double m_averageLon = 0.0;
double m_averageRadiusMeters = 0.0;
bool m_hasCepMarker = false;
double m_cepLatitude = 0.0;
double m_cepLongitude = 0.0;
std::optional<double> m_cepRadiusMeters;
bool m_dragging = false;
QPoint m_lastMousePos;
double m_wheelZoomAccumulator = 0.0;
};