File indexing completed on 2024-05-05 03:49:20

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2011 Dennis Nienhüser <nienhueser@kde.org>
0004 //
0005 
0006 #ifndef MARBLE_DECLARATIVE_TRACKING_H
0007 #define MARBLE_DECLARATIVE_TRACKING_H
0008 
0009 #include "PositionSource.h"
0010 
0011 #include <QObject>
0012 
0013 namespace Marble {
0014 class AutoNavigation;
0015 class MarbleQuickItem;
0016 
0017 class Tracking : public QObject
0018 {
0019     Q_OBJECT
0020     Q_ENUMS( PositionMarkerType )
0021 
0022     Q_PROPERTY( MarbleQuickItem* map READ map WRITE setMap NOTIFY mapChanged )
0023     Q_PROPERTY( bool showTrack READ showTrack WRITE setShowTrack NOTIFY showTrackChanged )
0024     Q_PROPERTY( bool autoCenter READ autoCenter WRITE setAutoCenter NOTIFY autoCenterChanged )
0025     Q_PROPERTY( bool autoZoom READ autoZoom WRITE setAutoZoom NOTIFY autoZoomChanged )
0026     Q_PROPERTY( PositionSource* positionSource READ positionSource WRITE setPositionSource NOTIFY positionSourceChanged )
0027     Q_PROPERTY( QObject* positionMarker READ positionMarker WRITE setPositionMarker NOTIFY positionMarkerChanged )
0028     Q_PROPERTY( bool hasLastKnownPosition READ hasLastKnownPosition NOTIFY hasLastKnownPositionChanged )
0029     Q_PROPERTY( Coordinate* lastKnownPosition READ lastKnownPosition WRITE setLastKnownPosition NOTIFY lastKnownPositionChanged )
0030     Q_PROPERTY( PositionMarkerType positionMarkerType READ positionMarkerType WRITE setPositionMarkerType NOTIFY positionMarkerTypeChanged )
0031     Q_PROPERTY( double distance READ distance NOTIFY distanceChanged )
0032 
0033 public:
0034     enum PositionMarkerType {
0035         None,
0036         Circle,
0037         Arrow
0038     };
0039 
0040     explicit Tracking( QObject* parent = nullptr );
0041 
0042     bool showTrack() const;
0043 
0044     void setShowTrack( bool show );
0045 
0046     PositionSource* positionSource();
0047 
0048     void setPositionSource( PositionSource* source );
0049 
0050     QObject* positionMarker();
0051 
0052     void setPositionMarker( QObject* marker );
0053 
0054     MarbleQuickItem* map();
0055 
0056     void setMap( MarbleQuickItem* widget );
0057 
0058     bool hasLastKnownPosition() const;
0059 
0060     Coordinate *lastKnownPosition();
0061 
0062     void setLastKnownPosition( Coordinate* lastKnownPosition );
0063 
0064     bool autoCenter() const;
0065 
0066     void setAutoCenter( bool enabled );
0067 
0068     bool autoZoom() const;
0069 
0070     void setAutoZoom( bool enabled );
0071 
0072     PositionMarkerType positionMarkerType() const;
0073 
0074     void setPositionMarkerType( PositionMarkerType type );
0075 
0076     double distance() const;
0077 
0078 public Q_SLOTS:
0079     void saveTrack( const QString &fileName );
0080 
0081     void openTrack( const QString &fileName );
0082 
0083     void clearTrack();
0084 
0085 Q_SIGNALS:
0086     void mapChanged();
0087 
0088     void showTrackChanged();
0089 
0090     void positionSourceChanged();
0091 
0092     void positionMarkerChanged();
0093 
0094     void hasLastKnownPositionChanged();
0095 
0096     void lastKnownPositionChanged();
0097 
0098     void autoCenterChanged();
0099 
0100     void autoZoomChanged();
0101 
0102     void positionMarkerTypeChanged();
0103 
0104     void distanceChanged();
0105 
0106 private Q_SLOTS:
0107     void updatePositionMarker();
0108 
0109     void updateLastKnownPosition();
0110 
0111     void setHasLastKnownPosition();
0112 
0113 private:
0114     void setShowPositionMarkerPlugin( bool visible );
0115 
0116     bool m_showTrack;
0117 
0118     PositionSource* m_positionSource;
0119 
0120     QObject* m_positionMarker;
0121 
0122     MarbleQuickItem* m_marbleQuickItem;
0123 
0124     bool m_hasLastKnownPosition;
0125 
0126     Coordinate m_lastKnownPosition;
0127 
0128     Marble::AutoNavigation* m_autoNavigation;
0129 
0130     PositionMarkerType m_positionMarkerType;
0131 };
0132 
0133 }
0134 
0135 
0136 #endif