/* * Copyright (C) 2011 Alexander Wolf * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. */ #ifndef _QUASARS_HPP_ #define _QUASARS_HPP_ #include "StelObjectModule.hpp" #include "StelObject.hpp" #include "StelTextureTypes.hpp" #include "Quasar.hpp" #include #include #include #include #include class StelPainter; class QNetworkAccessManager; class QNetworkReply; class QSettings; class QTimer; class QPixmap; class StelButton; class QuasarsDialog; typedef QSharedPointer QuasarP; //! This is an example of a plug-in which can be dynamically loaded into stellarium class Quasars : public StelObjectModule { Q_OBJECT Q_PROPERTY(bool quasarsVisible READ getFlagShowQuasars WRITE setFlagShowQuasars) public: //! @enum UpdateState //! Used for keeping for track of the download/update status enum UpdateState { Updating, //!< Update in progress CompleteNoUpdates, //!< Update completed, there we no updates CompleteUpdates, //!< Update completed, there were updates DownloadError, //!< Error during download phase OtherError //!< Other error }; Quasars(); virtual ~Quasars(); /////////////////////////////////////////////////////////////////////////// // Methods defined in the StelModule class virtual void init(); virtual void deinit(); virtual void update(double) {;} virtual void draw(StelCore* core); virtual void drawPointer(StelCore* core, StelPainter& painter); virtual double getCallOrder(StelModuleActionName actionName) const; /////////////////////////////////////////////////////////////////////////// // Methods defined in StelObjectManager class //! Used to get a list of objects which are near to some position. //! @param v a vector representing the position in th sky around which to search for nebulae. //! @param limitFov the field of view around the position v in which to search for satellites. //! @param core the StelCore to use for computations. //! @return an list containing the satellites located inside the limitFov circle around position v. virtual QList searchAround(const Vec3d& v, double limitFov, const StelCore* core) const; //! Return the matching satellite object's pointer if exists or NULL. //! @param nameI18n The case in-sensistive satellite name virtual StelObjectP searchByNameI18n(const QString& nameI18n) const; //! Return the matching satellite if exists or NULL. //! @param name The case in-sensistive standard program name virtual StelObjectP searchByName(const QString& name) const; //! Find and return the list of at most maxNbItem objects auto-completing the passed object I18n name. //! @param objPrefix the case insensitive first letters of the searched object //! @param maxNbItem the maximum number of returned object names //! @param useStartOfWords the autofill mode for returned objects names //! @return a list of matching object name by order of relevance, or an empty list if nothing match virtual QStringList listMatchingObjectsI18n(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const; //! Find and return the list of at most maxNbItem objects auto-completing the passed object English name. //! @param objPrefix the case insensitive first letters of the searched object //! @param maxNbItem the maximum number of returned object names //! @param useStartOfWords the autofill mode for returned objects names //! @return a list of matching object name by order of relevance, or an empty list if nothing match virtual QStringList listMatchingObjects(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const; virtual QStringList listAllObjects(bool inEnglish) const; virtual QString getName() const { return "Quasars"; } //! get a Quasar object by identifier QuasarP getByID(const QString& id); //! Implement this to tell the main Stellarium GUI that there is a GUI element to configure this //! plugin. virtual bool configureGui(bool show=true); //! Set up the plugin with default values. This means clearing out the Quasars section in the //! main config.ini (if one already exists), and populating it with default values. It also //! creates the default pulsars.json file from the resource embedded in the plugin lib/dll file. void restoreDefaults(void); //! Read (or re-read) settings from the main config file. This will be called from init and also //! when restoring defaults (i.e. from the configuration dialog / restore defaults button). void readSettingsFromConfig(void); //! Save the settings to the main configuration file. void saveSettingsToConfig(void); //! get whether or not the plugin will try to update catalog data from the internet //! @return true if updates are set to be done, false otherwise bool getUpdatesEnabled(void) {return updatesEnabled;} //! set whether or not the plugin will try to update catalog data from the internet //! @param b if true, updates will be enabled, else they will be disabled void setUpdatesEnabled(bool b) {updatesEnabled=b;} bool getDisplayMode(void); void setDisplayMode(bool b); QString getMarkerColor(void); void setMarkerColor(QString c); void setEnableAtStartup(bool b) { enableAtStartup=b; } bool getEnableAtStartup(void) { return enableAtStartup; } //! get the date and time the TLE elements were updated QDateTime getLastUpdate(void) {return lastUpdate;} //! get the update frequency in days int getUpdateFrequencyDays(void) {return updateFrequencyDays;} void setUpdateFrequencyDays(int days) {updateFrequencyDays = days;} //! get the number of seconds till the next update int getSecondsToUpdate(void); //! Get the current updateState UpdateState getUpdateState(void) {return updateState;} //! Get count of quasars from catalog int getCountQuasars(void) {return QsrCount;} signals: //! @param state the new update state. void updateStateChanged(Quasars::UpdateState state); //! emitted after a JSON update has run. void jsonUpdateComplete(void); public slots: //! Download JSON from web recources described in the module section of the //! module.ini file and update the local JSON file. void updateJSON(void); void setFlagShowQuasars(bool b) { flagShowQuasars=b; } bool getFlagShowQuasars(void) { return flagShowQuasars; } //! Define whether the button toggling quasars should be visible void setFlagShowQuasarsButton(bool b); bool getFlagShowQuasarsButton(void) { return flagShowQuasarsButton; } //! Display a message. This is used for plugin-specific warnings and such void displayMessage(const QString& message, const QString hexColor="#999999"); void messageTimeout(void); private: // Font used for displaying our text QFont font; // if existing, delete Satellites section in main config.ini, then create with default values void restoreDefaultConfigIni(void); // Upgrade config.ini: rename old key settings to new void upgradeConfigIni(void); //! replace the json file with the default from the compiled-in resource void restoreDefaultJsonFile(void); //! read the json file and create list of quasars. void readJsonFile(void); //! Creates a backup of the catalog.json file called catalog.json.old //! @param deleteOriginal if true, the original file is removed, else not //! @return true on OK, false on failure bool backupJsonFile(bool deleteOriginal=false); //! Get the version from the "version of the format" value in the catalog.json file //! @return version string, e.g. "1" int getJsonFileFormatVersion(void); //! Check format of the catalog of quasars //! @return valid boolean, e.g. "true" bool checkJsonFileFormat(void); //! parse JSON file and load quasars to map QVariantMap loadQSOMap(QString path=QString()); //! set items for list of struct from data map void setQSOMap(const QVariantMap& map); QString catalogJsonPath; int QsrCount; StelTextureSP texPointer; QList QSO; // variables and functions for the updater UpdateState updateState; QNetworkAccessManager* downloadMgr; QString updateUrl; QTimer* updateTimer; QTimer* messageTimer; QList messageIDs; bool updatesEnabled; QDateTime lastUpdate; int updateFrequencyDays; bool enableAtStartup; QSettings* conf; // GUI QuasarsDialog* configDialog; bool flagShowQuasars; bool flagShowQuasarsButton; QPixmap* OnIcon; QPixmap* OffIcon; QPixmap* GlowIcon; StelButton* toolbarButton; class StelProgressController* progressBar; private slots: //! check to see if an update is required. This is called periodically by a timer //! if the last update was longer than updateFrequencyHours ago then the update is //! done. void checkForUpdate(void); void updateDownloadComplete(QNetworkReply* reply); }; #include #include "StelPluginInterface.hpp" //! This class is used by Qt to manage a plug-in interface class QuasarsStelPluginInterface : public QObject, public StelPluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID "stellarium.StelGuiPluginInterface/1.0") Q_INTERFACES(StelPluginInterface) public: virtual StelModule* getStelModule() const; virtual StelPluginInfo getPluginInfo() const; }; #endif /*_QUASARS_HPP_*/