Stellarium 0.14.0
StelApp.hpp
1 /*
2  * Stellarium
3  * Copyright (C) 2006 Fabien Chereau
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
18  */
19 
20 #ifndef _STELAPP_HPP_
21 #define _STELAPP_HPP_
22 
23 #include <QString>
24 #include <QObject>
25 
26 // Predeclaration of some classes
27 class StelCore;
28 class StelTextureMgr;
29 class StelObjectMgr;
30 class StelLocaleMgr;
31 class StelModuleMgr;
32 class StelSkyCultureMgr;
33 class StelViewportEffect;
34 class QOpenGLFramebufferObject;
35 class QSettings;
36 class QNetworkAccessManager;
37 class QNetworkReply;
38 class QTimer;
39 class StelLocationMgr;
40 class StelSkyLayerMgr;
41 class StelAudioMgr;
42 class StelVideoMgr;
43 class StelGuiBase;
45 class StelScriptMgr;
46 class StelActionMgr;
48 
60 class StelApp : public QObject
61 {
62  Q_OBJECT
63  Q_PROPERTY(bool nightMode READ getVisionModeNight WRITE setVisionModeNight NOTIFY visionNightModeChanged)
64 
65 public:
66  friend class StelAppGraphicsWidget;
67  friend class StelSkyItem;
68 
74  StelApp(QObject* parent=NULL);
75 
77  virtual ~StelApp();
78 
80  void init(QSettings* conf);
82  void deinit();
83 
85  void initPlugIns();
86 
89  static StelApp& getInstance() {Q_ASSERT(singleton); return *singleton;}
90 
93  StelModuleMgr& getModuleMgr() {return *moduleMgr;}
94 
97  StelLocaleMgr& getLocaleMgr() {return *localeMgr;}
98 
101  StelSkyCultureMgr& getSkyCultureMgr() {return *skyCultureMgr;}
102 
105  StelTextureMgr& getTextureManager() {return *textureMgr;}
106 
109  StelLocationMgr& getLocationMgr() {return *planetLocationMgr;}
110 
113  StelObjectMgr& getStelObjectMgr() {return *stelObjectMgr;}
114 
115  StelSkyLayerMgr& getSkyImageMgr() {return *skyImageMgr;}
116 
118  StelAudioMgr* getStelAudioMgr() {return audioMgr;}
119 
121  StelActionMgr* getStelActionManager() {return actionMgr;}
122 
124  StelVideoMgr* getStelVideoMgr() {return videoMgr;}
125 
129  StelCore* getCore() {return core;}
130 
132  QNetworkAccessManager* getNetworkAccessManager() {return networkAccessManager;}
133 
135  void updateI18n();
136 
138  void updateSkyCulture();
139 
141  QSettings* getSettings() {return confSettings;}
142 
144  QString getCurrentStelStyle() {return "color";}
145 
147  void update(double deltaTime);
148 
150  // 2014-11: OLD COMMENT? What does a void return?
151  // @return the max squared distance in pixels that any object has travelled since the last update.
152  void draw();
153 
155  void glWindowHasBeenResized(float x, float y, float w, float h);
156 
159  float getDevicePixelsPerPixel() const {return devicePixelsPerPixel;}
160  void setDevicePixelsPerPixel(float dppp);
161 
165  float getGlobalScalingRatio() const {return globalScalingRatio;}
166  void setGlobalScalingRatio(float r) {globalScalingRatio=r;}
167 
169  int getBaseFontSize() const { return baseFontSize; }
170  void setBaseFontSize(int s) { baseFontSize=s; }
171 
173  StelGuiBase* getGui() const {return stelGui;}
176  void setGui(StelGuiBase* b) {stelGui=b;}
177 
178 #ifndef DISABLE_SCRIPTING
179  StelMainScriptAPIProxy* getMainScriptAPIProxy() {return scriptAPIProxy;}
182  StelScriptMgr& getScriptMgr() {return *scriptMgr;}
183 #endif
184 
185  static void initStatic();
186  static void deinitStatic();
187 
192  void removeProgressBar(StelProgressController* p);
193 
196  void setViewportEffect(const QString& effectName);
198  QString getViewportEffect() const;
199 
201  // Scriptable methods
202 public slots:
203 
205  void setVisionModeNight(bool);
207  bool getVisionModeNight() const {return flagNightVision;}
208 
210  void setFlagShowDecimalDegrees(bool b);
212  bool getFlagShowDecimalDegrees() const {return flagShowDecimalDegrees;}
213 
216  float getFps() const {return fps;}
217 
219  static double getTotalRunTime();
220 
223  void reportFileDownloadFinished(QNetworkReply* reply);
224 
226  void quit();
227 signals:
228  void visionNightModeChanged(bool);
229  void colorSchemeChanged(const QString&);
230  void languageChanged();
231  void skyCultureChanged(const QString&);
232 
238  void aboutToQuit();
239 
240 private:
241 
243  void handleClick(class QMouseEvent* event);
245  void handleWheel(class QWheelEvent* event);
247  void handleMove(float x, float y, Qt::MouseButtons b);
249  void handleKeys(class QKeyEvent* event);
251  void handlePinch(qreal scale, bool started);
252 
253  void initScriptMgr(QSettings* conf);
254 
255  void prepareRenderBuffer();
256  void applyRenderBuffer();
257 
258  // The StelApp singleton
259  static StelApp* singleton;
260 
261  // The associated StelCore instance
262  StelCore* core;
263 
264  // Module manager for the application
265  StelModuleMgr* moduleMgr;
266 
267  // Locale manager for the application
268  StelLocaleMgr* localeMgr;
269 
270  // Sky cultures manager for the application
271  StelSkyCultureMgr* skyCultureMgr;
272 
273  //Actions manager fot the application. Will replace shortcutMgr.
274  StelActionMgr* actionMgr;
275 
276  // Textures manager for the application
277  StelTextureMgr* textureMgr;
278 
279  // Manager for all the StelObjects of the program
280  StelObjectMgr* stelObjectMgr;
281 
282  // Manager for the list of observer locations on planets
283  StelLocationMgr* planetLocationMgr;
284 
285  // Main network manager used for the program
286  QNetworkAccessManager* networkAccessManager;
287 
289  void setupHttpProxy();
290 
291  // The audio manager. Must execute in the main thread.
292  StelAudioMgr* audioMgr;
293 
294  // The video manager. Must execute in the main thread.
295  StelVideoMgr* videoMgr;
296 
297  StelSkyLayerMgr* skyImageMgr;
298 
299 #ifndef DISABLE_SCRIPTING
300  // The script API proxy object (for bridging threads)
301  StelMainScriptAPIProxy* scriptAPIProxy;
302 
303  // The script manager based on Qt script engine
304  StelScriptMgr* scriptMgr;
305 #endif
306 
307 
308 
309  StelGuiBase* stelGui;
310 
311  // Store the ratio between real device pixel in "Device Independent Pixel"
312  // Usually this value is 1, but for a mac with retina screen this will be value 2.
313  float devicePixelsPerPixel;
314 
315  // The scaling ratio to apply on all display elements, like GUI, text etc..
316  float globalScalingRatio;
317 
318  // Used to collect wheel events
319  QTimer * wheelEventTimer;
320 
321  // Accumulated horizontal and vertical wheel event deltas
322  int wheelEventDelta[2];
323 
324  float fps;
325  int frame;
326  double timefr, timeBase; // Used for fps counter
327 
329  bool flagNightVision;
330 
331  QSettings* confSettings;
332 
333  // Define whether the StelApp instance has completed initialization
334  bool initialized;
335 
336  static qint64 startMSecs;
337 
338  // Temporary variables used to store the last gl window resize
339  // if the core was not yet initialized
340  int saveProjW;
341  int saveProjH;
342 
344  int nbDownloadedFiles;
346  qint64 totalDownloadedSize;
347 
349  int nbUsedCache;
351  qint64 totalUsedCacheSize;
352 
353  QList<StelProgressController*> progressControllers;
354 
355  int baseFontSize;
356 
357  // Framebuffer object used for viewport effects.
358  QOpenGLFramebufferObject* renderBuffer;
359 
360  StelViewportEffect* viewportEffect;
361 
362  bool flagShowDecimalDegrees;
363 };
364 
365 #endif // _STELAPP_HPP_
Manage the sky background images, including DSS and deep sky objects images.
StelScriptMgr & getScriptMgr()
Get the script manager.
Definition: StelApp.hpp:182
StelLocationMgr & getLocationMgr()
Get the Location manager to use for managing stored locations.
Definition: StelApp.hpp:109
StelVideoMgr * getStelVideoMgr()
Get the video manager.
Definition: StelApp.hpp:124
bool getFlagShowDecimalDegrees() const
Get flag for showing decimal degree in various places.
Definition: StelApp.hpp:212
void reportFileDownloadFinished(QNetworkReply *reply)
Report that a download occured.
int getBaseFontSize() const
Get the size of font.
Definition: StelApp.hpp:169
float getFps() const
Get the current number of frame per second.
Definition: StelApp.hpp:216
void progressBarRemoved(const StelProgressController *)
Called just before a progress bar is removed.
void updateSkyCulture()
Update and reload sky culture informations everywhere in the program.
StelObjectMgr & getStelObjectMgr()
Get the StelObject manager to use for querying from all stellarium objects.
Definition: StelApp.hpp:113
Manage i18n operations such as message translation and date/time localization.
Main class for Stellarium core processing.
Definition: StelCore.hpp:46
Because the core API runs in a different thread to the main program, direct function calls to some cl...
StelModuleMgr & getModuleMgr()
Get the module manager to use for accessing any module loaded in the application. ...
Definition: StelApp.hpp:93
StelTextureMgr & getTextureManager()
Get the texture manager to use for loading textures.
Definition: StelApp.hpp:105
void deinit()
Deinitialize core and all the modules.
Manage the list of available location.
QNetworkAccessManager * getNetworkAccessManager()
Get the common instance of QNetworkAccessManager used in stellarium.
Definition: StelApp.hpp:132
QString getCurrentStelStyle()
Return the currently used style.
Definition: StelApp.hpp:144
void progressBarAdded(const StelProgressController *)
Called just after a progress bar is added.
Abstract class defining the base interface for all GUIs.
Definition: StelGuiBase.hpp:30
StelMainScriptAPIProxy * getMainScriptAPIProxy()
Get the script API proxy (for signal handling)
Definition: StelApp.hpp:180
void setGui(StelGuiBase *b)
Tell the StelApp instance which GUI si currently being used.
Definition: StelApp.hpp:176
void initPlugIns()
Load and initialize external modules (plugins)
StelActionMgr * getStelActionManager()
Get the actions manager to use for managing and editing actions.
Definition: StelApp.hpp:121
void draw()
Draw all registered StelModule in the order defined by the order lists.
void update(double deltaTime)
Update all object according to the deltaTime in seconds.
Allow to apply visual effects on the whole Stellarium viewport.
Manage a collection of StelModules including both core and plugin modules.
QString getViewportEffect() const
Get the type of viewport effect currently used.
void updateI18n()
Update translations, font for GUI and sky everywhere in the program.
float getGlobalScalingRatio() const
Get the scaling ratio to apply on all display elements, like GUI, text etc.
Definition: StelApp.hpp:165
StelApp(QObject *parent=NULL)
Create and initialize the main Stellarium application.
void quit()
do some cleanup and call QCoreApplication::exit(0)
StelAudioMgr * getStelAudioMgr()
Get the audio manager.
Definition: StelApp.hpp:118
Manage the selection and queries on one or more StelObjects.
Manage scripting in Stellarium.
float getDevicePixelsPerPixel() const
Get the ratio between real device pixel and "Device Independent Pixel".
Definition: StelApp.hpp:159
Manage textures loading.
Maintain the state of a progress bar.
Manage sky cultures for stellarium.
void setVisionModeNight(bool)
Set flag for activating night vision mode.
void glWindowHasBeenResized(float x, float y, float w, float h)
Call this when the size of the GL window has changed.
static double getTotalRunTime()
Return the time since when stellarium is running in second.
void setViewportEffect(const QString &effectName)
Define the type of viewport effect to use.
static StelApp & getInstance()
Get the StelApp singleton instance.
Definition: StelApp.hpp:89
virtual ~StelApp()
Deinitialize and destroy the main Stellarium application.
StelSkyCultureMgr & getSkyCultureMgr()
Get the sky cultures manager.
Definition: StelApp.hpp:101
QSettings * getSettings()
Return the main configuration options.
Definition: StelApp.hpp:141
StelGuiBase * getGui() const
Get the GUI instance implementing the abstract GUI interface.
Definition: StelApp.hpp:173
void setFlagShowDecimalDegrees(bool b)
Set flag for showing decimal degree in various places.
Singleton main Stellarium application class.
Definition: StelApp.hpp:60
StelProgressController * addProgressBar()
Add a progression indicator to the GUI (if applicable).
void aboutToQuit()
Called just before we exit Qt mainloop.
StelCore * getCore()
Get the core of the program.
Definition: StelApp.hpp:129
StelLocaleMgr & getLocaleMgr()
Get the locale manager to use for i18n & date/time localization.
Definition: StelApp.hpp:97
void init(QSettings *conf)
Initialize core and all the modules.
bool getVisionModeNight() const
Get flag for activating night vision mode.
Definition: StelApp.hpp:207