File indexing completed on 2024-04-28 03:50:24

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2011 Guillaume Martres <smarter@ubuntu.com>
0004 // SPDX-FileCopyrightText: 2012 Rene Kuettner <rene@bitkanal.net>
0005 //
0006 
0007 #ifndef MARBLE_SATELLITESPLUGIN_H
0008 #define MARBLE_SATELLITESPLUGIN_H
0009 
0010 #include "RenderPlugin.h"
0011 #include "SatellitesConfigDialog.h"
0012 #include "DialogConfigurationInterface.h"
0013 #include "SatellitesModel.h"
0014 
0015 #include <QHash>
0016 
0017 namespace Marble
0018 {
0019 
0020 class SatellitesConfigModel;
0021 
0022 /**
0023  * @brief This plugin displays satellites and their orbits.
0024  *
0025  */
0026 class SatellitesPlugin : public RenderPlugin,
0027                          public DialogConfigurationInterface
0028 {
0029     Q_OBJECT
0030     Q_PLUGIN_METADATA(IID "org.kde.marble.SatellitesPlugin")
0031     Q_INTERFACES( Marble::RenderPluginInterface )
0032     Q_INTERFACES( Marble::DialogConfigurationInterface )
0033     MARBLE_PLUGIN( SatellitesPlugin )
0034 
0035 public:
0036     explicit SatellitesPlugin( const MarbleModel *marbleModel = nullptr );
0037     ~SatellitesPlugin() override;
0038     
0039     QStringList backendTypes() const override;
0040     QString renderPolicy() const override;
0041     QStringList renderPosition() const override;
0042     QString name() const override;
0043     QString nameId() const override;
0044     QString guiString() const override;
0045     QString version() const override;
0046     QString description() const override;
0047     QString copyrightYears() const override;
0048     QVector<PluginAuthor> pluginAuthors() const override;
0049     QString aboutDataText() const override;
0050     QIcon icon() const override;
0051     RenderType renderType() const override;
0052     void initialize() override;
0053     bool isInitialized() const override;
0054 
0055     bool render( GeoPainter *painter,
0056                  ViewportParams *viewport,
0057                  const QString &renderPos,
0058                  GeoSceneLayer *layer ) override;
0059 
0060     bool eventFilter( QObject *object, QEvent *event ) override;
0061 
0062     QHash<QString, QVariant> settings() const override;
0063     void setSettings( const QHash<QString, QVariant> &settings ) override;
0064 
0065     SatellitesConfigDialog *configDialog() override;
0066 
0067 private Q_SLOTS:
0068     void activate();
0069     void enableModel( bool enabled );
0070     void visibleModel( bool visible );
0071     void readSettings();
0072     void writeSettings();
0073     void updateSettings();
0074     void updateDataSourceConfig( const QString &source );
0075     void dataSourceParsed( const QString &source );
0076     void userDataSourceAdded( const QString &source );
0077 
0078     void showOrbit( bool show );
0079     void trackPlacemark();
0080 
0081 protected:
0082     void activateDataSource( const QString &source );
0083     void addBuiltInDataSources();
0084 
0085 private:
0086     SatellitesModel *m_satModel;
0087     SatellitesConfigModel *m_configModel;
0088 
0089     bool m_isInitialized;
0090     QHash<QString, QVariant> m_settings;
0091     QStringList m_newDataSources;
0092 
0093     SatellitesConfigDialog *m_configDialog;
0094 
0095     QAction *m_showOrbitAction;
0096     QAction *m_trackPlacemarkAction;
0097     QVector<TrackerPluginItem*> m_trackerList;
0098 };
0099 
0100 } // namespace Marble
0101 
0102 #endif // MARBLE_SATELLITESPLUGIN_H