Initial commit: add Location Plotter
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#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 clearPoints();
|
||||
void setAverageMarker(double latitude, double longitude, double radiusMeters);
|
||||
void clearAverageMarker();
|
||||
void setCepMarker(double latitude, double longitude,
|
||||
const std::optional<double> &radiusMeters);
|
||||
void clearCepMarker();
|
||||
|
||||
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:
|
||||
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 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();
|
||||
|
||||
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;
|
||||
};
|
||||
Reference in New Issue
Block a user