00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _MULTILEVELJSONBASE_HPP_
00020 #define _MULTILEVELJSONBASE_HPP_
00021
00022 #include <QList>
00023 #include <QString>
00024 #include <QVariantMap>
00025 #include <QNetworkReply>
00026
00027 #include "StelSkyLayer.hpp"
00028
00029 class QIODevice;
00030 class StelCore;
00031
00034 class MultiLevelJsonBase : public StelSkyLayer
00035 {
00036 Q_OBJECT
00037
00038 friend class JsonLoadThread;
00039
00040 public:
00042 MultiLevelJsonBase(MultiLevelJsonBase* parent=NULL);
00043
00046 void initFromUrl(const QString& url);
00047
00050 void initFromQVariantMap(const QVariantMap& map);
00051
00053 ~MultiLevelJsonBase();
00054
00056 QString getShortName() const {return shortName;}
00057
00059 bool hasErrorOccured() const {return errorOccured;}
00060
00062 int getLevel() const {return parent()==NULL ? 0 : (qobject_cast<MultiLevelJsonBase*>(parent()))->getLevel()+1;}
00063
00066 QVariantMap toQVariantMap() const;
00067
00070 void scheduleChildsDeletion();
00071
00072 private slots:
00074 void downloadFinished();
00076 void jsonLoadFinished();
00077
00078 protected:
00081 virtual void loadFromQVariantMap(const QVariantMap& map)=0;
00082
00084 bool isDeletionScheduled() const {return timeWhenDeletionScheduled>0.;}
00085
00087 QString shortName;
00088
00090 QString baseUrl;
00091
00093 QString contructorUrl;
00094
00096 QList<MultiLevelJsonBase*> subTiles;
00097
00099 bool errorOccured;
00100
00101 void updatePercent(int tot, int numToBeLoaded);
00102
00104 void deleteUnusedSubTiles();
00105
00107 bool downloading;
00108
00110 void cancelDeletion();
00111
00113 static QVariantMap loadFromJSON(QIODevice& input, bool qZcompressed=false, bool gzCompressed=false);
00114
00115 private:
00117 QString getBaseUrl() const {return baseUrl;}
00118
00119
00120 class QNetworkReply* httpReply;
00121
00122
00123 float deletionDelay;
00124
00125 class JsonLoadThread* loadThread;
00126
00127
00128 double timeWhenDeletionScheduled;
00129
00130
00131 QVariantMap temporaryResultMap;
00132
00133 bool loadingState;
00134 int lastPercent;
00135
00137 static class QNetworkAccessManager* networkAccessManager;
00138
00139 static QNetworkAccessManager& getNetworkAccessManager();
00140 };
00141
00142 #endif // _MULTILEVELJSONBASE_HPP_