File indexing completed on 2024-05-05 12:07:26
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2011 Konrad Enzensberger <e.konrad@mpegcode.com> 0004 // SPDX-FileCopyrightText: 2011 Dennis Nienhüser <nienhueser@kde.org> 0005 // SPDX-FileCopyrightText: 2012 Bernhard Beschow <bbeschow@cs.tu-berlin.de> 0006 // 0007 0008 #ifndef MARBLE_ROUTESIMULATIONPOSITIONPROVIDERPLUGIN_H 0009 #define MARBLE_ROUTESIMULATIONPOSITIONPROVIDERPLUGIN_H 0010 0011 #include "PositionProviderPlugin.h" 0012 0013 #include "GeoDataLineString.h" 0014 #include "GeoDataCoordinates.h" 0015 0016 #include <QDateTime> 0017 #include <QTimer> 0018 0019 namespace Marble 0020 { 0021 0022 class MarbleModel; 0023 0024 class RouteSimulationPositionProviderPlugin: public PositionProviderPlugin 0025 { 0026 Q_OBJECT 0027 Q_INTERFACES( Marble::PositionProviderPluginInterface ) 0028 0029 public: 0030 explicit RouteSimulationPositionProviderPlugin(MarbleModel *marbleModel, QObject* parent=nullptr); 0031 ~RouteSimulationPositionProviderPlugin() override; 0032 0033 // Implementing PluginInterface 0034 QString name() const override; 0035 QString nameId() const override; 0036 QString guiString() const override; 0037 QString version() const override; 0038 QString description() const override; 0039 QString copyrightYears() const override; 0040 QVector<PluginAuthor> pluginAuthors() const override; 0041 QIcon icon() const override; 0042 void initialize() override; 0043 bool isInitialized() const override; 0044 qreal speed() const override; 0045 qreal direction() const override; 0046 QDateTime timestamp() const override; 0047 0048 // Implementing PositionProviderPlugin 0049 PositionProviderPlugin * newInstance() const override; 0050 0051 // Implementing PositionProviderPluginInterface 0052 PositionProviderStatus status() const override; 0053 GeoDataCoordinates position() const override; 0054 GeoDataAccuracy accuracy() const override; 0055 0056 private Q_SLOTS: 0057 /** Regular (each second) position and status update */ 0058 void update(); 0059 void updateRoute(); 0060 0061 private: 0062 GeoDataCoordinates addNoise(const Marble::GeoDataCoordinates &,const Marble::GeoDataAccuracy &) const; 0063 static qreal addNoise(qreal bearing); 0064 void changeStatus(PositionProviderStatus status); 0065 0066 MarbleModel *const m_marbleModel; 0067 int m_currentIndex; 0068 PositionProviderStatus m_status; 0069 GeoDataLineString m_lineString; 0070 GeoDataLineString m_lineStringInterpolated; 0071 GeoDataCoordinates m_currentPosition; 0072 GeoDataCoordinates m_currentPositionWithNoise; 0073 QDateTime m_currentDateTime; 0074 qreal m_speed; 0075 qreal m_direction; 0076 qreal m_directionWithNoise; 0077 QTimer m_updateTimer; 0078 }; 0079 0080 } 0081 0082 #endif // MARBLE_ROUTESIMULATIONPOSITIONPROVIDERPLUGIN_H