mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Based on a QGeoCoordinate, calculateSmallCircleRadius() calls some QML Map methods to obtain how big a circle is in meters if a circle is drawn over the Map widget with radius SMALL_CIRCLE_RADIUS_PX pixels. This is called a "small circle" of a sphere: https://en.wikipedia.org/wiki/Circle_of_a_sphere This "small circle" radius becomes huge if the map is zoomed out, while quite small if the map is really zoomed in. The idea behind this circle is to be able to select multiple nearby dives, when clicking on the map (TODO). Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
40 lines
963 B
C++
40 lines
963 B
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef QMLMAPWIDGETHELPER_H
|
|
#define QMLMAPWIDGETHELPER_H
|
|
|
|
#include <QObject>
|
|
|
|
class QGeoCoordinate;
|
|
class MapLocationModel;
|
|
class MapLocation;
|
|
struct dive_site;
|
|
|
|
class MapWidgetHelper : public QObject {
|
|
|
|
Q_OBJECT
|
|
Q_PROPERTY(QObject *map MEMBER m_map)
|
|
Q_PROPERTY(MapLocationModel *model MEMBER m_mapLocationModel NOTIFY modelChanged)
|
|
|
|
public:
|
|
explicit MapWidgetHelper(QObject *parent = NULL);
|
|
|
|
void centerOnDiveSite(struct dive_site *);
|
|
void reloadMapLocations();
|
|
Q_INVOKABLE void copyToClipboardCoordinates(QGeoCoordinate coord, bool formatTraditional);
|
|
Q_INVOKABLE void calculateSmallCircleRadius(QGeoCoordinate coord);
|
|
|
|
private:
|
|
QObject *m_map;
|
|
MapLocationModel *m_mapLocationModel;
|
|
qreal m_smallCircleRadius;
|
|
|
|
private slots:
|
|
void selectedLocationChanged(MapLocation *);
|
|
|
|
signals:
|
|
void modelChanged();
|
|
};
|
|
|
|
extern "C" const char *printGPSCoords(int lat, int lon);
|
|
|
|
#endif
|