File indexing completed on 2024-04-21 03:49:54

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