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