1 /*
2  * Stellarium
3  * Copyright (C) 2002 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 STARMGR_HPP
21 #define STARMGR_HPP
22 
23 #include <QFont>
24 #include <QVariantMap>
25 #include <QVector>
26 #include "StelFader.hpp"
27 #include "StelObjectModule.hpp"
28 #include "StelTextureTypes.hpp"
29 #include "StelProjectorType.hpp"
30 
31 class StelObject;
32 class StelToneReproducer;
33 class StelProjector;
34 class StelPainter;
35 class QSettings;
36 
37 class ZoneArray;
38 struct HipIndexStruct;
39 
40 static const int RCMAG_TABLE_SIZE = 4096;
41 
42 typedef struct
43 {
44 	QString designation;	//! GCVS designation
45 	QString vtype;		//! Type of variability
46 	float maxmag;		//! Magnitude at maximum brightness
47 	int mflag;		//! Magnitude flag code
48 	float min1mag;		//! First minimum magnitude or amplitude
49 	float min2mag;		//! Second minimum magnitude or amplitude
50 	QString photosys;	//! The photometric system for magnitudes
51 	double epoch;		//! Epoch for maximum light (Julian days)
52 	double period;		//! Period of the variable star (days)
53 	int Mm;			//! Rising time or duration of eclipse (%)
54 	QString stype;		//! Spectral type
55 } varstar;
56 
57 typedef struct
58 {
59 	QString designation;	//! WDS designation
60 	int observation;	//! Date of last satisfactory observation, yr
61 	float positionAngle;	//! Position Angle at date of last satisfactory observation, deg
62 	float separation;	//! Separation at date of last satisfactory observation, arcsec
63 } wds;
64 
65 typedef struct
66 {
67 	int sao;
68 	int hd;
69 	int hr;
70 } crossid;
71 
72 typedef QMap<StelObjectP, float> StelACStarData;
73 typedef QPair<float, float> PMData;
74 
75 //! @class StarMgr
76 //! Stores the star catalogue data.
77 //! Used to render the stars themselves, as well as determine the color table
78 //! and render the labels of those stars with names for a given SkyCulture.
79 //!
80 //! The celestial sphere is split into zones, which correspond to the
81 //! triangular faces of a geodesic sphere. The number of zones (faces)
82 //! depends on the level of sub-division of this sphere. The lowest
83 //! level, 0, is an icosahedron (20 faces), subsequent levels, L,
84 //! of sub-division give the number of zones, n as:
85 //!
86 //! n=20 x 4^L
87 //!
88 //! Stellarium uses levels 0 to 7 in the existing star catalogues.
89 //! Star Data Records contain the position of a star as an offset from
90 //! the central position of the zone in which that star is located,
91 //! thus it is necessary to determine the vector from the observer
92 //! to the centre of a zone, and add the star's offsets to find the
93 //! absolute position of the star on the celestial sphere.
94 //!
95 //! This position for a star is expressed as a 3-dimensional vector
96 //! which points from the observer (at the centre of the geodesic sphere)
97 //! to the position of the star as observed on the celestial sphere.
98 class StarMgr : public StelObjectModule
99 {
100 	Q_OBJECT
101 	Q_PROPERTY(bool flagStarsDisplayed
102 		   READ getFlagStars
103 		   WRITE setFlagStars
104 		   NOTIFY starsDisplayedChanged)
105 	Q_PROPERTY(bool flagLabelsDisplayed
106 		   READ getFlagLabels
107 		   WRITE setFlagLabels
108 		   NOTIFY starLabelsDisplayedChanged)
109 	Q_PROPERTY(double labelsAmount
110 		   READ getLabelsAmount
111 		   WRITE setLabelsAmount
112 		   NOTIFY labelsAmountChanged)
113 	Q_PROPERTY(bool flagAdditionalNamesDisplayed
114 		   READ getFlagAdditionalNames
115 		   WRITE setFlagAdditionalNames
116 		   NOTIFY flagAdditionalNamesDisplayedChanged
117 		   )
118 	Q_PROPERTY(bool flagDesignationLabels
119 		   READ getDesignationUsage
120 		   WRITE setDesignationUsage
121 		   NOTIFY designationUsageChanged
122 		   )
123 	Q_PROPERTY(bool flagDblStarsDesignation
124 		   READ getFlagDblStarsDesignation
125 		   WRITE setFlagDblStarsDesignation
126 		   NOTIFY flagDblStarsDesignationChanged
127 		   )
128 	Q_PROPERTY(bool flagVarStarsDesignation
129 		   READ getFlagVarStarsDesignation
130 		   WRITE setFlagVarStarsDesignation
131 		   NOTIFY flagVarStarsDesignationChanged
132 		   )
133 	Q_PROPERTY(bool flagHIPDesignation
134 		   READ getFlagHIPDesignation
135 		   WRITE setFlagHIPDesignation
136 		   NOTIFY flagHIPDesignationChanged
137 		   )
138 
139 public:
140 	StarMgr(void);
141 	~StarMgr(void) Q_DECL_OVERRIDE;
142 
143 	///////////////////////////////////////////////////////////////////////////
144 	// Methods defined in the StelModule class
145 	//! Initialize the StarMgr.
146 	//! - Loads the star catalogue data into memory
147 	//! - Sets up the star color table
148 	//! - Loads the star texture
149 	//! - Loads the star font (for labels on named stars)
150 	//! - Loads the texture of the star selection indicator
151 	//! - Sets various display flags from the ini parser object
152 	virtual void init() Q_DECL_OVERRIDE;
153 
154 	//! Draw the stars and the star selection indicator if necessary.
155 	virtual void draw(StelCore* core) Q_DECL_OVERRIDE;
156 
157 	//! Update any time-dependent features.
158 	//! Includes fading in and out stars and labels when they are turned on and off.
update(double deltaTime)159 	virtual void update(double deltaTime) Q_DECL_OVERRIDE {labelsFader.update(static_cast<int>(deltaTime*1000)); starsFader.update(static_cast<int>(deltaTime*1000));}
160 
161 	//! Used to determine the order in which the various StelModules are drawn.
162 	virtual double getCallOrder(StelModuleActionName actionName) const Q_DECL_OVERRIDE;
163 
164 	///////////////////////////////////////////////////////////////////////////
165 	// Methods defined in StelObjectModule class
166 	//! Return a list containing the stars located inside the limFov circle around position v
167 	virtual QList<StelObjectP > searchAround(const Vec3d& v, double limitFov, const StelCore* core) const Q_DECL_OVERRIDE;
168 
169 	//! Return the matching Stars object's pointer if exists or Q_NULLPTR
170 	//! @param nameI18n The case in-sensitive localized star common name or HIP/HP, SAO, HD, HR, GCVS or WDS number
171 	//! catalog name (format can be HP1234 or HP 1234 or HIP 1234) or sci name
172 	virtual StelObjectP searchByNameI18n(const QString& nameI18n) const Q_DECL_OVERRIDE;
173 
174 	//! Return the matching star if exists or Q_NULLPTR
175 	//! @param name The case in-sensitive english star name
176 	virtual StelObjectP searchByName(const QString& name) const Q_DECL_OVERRIDE;
177 
178 	//! Same as searchByName(id);
179 	virtual StelObjectP searchByID(const QString &id) const Q_DECL_OVERRIDE;
180 
181 	//! Find and return the list of at most maxNbItem objects auto-completing the passed object English name.
182 	//! @param objPrefix the case insensitive first letters of the searched object
183 	//! @param maxNbItem the maximum number of returned object names
184 	//! @param useStartOfWords the autofill mode for returned objects names
185 	//! @return a list of matching object name by order of relevance, or an empty list if nothing match
186 	virtual QStringList listMatchingObjects(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const Q_DECL_OVERRIDE;
187 	//! @note Loading stars with the common names only.
188 	virtual QStringList listAllObjects(bool inEnglish) const Q_DECL_OVERRIDE;
189 	virtual QStringList listAllObjectsByType(const QString& objType, bool inEnglish) const Q_DECL_OVERRIDE;
getName() const190 	virtual QString getName() const Q_DECL_OVERRIDE { return "Stars"; }
191 	virtual QString getStelObjectType() const Q_DECL_OVERRIDE;
192 
193 public slots:
194 	///////////////////////////////////////////////////////////////////////////
195 	// Methods callable from script and GUI
196 	//! Set display flag for Stars.
setFlagStars(bool b)197 	void setFlagStars(bool b) {starsFader=b; emit starsDisplayedChanged(b);}
198 	//! Get display flag for Stars
getFlagStars(void) const199 	bool getFlagStars(void) const {return starsFader==true;}
200 
201 	//! Set display flag for Star names (labels).
setFlagLabels(bool b)202 	void setFlagLabels(bool b) {labelsFader=b; emit starLabelsDisplayedChanged(b);}
203 	//! Get display flag for Star names (labels).
getFlagLabels(void) const204 	bool getFlagLabels(void) const {return labelsFader==true;}
205 
206 	//! Set the amount of star labels. The real amount is also proportional with FOV.
207 	//! The limit is set in function of the stars magnitude
208 	//! @param a the amount between 0 and 10. 0 is no labels, 10 is maximum of labels
setLabelsAmount(double a)209 	void setLabelsAmount(double a) {if(!qFuzzyCompare(a,labelsAmount)){ labelsAmount=a; emit labelsAmountChanged(a);}}
210 	//! Get the amount of star labels. The real amount is also proportional with FOV.
211 	//! @return the amount between 0 and 10. 0 is no labels, 10 is maximum of labels
getLabelsAmount(void) const212 	double getLabelsAmount(void) const {return labelsAmount;}
213 
214 	//! Define font size to use for star names display.
215 	void setFontSize(int newFontSize);
216 
217 	//! Show scientific or catalog names on stars without common names.
setFlagSciNames(bool f)218 	static void setFlagSciNames(bool f) {flagSciNames = f;}
getFlagSciNames(void)219 	static bool getFlagSciNames(void) {return flagSciNames;}
220 
221 	//! Set flag for usage designations of stars for their labels instead common names.
setDesignationUsage(const bool flag)222 	void setDesignationUsage(const bool flag) { if(flagDesignations!=flag){ flagDesignations=flag; emit designationUsageChanged(flag);}}
223 	//! Get flag for usage designations of stars for their labels instead common names.
getDesignationUsage(void)224 	static bool getDesignationUsage(void) {return flagDesignations; }
225 
226 	//! Set flag for usage traditional designations of double stars.
setFlagDblStarsDesignation(const bool flag)227 	void setFlagDblStarsDesignation(const bool flag) { if(flagDblStarsDesignation!=flag){ flagDblStarsDesignation=flag; emit flagDblStarsDesignationChanged(flag);}}
228 	//! Get flag for usage traditional designations of double stars.
getFlagDblStarsDesignation(void)229 	static bool getFlagDblStarsDesignation(void) {return flagDblStarsDesignation; }
230 
231 	//! Set flag for usage designations of variable stars.
setFlagVarStarsDesignation(const bool flag)232 	void setFlagVarStarsDesignation(const bool flag) { if(flagVarStarsDesignation!=flag){ flagVarStarsDesignation=flag; emit flagVarStarsDesignationChanged(flag);}}
233 	//! Get flag for usage designations of variable stars.
getFlagVarStarsDesignation(void)234 	static bool getFlagVarStarsDesignation(void) {return flagVarStarsDesignation; }
235 
236 	//! Set flag for usage Hipparcos catalog designations of stars.
setFlagHIPDesignation(const bool flag)237 	void setFlagHIPDesignation(const bool flag) { if(flagHIPDesignation!=flag){ flagHIPDesignation=flag; emit flagHIPDesignationChanged(flag);}}
238 	//! Get flag for usage Hipparcos catalog designations of stars.
getFlagHIPDesignation(void)239 	static bool getFlagHIPDesignation(void) {return flagHIPDesignation; }
240 
241 	//! Show additional star names.
setFlagAdditionalNames(bool flag)242 	void setFlagAdditionalNames(bool flag) { if (flagAdditionalStarNames!=flag){ flagAdditionalStarNames=flag; emit flagAdditionalNamesDisplayedChanged(flag);}}
getFlagAdditionalNames(void)243 	static bool getFlagAdditionalNames(void) { return flagAdditionalStarNames; }
244 
245 public:
246 	///////////////////////////////////////////////////////////////////////////
247 	// Other methods
248 	//! Search by Hipparcos catalogue number.
249 	//! @param hip the Hipparcos catalogue number of the star which is required.
250 	//! @return the requested StelObjectP or an empty objecy if the requested
251 	//! one was not found.
252 	StelObjectP searchHP(int hip) const;
253 
254 	//! Get the (translated) common name for a star with a specified
255 	//! Hipparcos catalogue number.
256 	//! @param hip The Hipparcos number of star
257 	//! @return translated common name of star
258 	static QString getCommonName(int hip);
259 
260 	//! Get the (translated) scientific name for a star with a specified
261 	//! Hipparcos catalogue number.
262 	//! @param hip The Hipparcos number of star
263 	//! @return translated scientific name of star
264 	static QString getSciName(int hip);
265 
266 	//! Get the (translated) scientific extra name for a star with a specified
267 	//! Hipparcos catalogue number.
268 	//! @param hip The Hipparcos number of star
269 	//! @return translated scientific name of star
270 	static QString getSciExtraName(int hip);
271 
272 	//! Get the (translated) scientific name for a variable star with a specified
273 	//! Hipparcos catalogue number.
274 	//! @param hip The Hipparcos number of star
275 	//! @return translated scientific name of variable star
276 	static QString getGcvsName(int hip);
277 
278 	//! Get the (translated) scientific name for a double star with a specified
279 	//! Hipparcos catalogue number.
280 	//! @param hip The Hipparcos number of star
281 	//! @return translated scientific name of double star
282 	static QString getWdsName(int hip);
283 
284 	//! Get the (English) common name for a star with a specified
285 	//! Hipparcos catalogue number.
286 	//! @param hip The Hipparcos number of star
287 	//! @return common name of star (from skyculture file star_names.fab)
288 	static QString getCommonEnglishName(int hip);
289 
290 	//! Get the (translated) additional names for a star with a specified
291 	//! Hipparcos catalogue number.
292 	//! @param hip The Hipparcos number of star
293 	//! @return translated additional names of star
294 	static QString getAdditionalNames(int hip);
295 
296 	//! Get the English additional names for a star with a specified
297 	//! Hipparcos catalogue number.
298 	//! @param hip The Hipparcos number of star
299 	//! @return additional names of star
300 	static QString getAdditionalEnglishNames(int hip);
301 
302 	//! Get the cross-identification designations for a star with a specified
303 	//! Hipparcos catalogue number.
304 	//! @param hip The Hipparcos number of star
305 	//! @return cross-identification data
306 	static QString getCrossIdentificationDesignations(QString hip);
307 
308 	//! Get the type of variability for a variable star with a specified
309 	//! Hipparcos catalogue number.
310 	//! @param hip The Hipparcos number of star
311 	//! @return type of variability
312 	static QString getGcvsVariabilityType(int hip);
313 
314 	//! Get the magnitude at maximum brightness for a variable star with a specified
315 	//! Hipparcos catalogue number.
316 	//! @param hip The Hipparcos number of star
317 	//! @return the magnitude at maximum brightness for a variable star
318 	static float getGcvsMaxMagnitude(int hip);
319 
320 	//! Get the magnitude flag code for a variable star with a specified
321 	//! Hipparcos catalogue number.
322 	//! @param hip The Hipparcos number of star
323 	//! @return the magnitude flag code for a variable star
324 	static int getGcvsMagnitudeFlag(int hip);
325 
326 	//! Get the minimum magnitude or amplitude for a variable star with a specified
327 	//! Hipparcos catalogue number.
328 	//! @param hip The Hipparcos number of star
329 	//! @param firstMinimumFlag
330 	//! @return the minimum magnitude or amplitude for a variable star
331 	static float getGcvsMinMagnitude(int hip, bool firstMinimumFlag=true);
332 
333 	//! Get the photometric system for a variable star with a specified
334 	//! Hipparcos catalogue number.
335 	//! @param hip The Hipparcos number of star
336 	//! @return the photometric system for a variable star
337 	static QString getGcvsPhotometricSystem(int hip);
338 
339 	//! Get Epoch for maximum light for a variable star with a specified
340 	//! Hipparcos catalogue number.
341 	//! @param hip The Hipparcos number of star
342 	//! @return Epoch for maximum light for a variable star
343 	static double getGcvsEpoch(int hip);
344 
345 	//! Get the period for a variable star with a specified
346 	//! Hipparcos catalogue number.
347 	//! @param hip The Hipparcos number of star
348 	//! @return the period of variable star
349 	static double getGcvsPeriod(int hip);
350 
351 	//! Get the rising time or duration of eclipse for a variable star with a
352 	//! specified Hipparcos catalogue number.
353 	//! @param hip The Hipparcos number of star
354 	//! @return the rising time or duration of eclipse for variable star
355 	static int getGcvsMM(int hip);
356 
357 	//! Get year of last satisfactory observation of double star with a
358 	//! Hipparcos catalogue number.
359 	//! @param hip The Hipparcos number of star
360 	//! @return year of last satisfactory observation
361 	static int getWdsLastObservation(int hip);
362 
363 	//! Get position angle at date of last satisfactory observation of double star with a
364 	//! Hipparcos catalogue number.
365 	//! @param hip The Hipparcos number of star
366 	//! @return position angle in degrees
367 	static float getWdsLastPositionAngle(int hip);
368 
369 	//! Get separation angle at date of last satisfactory observation of double star with a
370 	//! Hipparcos catalogue number.
371 	//! @param hip The Hipparcos number of star
372 	//! @return separation in arcseconds
373 	static float getWdsLastSeparation(int hip);
374 
375 	//! Get the parallax error for star with a Hipparcos catalogue number.
376 	//! @param hip The Hipparcos number of star
377 	//! @return the parallax error (mas)
378 	static float getPlxError(int hip);
379 
380 	//! Get the proper motion data for star with a Hipparcos catalogue number.
381 	//! @param hip The Hipparcos number of star
382 	//! @return the proper motion (mas/yr for RA and Dec)
383 	static PMData getProperMotion(int hip);
384 
385 	static QString convertToSpectralType(int index);
386 	static QString convertToComponentIds(int index);
387 
getCatalogsDescription() const388 	QVariantList getCatalogsDescription() const {return catalogsDescription;}
389 
390 	//! Try to load the given catalog, even if it is marched as unchecked.
391 	//! Mark it as checked if checksum is correct.
392 	//! @return false in case of failure.
393 	bool checkAndLoadCatalog(const QVariantMap& m);
394 
395 	//! Get the list of all Hipparcos stars.
getHipparcosStars() const396 	const QList<StelObjectP>& getHipparcosStars() const { return hipparcosStars; }
getHipparcosHighPMStars() const397 	const QList<QMap<StelObjectP, float>>& getHipparcosHighPMStars() const { return hipStarsHighPM; }
getHipparcosDoubleStars() const398 	const QList<QMap<StelObjectP, float>>& getHipparcosDoubleStars() const { return doubleHipStars; }
getHipparcosVariableStars() const399 	const QList<QMap<StelObjectP, float>>& getHipparcosVariableStars() const { return variableHipStars; }
getHipparcosAlgolTypeStars() const400 	const QList<QMap<StelObjectP, float>>& getHipparcosAlgolTypeStars() const { return algolTypeStars; }
getHipparcosClassicalCepheidsTypeStars() const401 	const QList<QMap<StelObjectP, float>>& getHipparcosClassicalCepheidsTypeStars() const { return classicalCepheidsTypeStars; }
getHipparcosCarbonStars() const402 	const QList<StelObjectP>& getHipparcosCarbonStars() const { return carbonStars; }
getHipparcosBariumStars() const403 	const QList<StelObjectP>& getHipparcosBariumStars() const { return bariumStars; }
404 
405 private slots:
406 	//! Translate text.
407 	void updateI18n();
408 
409 	//! Called when the sky culture is updated.
410 	//! Loads common and scientific names of stars for a given sky culture.
411 	//! @param skyCultureDir the name of the directory containing the sky culture to use.
412 	void updateSkyCulture(const QString& skyCultureDir);
413 
414 	//! increase artificial cutoff magnitude slightly (can be linked to an action/hotkey)
415 	void increaseStarsMagnitudeLimit();
416 	//! decrease artificial cutoff magnitude slightly (can be linked to an action/hotkey)
417 	void reduceStarsMagnitudeLimit();
418 
419 signals:
420 	void starLabelsDisplayedChanged(const bool displayed);
421 	void starsDisplayedChanged(const bool displayed);
422 	void designationUsageChanged(const bool flag);
423 	void flagDblStarsDesignationChanged(const bool flag);
424 	void flagVarStarsDesignationChanged(const bool flag);
425 	void flagHIPDesignationChanged(const bool flag);
426 	void flagAdditionalNamesDisplayedChanged(const bool displayed);
427 	void labelsAmountChanged(double a);
428 
429 private:
430 	void setCheckFlag(const QString& catalogId, bool b);
431 
432 	void copyDefaultConfigFile();
433 
434 	//! Loads common names for stars from a file.
435 	//! Called when the SkyCulture is updated.
436 	//! @param the path to a file containing the common names for bright stars.
437 	//! @note Stellarium doesn't support sky cultures made prior version 0.10.6 now!
438 	int loadCommonNames(const QString& commonNameFile);
439 
440 	//! Loads scientific names for stars from a file.
441 	//! Called when the SkyCulture is updated.
442 	//! @param the path to a file containing the scientific names for bright stars.
443 	//! @param flag to load the extra designations
444 	void loadSciNames(const QString& sciNameFile, const bool extraData);
445 
446 	//! Loads GCVS from a file.
447 	//! @param the path to a file containing the GCVS.
448 	void loadGcvs(const QString& GcvsFile);
449 
450 	//! Loads WDS from a file.
451 	//! @param the path to a file containing the WDS.
452 	void loadWds(const QString& WdsFile);
453 
454 	//! Loads cross-identification data from a file.
455 	//! @param the path to a file containing the cross-identification data.
456 	void loadCrossIdentificationData(const QString& crossIdFile);
457 
458 	//! Loads parallax error data from a file.
459 	//! @param the path to a file containing the parallax error data.
460 	void loadPlxErr(const QString& plxErrFile);
461 
462 	//! Loads proper motion data from a file.
463 	//! @param the path to a file containing the proper motion data.
464 	void loadPMData(const QString& pmDataFile);
465 
466 	//! Gets the maximum search level.
467 	// TODO: add a non-lame description - what is the purpose of the max search level?
468 	int getMaxSearchLevel() const;
469 
470 	//! Load all the stars from the files.
471 	void loadData(QVariantMap starsConfigFile);
472 
473 	//! Draw a nice animated pointer around the object.
474 	void drawPointer(StelPainter& sPainter, const StelCore* core);
475 
476 	void populateHipparcosLists();
477 	void populateStarsDesignations();
478 
479 	//! List of all Hipparcos stars.
480 	QList<StelObjectP> hipparcosStars, carbonStars, bariumStars;
481 	QList<QMap<StelObjectP, float>> doubleHipStars, variableHipStars, algolTypeStars, classicalCepheidsTypeStars, hipStarsHighPM;
482 
483 	LinearFader labelsFader;
484 	LinearFader starsFader;
485 
486 	bool flagStarName;
487 	double labelsAmount;
488 	bool gravityLabel;
489 
490 	int maxGeodesicGridLevel;
491 	int lastMaxSearchLevel;
492 
493 	// A ZoneArray per grid level
494 	QVector<ZoneArray*> gridLevels;
initTriangleFunc(int lev,int index,const Vec3f & c0,const Vec3f & c1,const Vec3f & c2,void * context)495 	static void initTriangleFunc(int lev, int index,
496 								 const Vec3f &c0,
497 								 const Vec3f &c1,
498 								 const Vec3f &c2,
499 								 void *context)
500 	{
501 		reinterpret_cast<StarMgr*>(context)->initTriangle(lev, index, c0, c1, c2);
502 	}
503 
504 	void initTriangle(int lev, int index,
505 					  const Vec3f &c0,
506 					  const Vec3f &c1,
507 					  const Vec3f &c2);
508 
509 	HipIndexStruct *hipIndex; // array of Hipparcos stars
510 
511 	static QHash<int, QString> commonNamesMap;     // the original names from skyculture (star_names.fab)
512 	static QHash<int, QString> commonNamesMapI18n; // translated names
513 	static QMap<QString, int> commonNamesIndexI18n;
514 	static QMap<QString, int> commonNamesIndex;
515 
516 	static QHash<int, QString> additionalNamesMap; // additional names
517 	static QHash<int, QString> additionalNamesMapI18n;
518 	static QMap<QString, int> additionalNamesIndex;
519 	static QMap<QString, int> additionalNamesIndexI18n;
520 
521 	static QHash<int, QString> sciDesignationsMapI18n;
522 	static QMap<QString, int> sciDesignationsIndexI18n;
523 	static QHash<int, QString> sciExtraDesignationsMapI18n;
524 	static QMap<QString, int> sciExtraDesignationsIndexI18n;
525 
526 	static QHash<int, varstar> varStarsMapI18n;
527 	static QMap<QString, int> varStarsIndexI18n;
528 
529 	static QHash<int, wds> wdsStarsMapI18n;
530 	static QMap<QString, int> wdsStarsIndexI18n;
531 
532 	static QMap<QString, crossid> crossIdMap;
533 	static QMap<int, int> saoStarsIndex;
534 	static QMap<int, int> hdStarsIndex;
535 	static QMap<int, int> hrStarsIndex;
536 
537 	static QHash<int, float> hipParallaxErrors;
538 	static QHash<int, PMData> hipPMData;
539 
540 	static QHash<int, QString> referenceMap;
541 
542 	QFont starFont;
543 	static bool flagSciNames;
544 	static bool flagAdditionalStarNames;
545 	static bool flagDesignations;
546 	static bool flagDblStarsDesignation;
547 	static bool flagVarStarsDesignation;
548 	static bool flagHIPDesignation;
549 
550 	StelTextureSP texPointer;		// The selection pointer texture
551 
552 	class StelObjectMgr* objectMgr;
553 
554 	QString starConfigFileFullPath;
555 	QVariantMap starSettings;
556 	QVariantList catalogsDescription;
557 };
558 
559 
560 #endif // STARMGR_HPP
561 
562