Stellarium 0.14.3
LandscapeMgr.hpp
1 /*
2  * Stellarium
3  * Copyright (C) 2006 Fabien Chereau
4  * Copyright (C) 2010 Bogdan Marinov (add/remove landscapes feature)
5  * Copyright (C) 2012 Timothy Reaves
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
20  */
21 
22 #ifndef _LANDSCAPEMGR_HPP_
23 #define _LANDSCAPEMGR_HPP_
24 
25 #include "StelModule.hpp"
26 #include "StelUtils.hpp"
27 #include "Landscape.hpp"
28 
29 #include <QMap>
30 #include <QStringList>
31 
32 class Atmosphere;
33 class Cardinals;
34 class QSettings;
35 
41 class LandscapeMgr : public StelModule
42 {
43  Q_OBJECT
44  Q_PROPERTY(bool atmosphereDisplayed
46  WRITE setFlagAtmosphere
47  NOTIFY atmosphereDisplayedChanged)
48  Q_PROPERTY(bool cardinalsPointsDisplayed
51  NOTIFY cardinalsPointsDisplayedChanged)
52  Q_PROPERTY(bool fogDisplayed
53  READ getFlagFog
54  WRITE setFlagFog
55  NOTIFY fogDisplayedChanged)
56  Q_PROPERTY(bool landscapeDisplayed
57  READ getFlagLandscape
58  WRITE setFlagLandscape
59  NOTIFY landscapeDisplayedChanged)
60  Q_PROPERTY(bool illuminationDisplayed
63  NOTIFY illuminationDisplayedChanged)
64  Q_PROPERTY(bool labelsDisplayed
65  READ getFlagLabels
66  WRITE setFlagLabels
67  NOTIFY labelsDisplayedChanged)
68  Q_PROPERTY(bool databaseUsage
71  NOTIFY lightPollutionUsageChanged)
72 
73 public:
74  LandscapeMgr();
75  virtual ~LandscapeMgr();
76 
78  // Methods defined in the StelModule class
83  virtual void init();
84 
86  virtual void draw(StelCore* core);
87 
95  virtual void update(double deltaTime);
96 
98  virtual double getCallOrder(StelModuleActionName actionName) const;
99 
100 
102  // Method specific to the landscape manager
106  float getLuminance() const;
108  float getAtmosphereAverageLuminance() const;
109 
112  bool loadLandscape(QMap<QString, QString>& param);
113 
122  Landscape* createFromFile(const QString& landscapeFile, const QString& landscapeId);
123 
124  // GZ: implement StelModule's method. For test purposes only, we implement a manual transparency sampler.
125  // TODO: comment this away for final builds. Please leave it in until this feature is finished.
126  // virtual void handleMouseClicks(class QMouseEvent*);
127 
128 public slots:
130  // Methods callable from script and GUI
134  QStringList getAllLandscapeNames() const;
135 
139  QStringList getAllLandscapeIDs() const;
140 
144  QStringList getUserLandscapeIDs() const;
145 
147  const QString& getCurrentLandscapeID() const {return currentLandscapeID;}
152  bool setCurrentLandscapeID(const QString& id, const double changeLocationDuration = 1.0);
153 
155  QString getCurrentLandscapeName() const;
159  bool setCurrentLandscapeName(const QString& name, const double changeLocationDuration = 1.0);
160 
162  Landscape* getCurrentLandscape() const { return landscape; }
163 
165  const QString& getDefaultLandscapeID() const {return defaultLandscapeID;}
169  bool setDefaultLandscapeID(const QString& id);
170 
172  QString getCurrentLandscapeHtmlDescription() const;
173 
175  QString getDescription() const;
176 
178  bool getFlagLandscape() const;
180  void setFlagLandscape(const bool displayed);
181 
183  bool getIsLandscapeFullyVisible() const;
185  float getLandscapeSinMinAltitudeLimit() const;
186 
188  bool getFlagFog() const;
190  void setFlagFog(const bool displayed);
192  bool getFlagIllumination() const;
194  void setFlagIllumination(const bool on);
196  bool getFlagLabels() const;
198  void setFlagLabels(const bool on);
199 
201  bool getFlagLandscapeSetsLocation() const {return flagLandscapeSetsLocation;}
203  void setFlagLandscapeSetsLocation(bool b) {flagLandscapeSetsLocation=b;}
204 
206  bool getFlagLandscapeUseMinimalBrightness() const {return flagLandscapeUseMinimalBrightness; }
208  void setFlagLandscapeUseMinimalBrightness(bool b) {flagLandscapeUseMinimalBrightness=b; }
210  bool getFlagLandscapeSetsMinimalBrightness() const {return flagLandscapeSetsMinimalBrightness;}
212  void setFlagLandscapeSetsMinimalBrightness(bool b) {flagLandscapeSetsMinimalBrightness=b;}
214  double getDefaultMinimalBrightness() const {return defaultMinimalBrightness;}
216  void setDefaultMinimalBrightness(const double b) {defaultMinimalBrightness=b;}
218  void setFlagUseLightPollutionFromDatabase(const bool usage);
221 
223  bool getFlagCardinalsPoints() const;
225  void setFlagCardinalsPoints(const bool displayed);
226 
230  void setColorCardinalPoints(const Vec3f& v);
231 
233  bool getFlagAtmosphere() const;
235  void setFlagAtmosphere(const bool displayed);
236 
238  float getAtmosphereFadeDuration() const;
240  void setAtmosphereFadeDuration(const float f);
241 
243  void setAtmosphereBortleLightPollution(const int bIndex);
246 
251  void setZRotation(const float d);
252 
283  QString installLandscapeFromArchive(QString pathToSourceArchive, const bool display = false, const bool forAllUsers = false);
284 
285  /* GZ: leaving doc without the method confuses Doxygen. Commenting out completely.
303  //QString installLandscapeFromDirectory(QString pathToSourceLandscapeIni, bool display = false, bool forAllUsers = false);
304  */
305 
315  bool removeLandscape(const QString landscapeID);
316 
321  QString loadLandscapeName(const QString landscapeID);
322 
327  quint64 loadLandscapeSize(const QString landscapeID) const;
328 
330  bool getFlagLandscapeAutoSelection() const;
332  void setFlagLandscapeAutoSelection(bool enableAutoSelect);
333 
335  bool getFlagAtmosphereAutoEnable() const;
337  void setFlagAtmosphereAutoEnable(bool b);
338 
341  float getLandscapeOpacity(Vec3d azalt) const {return landscape->getOpacity(azalt);}
345  float getLandscapeOpacity(float azimuth, float altitude) const {
346  Vec3d azalt;
347  StelUtils::spheToRect((180.0f-azimuth)*M_PI/180.0, altitude*M_PI/180.0, azalt);
348  return landscape->getOpacity(azalt);
349  }
350 
351 signals:
352  void atmosphereDisplayedChanged(const bool displayed);
353  void cardinalsPointsDisplayedChanged(const bool displayed);
354  void fogDisplayedChanged(const bool displayed);
355  void landscapeDisplayedChanged(const bool displayed);
356  void illuminationDisplayedChanged(const bool displayed);
357  void labelsDisplayedChanged(const bool displayed);
358  void lightPollutionUsageChanged(const bool usage);
359 
363  void landscapesChanged();
364 
366  void lightPollutionChanged();
367 
372  void errorUnableToOpen(QString path);
376  void errorNotArchive();
381  void errorNotUnique(QString nameOrID);
386  void errorRemoveManually(QString path);
387 
388 private slots:
390  void setStelStyle(const QString& section);
391 
393  void updateI18n();
394 
395 private:
397  float getAtmosphereLightPollutionLuminance() const;
399  void setAtmosphereLightPollutionLuminance(const float f);
400 
401 
405  QString nameToID(const QString& name) const;
406 
408  QMap<QString,QString> getNameToDirMap() const;
409 
414  QString getLandscapePath(const QString landscapeID) const;
415 
416  Atmosphere* atmosphere; // Atmosphere
417  Cardinals* cardinalsPoints; // Cardinals points
418  Landscape* landscape; // The landscape i.e. the fog, the ground and "decor"
419  Landscape* oldLandscape; // Used only during transitions to newly loaded landscape.
420 
421  // Define whether the observer location is to be updated when the landscape is updated.
422  bool flagLandscapeSetsLocation;
423 
424  bool flagLandscapeAutoSelection;
425 
426  bool flagLightPollutionFromDatabase;
427 
429  bool flagLandscapeUseMinimalBrightness;
431  float defaultMinimalBrightness;
433  bool flagLandscapeSetsMinimalBrightness;
435  bool flagAtmosphereAutoEnabling;
436 
437  // The ID of the currently loaded landscape
438  QString currentLandscapeID;
439 
440  // The ID of the default landscape
441  QString defaultLandscapeID;
442 
445  QStringList packagedLandscapeIDs;
446 
447 };
448 
449 #endif // _LANDSCAPEMGR_HPP_
void setFlagUseLightPollutionFromDatabase(const bool usage)
Sets the value of the flag usage light pollution (and bortle index) from locations database...
void setZRotation(const float d)
Set the rotation of the landscape about the z-axis.
void setFlagLandscape(const bool displayed)
Set flag for displaying Landscape.
float getAtmosphereFadeDuration() const
Get atmosphere fade duration in s.
bool loadLandscape(QMap< QString, QString > &param)
Load a landscape based on a hash of parameters mirroring the landscape.ini file and make it the curre...
QString installLandscapeFromArchive(QString pathToSourceArchive, const bool display=false, const bool forAllUsers=false)
Install a landscape from a ZIP archive.
QStringList getUserLandscapeIDs() const
Retrieve a list of the identifiers of all user-installed landscapes.
bool removeLandscape(const QString landscapeID)
This function removes a landscape from the user data directory.
Store and manages the displaying of the Landscape.
Definition: Landscape.hpp:62
void spheToRect(const double lng, const double lat, Vec3d &v)
Convert from spherical coordinates to Rectangular direction.
void errorNotArchive()
Emitted when the file passed to installLandscapeFromArchive() is not a ZIP archive or does not contai...
virtual void update(double deltaTime)
Update time-dependent state.
QString getCurrentLandscapeName() const
Get the current landscape name.
Compute and display the daylight sky color using openGL.
Definition: Atmosphere.hpp:39
void setAtmosphereBortleLightPollution(const int bIndex)
Set the light pollution following the Bortle Scale. Emits lightPollutionChanged().
void landscapesChanged()
Emitted when a landscape has been installed or un-installed.
float getLandscapeOpacity(Vec3d azalt) const
Forward opacity query to current landscape.
bool getFlagIllumination() const
Get flag for displaying illumination layer.
Vec3f getColorCardinalPoints() const
Get Cardinals Points color.
bool setCurrentLandscapeName(const QString &name, const double changeLocationDuration=1.0)
Change the current landscape to the landscape with the name specified.
Manages all the rendering at the level of the observer's surroundings.
bool getFlagUseLightPollutionFromDatabase() const
Return the value of flag usage light pollution (and bortle index) from locations database.
void setFlagFog(const bool displayed)
Set flag for displaying Fog.
Landscape * getCurrentLandscape() const
Get the current landscape object.
Main class for Stellarium core processing.
Definition: StelCore.hpp:48
void setFlagLandscapeUseMinimalBrightness(bool b)
Set the value of the flag determining if a minimal brightness should be used to keep landscape visibl...
bool getFlagAtmosphereAutoEnable() const
Get flag for auto-enable of atmospheres for planets.
bool getFlagFog() const
Get flag for displaying Fog.
void setDefaultMinimalBrightness(const double b)
Set the minimal brightness value of the landscape.
QStringList getAllLandscapeNames() const
Retrieve a list of the names of all the available landscapes in the file search path sub-directories ...
bool getFlagLandscapeUseMinimalBrightness() const
Return the value of the flag determining if a minimal brightness should be used to keep landscape vis...
QStringList getAllLandscapeIDs() const
Retrieve a list of the identifiers of all the available landscapes in the file search path sub-direct...
bool getFlagLandscape() const
Get flag for displaying Landscape.
bool getFlagLabels() const
Get flag for displaying landscape labels.
void setFlagCardinalsPoints(const bool displayed)
Set flag for displaying Cardinals Points.
QString getDescription() const
Return a pseudo HTML formatted string with information from description or ini file.
float getLandscapeSinMinAltitudeLimit() const
Get the sine of current landscape's minimal altitude. Useful to construct bounding caps...
float getAtmosphereAverageLuminance() const
return average luminance [cd/m^2] of atmosphere. Around 10 at sunset, 6400 in daylight, >0 in dark night.
bool setCurrentLandscapeID(const QString &id, const double changeLocationDuration=1.0)
Change the current landscape to the landscape with the ID specified.
float getLandscapeOpacity(float azimuth, float altitude) const
Forward opacity query to current landscape.
bool getFlagLandscapeAutoSelection() const
Get flag for autoselect of landscapes for planets.
void setFlagLandscapeSetsMinimalBrightness(bool b)
Sets the value of the flag determining if the minimal brightness should be taken from landscape...
quint64 loadLandscapeSize(const QString landscapeID) const
This function calculates and returns a landscape's disc size in bytes.
void setFlagLandscapeSetsLocation(bool b)
Set the value of the flag determining if a change of landscape will update the observer location...
const QString & getDefaultLandscapeID() const
Get the default landscape ID.
double getDefaultMinimalBrightness() const
Return the minimal brightness value of the landscape.
const QString & getCurrentLandscapeID() const
Get the current landscape ID.
Landscape * createFromFile(const QString &landscapeFile, const QString &landscapeId)
Create a new landscape from the files which describe it.
bool getFlagLandscapeSetsLocation() const
Return the value of the flag determining if a change of landscape will update the observer location...
virtual double getCallOrder(StelModuleActionName actionName) const
Get the order in which this module will draw its objects relative to other modules.
void setFlagIllumination(const bool on)
Set flag for displaying illumination layer.
StelModuleActionName
Define the possible action for which an order is defined.
Definition: StelModule.hpp:117
void setFlagLabels(const bool on)
Set flag for displaying landscape labels.
QString loadLandscapeName(const QString landscapeID)
This function reads a landscape's name from its configuration file.
bool getFlagCardinalsPoints() const
Get flag for displaying Cardinals Points.
virtual void init()
Initialize the LandscapeManager class.
void errorNotUnique(QString nameOrID)
Emitted when installLandscapeFromArchive() tries to install a landscape with the same name or identif...
void setColorCardinalPoints(const Vec3f &v)
Set Cardinals Points color.
virtual float getOpacity(Vec3d azalt) const
Find opacity in a certain direction.
Definition: Landscape.hpp:164
void lightPollutionChanged()
emitted by setAtmosphereBortleLightPollution().
bool getFlagAtmosphere() const
Get flag for displaying Atmosphere.
void setFlagAtmosphereAutoEnable(bool b)
Set flag for auto-enable atmosphere for planets with atmospheres in location window.
void setFlagAtmosphere(const bool displayed)
Set flag for displaying Atmosphere.
void errorRemoveManually(QString path)
Emitted when removeLandscape() is unable to remove all the files of a landscape.
void setAtmosphereFadeDuration(const float f)
Set atmosphere fade duration in s.
void errorUnableToOpen(QString path)
Emitted when installLandscapeFromArchive() can't read from, write to or create a file or a directory...
bool getFlagLandscapeSetsMinimalBrightness() const
Return the value of the flag determining if the minimal brightness should be taken from landscape...
bool getIsLandscapeFullyVisible() const
Get whether the landscape is currently visible. If true, objects below landscape's limiting altitude ...
float getLuminance() const
Return the global landscape luminance [0..1], for being used e.g for setting eye adaptation.
virtual void draw(StelCore *core)
Draw the landscape graphics, cardinal points and atmosphere.
int getAtmosphereBortleLightPollution() const
Get the light pollution following the Bortle Scale.
QString getCurrentLandscapeHtmlDescription() const
Return a pseudo HTML formatted string with all informations on the current landscape.
bool setDefaultLandscapeID(const QString &id)
Change the default landscape to the landscape with the ID specified.
This is the common base class for all the main components of stellarium.
Definition: StelModule.hpp:49
void setFlagLandscapeAutoSelection(bool enableAutoSelect)
Set flag for autoselect of landscapes for planets.