summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/kstarsdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/kstarsdata.h')
-rw-r--r--kstars/kstars/kstarsdata.h777
1 files changed, 777 insertions, 0 deletions
diff --git a/kstars/kstars/kstarsdata.h b/kstars/kstars/kstarsdata.h
new file mode 100644
index 00000000..3df7292c
--- /dev/null
+++ b/kstars/kstars/kstarsdata.h
@@ -0,0 +1,777 @@
+/***************************************************************************
+ kstarsdata.h - K Desktop Planetarium
+ -------------------
+ begin : Sun Jul 29 2001
+ copyright : (C) 2001 by Heiko Evermann
+ email : heiko@evermann.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSTARSDATA_H
+#define KSTARSDATA_H
+
+#include <qmap.h>
+#include <qptrlist.h>
+#include <qstring.h>
+
+#include <kshortcut.h>
+
+#include <iostream>
+
+#include "fov.h"
+#include "geolocation.h"
+#include "colorscheme.h"
+#include "objectnamelist.h"
+#include "planetcatalog.h"
+#include "tools/lcgenerator.h"
+#include "kstarsdatetime.h"
+#include "simclock.h"
+
+#define NHIPFILES 127
+#define NMWFILES 11
+#define NNGCFILES 14
+#define NTYPENAME 12
+#define NCIRCLE 360 //number of points used to define equator, ecliptic and horizon
+
+#define MINZOOM 200.
+#define MAXZOOM 1000000.
+#define DEFAULTZOOM 2000.
+#define DZOOM 1.10
+#define AU_KM 1.49605e8 //km in one AU
+
+#define MINDRAWSTARMAG 6.5 // min. magnitude to load all stars which are needed for constellation lines
+
+class QDataPump;
+class QFile;
+class QTimer;
+
+class KStandardDirs;
+
+class dms;
+class SkyMap;
+class SkyPoint;
+class SkyObject;
+class DeepSkyObject;
+class StarObject;
+class KSPlanet;
+class KSAsteroid;
+class KSComet;
+class KSMoon;
+class PlanetCatalog;
+class JupiterMoons;
+
+class TimeZoneRule;
+class FileSource;
+class StarDataSink;
+class KSFileReader;
+class INDIHostsInfo;
+class ADVTreeData;
+class CSegment;
+class CustomCatalog;
+
+/**@class KStarsData
+ *KStarsData manages all the data objects used by KStars: Lists of stars, deep-sky objects,
+ *planets, geographic locations, and constellations. Also, the milky way, and URLs for
+ *images and information pages.
+ *
+ *@author Heiko Evermann
+ *@version 1.0
+ */
+
+class KStarsData : public QObject
+{
+ Q_OBJECT
+public:
+ //Friend classes can see the private data.
+ friend class FindDialog;
+ friend class KStars;
+ friend class KSWizard;
+ friend class LocationDialog;
+ friend class FOVDialog;
+ friend class MapCanvas;
+ friend class SkyMap;
+ friend class FileSource;
+ friend class StarDataSink;
+ friend class LCGenerator;
+ friend class DetailDialog;
+ friend class AltVsTime;
+ friend class KSPopupMenu;
+ friend class WUTDialog;
+ friend class INDIDriver;
+ friend class INDI_P;
+ friend class INDIStdProperty;
+ friend class PlanetViewer;
+ friend class JMoonTool;
+ friend class telescopeWizardProcess;
+ friend class KSNewStuff;
+ friend class ObservingList;
+ friend class ObsListWizard;
+
+ /**Constructor. */
+ KStarsData();
+
+ /**Destructor. Delete data objects. */
+ virtual ~KStarsData();
+
+ /**Populate list of geographic locations from "Cities.dat". Also check for custom
+ *locations file "mycities.dat", but don't require it. Each line in the file
+ *provides the information required to create one GeoLocation object.
+ *@short Fill list of geographic locations from file(s)
+ *@return true if at least one city read successfully.
+ *@see KStarsData::processCity()
+ */
+ bool readCityData( void );
+
+ /**Read the data file that contains daylight savings time rules.
+ */
+ bool readTimeZoneRulebook( void );
+
+ /**Parse one line from a locations database file. The line contains 10 or 11 fields
+ *separated by colons (":"). The fields are:
+ *@li City Name [string]
+ *@li Province Name (optional) [string]
+ *@li Country Name [string]
+ *@li Longitude degrees [int]
+ *@li Latitude arcminutes [int]
+ *@li Latitude arcseconds [int]
+ *@li Latitude sign [char; 'E' or 'W' ]
+ *@li Latitude degrees [int]
+ *@li Latitude arcminutes [int]
+ *@li Latitude arcseconds [int]
+ *@li Latitude sign [char; 'N' or 'S' ]
+ *@li Timezone [float; -12 <= TZ <= 12, or 'x' if TZ unknown]
+ *
+ *@short Parse one line from a geographic database
+ *@param line The line from the geographic database to be parsed
+ *@return true if location successfully parsed; otherwise false.
+ *@see KStarsData::readCityData()
+ */
+ bool processCity( QString& line );
+
+ /**Populate list of star objects from the stars database file.
+ *Each line in the file provides the information required to construct a
+ *SkyObject of type 'star'.
+ *@short read the stars database, constructing the list of SkyObjects that represent the stars.
+ *@return true if the data file was successfully opened and read.
+ *@see KStarsData::processStar()
+ */
+ bool readStarData( void );
+
+ /**Parse a line from a stars data file, constructing a StarObject from the data.
+ *The StarObject is added to the list of stars.
+ *
+ *Each line is parsed according to the column
+ *position in the line:
+ *@li 0-1 RA hours [int]
+ *@li 2-3 RA minutes [int]
+ *@li 4-8 RA seconds [float]
+ *@li 10 Dec sign [char; '+' or '-']
+ *@li 11-12 Dec degrees [int]
+ *@li 13-14 Dec minutes [int]
+ *@li 15-18 Dec seconds [float]
+ *@li 20-28 dRA/dt (milli-arcsec/yr) [float]
+ *@li 29-37 dDec/dt (milli-arcsec/yr) [float]
+ *@li 38-44 Parallax (milli-arcsec) [float]
+ *@li 46-50 Magnitude [float]
+ *@li 51-55 B-V color index [float]
+ *@li 56-57 Spectral type [string]
+ *@li 59 Multiplicity flag (1=true, 0=false) [int]
+ *@li 61-64 Variability range of brightness (magnitudes; bank if not variable) [float]
+ *@li 66-71 Variability period (days; blank if not variable) [float]
+ *@li 72-END Name(s) [string]. This field may be blank. The string is the common
+ * name for the star (e.g., "Betelgeuse"). If there is a colon, then
+ * everything after the colon is the genetive name for the star (e.g.,
+ * "alpha Orionis").
+ *
+ *@param line pointer to the line of data to be processed as a StarObject
+ *@param reloadMode makes additional calculations in reload mode, not needed at start up
+ *@see KStarsData::readStarData()
+ */
+ void processStar( QString *line, bool reloadMode = false );
+
+ /**Populate the list of deep-sky objects from the database file.
+ *Each line in the file is parsed according to column position:
+ *@li 0 IC indicator [char] If 'I' then IC object; if ' ' then NGC object
+ *@li 1-4 Catalog number [int] The NGC/IC catalog ID number
+ *@li 6-8 Constellation code (IAU abbreviation)
+ *@li 10-11 RA hours [int]
+ *@li 13-14 RA minutes [int]
+ *@li 16-19 RA seconds [float]
+ *@li 21 Dec sign [char; '+' or '-']
+ *@li 22-23 Dec degrees [int]
+ *@li 25-26 Dec minutes [int]
+ *@li 28-29 Dec seconds [int]
+ *@li 31 Type ID [int] Indicates object type; see TypeName array in kstars.cpp
+ *@li 33-36 Type details [string] (not yet used)
+ *@li 38-41 Magnitude [float] can be blank
+ *@li 43-48 Major axis length, in arcmin [float] can be blank
+ *@li 50-54 Minor axis length, in arcmin [float] can be blank
+ *@li 56-58 Position angle, in degrees [int] can be blank
+ *@li 60-62 Messier catalog number [int] can be blank
+ *@li 64-69 PGC Catalog number [int] can be blank
+ *@li 71-75 UGC Catalog number [int] can be blank
+ *@li 77-END Common name [string] can be blank
+ *@short Read the ngcic.dat deep-sky database.
+ *@return true if data file is successfully read.
+ */
+ bool readDeepSkyData( void );
+
+ /**Populate the list of Asteroids from the data file.
+ *Each line in the data file is parsed as follows:
+ *@li 6-23 Name [string]
+ *@li 24-29 Modified Julian Day of orbital elements [int]
+ *@li 30-39 semi-major axis of orbit in AU [double]
+ *@li 41-51 eccentricity of orbit [double]
+ *@li 52-61 inclination angle of orbit in degrees [double]
+ *@li 62-71 argument of perihelion in degrees [double]
+ *@li 72-81 Longitude of the Ascending Node in degrees [double]
+ *@li 82-93 Mean Anomaly in degrees [double]
+ *@li 94-98 Magnitude [double]
+ */
+ bool readAsteroidData( void );
+
+ /**Populate the list of Comets from the data file.
+ *Each line in the data file is parsed as follows:
+ *@li 3-37 Name [string]
+ *@li 38-42 Modified Julian Day of orbital elements [double]
+ *@li 44-54 Perihelion distance in AU [double]
+ *@li 55-65 Eccentricity of orbit [double]
+ *@li 66-75 inclination of orbit in degrees [double]
+ *@li 76-85 argument of perihelion in degrees [double]
+ *@li 86-95 longitude of the ascending node in degrees[double]
+ *@li 96-110 Period of orbit in years [double]
+ */
+ bool readCometData( void );
+
+ /**Read in Constellation line data. The constellations are represented as a list of
+ *SkyPoints and an associated list of chars that indicates whether to draw a line
+ *between points (i) and (i+1) or to simply move to point (i+1). The lines are parsed
+ *according to column position:
+ *@li 0-1 RA hours [int]
+ *@li 2-3 RA minutes [int]
+ *@li 4-5 RA seconds [int]
+ *@li 6 Dec sign [char; '+' or '-']
+ *@li 7-9 Dec degrees [int]
+ *@li 10-11 Dec minutes [int]
+ *@li 12-13 Dec seconds [int]
+ *@li 14 draw indicator [char; 'D' or 'M'] 'D'==draw line; 'M'==just move
+ *
+ *@short Read in constellation line data.
+ *@return true if data file was successfully read
+ */
+ bool readCLineData( void );
+
+ /**Read constellation names. The coordinates are where the constellation name text
+ *will be centered. The positions are imprecise, but that's okay since
+ *constellations are so large. The lines are parsed according to column position:
+ *@li 0-1 RA hours [int]
+ *@li 2-3 RA minutes [int]
+ *@li 4-5 RA seconds [int]
+ *@li 6 Dec sign [char; '+' or '-']
+ *@li 7-8 Dec degrees [int]
+ *@li 9-10 Dec minutes [int]
+ *@li 11-12 Dec seconds [int]
+ *@li 13-15 IAU Abbreviation [string] e.g., 'Ori' == Orion
+ *@li 17- Constellation name [string]
+ *@short Read in constellation name data.
+ *@return TRUE if data file was successfully read.
+ */
+ bool readCNameData( void );
+
+ /**Read constellation boundary data. The boundary data is defined by a series of
+ *RA,Dec coordinate pairs defining the "nodes" of the boundaries. The nodes are
+ *organized into "segments", such that each segment represents a continuous series
+ *of boundary-line intervals that divide two particular constellations.
+ *
+ *The definition of a segment begins with an integer describing the number of Nodes
+ *in the segment. This is followed by that number of RA,Dec pairs (RA in hours,
+ *Dec in degrees). Finally, there is an integer indicating the number of
+ *constellations bordered by this segment (this number is always 2), followed by
+ *the IAU abbreviations of the two constellations.
+ *
+ *Since the definition of a segment can span multiple lines, we parse this file
+ *word-by-word, rather than line-by-line as we do in other files.
+ *
+ *@short Read in the constellation boundary data.
+ *@return TRUE if the boundary data is successfully parsed.
+ */
+ bool readCBoundData( void );
+
+ /**Read Milky Way data. Coordinates for the Milky Way contour are divided into 11
+ *files, each representing a simple closed curve that can be drawn with
+ *drawPolygon(). The lines in each file are parsed according to column position:
+ *@li 0-7 RA [float]
+ *@li 9-16 Dec [float]
+ *@short read Milky Way contour data.
+ *@return true if all MW files were successfully read
+ */
+ bool readMWData( void );
+
+ /**Read Variable Stars data and stores them in structure of type VariableStarsInfo.
+ *@li 0-8 AAVSO Star Designation
+ *@li 10-20 Common star name
+ *@short read Variable Stars data.
+ *@return true if data is successfully read.
+ */
+ bool readVARData(void);
+
+ //TODO JM: ADV tree should use XML instead
+ /**Read Advanced interface structure to be used later to construct the list view in
+ *the advanced tab in the Detail Dialog.
+ *@li KSLABEL designates a top-level parent label
+ *@li KSINTERFACE designates a common URL interface for several objects
+ *@li END designates the end of a sub tree structure
+ *@short read Advanted interface structure.
+ *@return true if data is successfully read.
+ */
+ bool readADVTreeData(void);
+
+ /**Read INDI hosts from an XML file*/
+ bool readINDIHosts(void);
+
+ //TODO JM: Use XML instead; The logger should have more features
+ // that allow users to enter details about their observation logs
+ // objects observed, eye pieces, telescope, conditions, mag..etc
+ /**Read user logs. The log file is formatted as following:
+ *@li KSLABEL designates the beginning of a log
+ *@li KSLogEnd designates the end of a log.
+ *@short read user logs.
+ *@return true if data is successfully read.
+ */
+ bool readUserLog(void);
+
+ /**Read in URLs to be attached to a named object's right-click popup menu. At this
+ *point, there is no way to attach URLs to unnamed objects. There are two
+ *kinds of URLs, each with its own data file: image links and webpage links. In addition,
+ *there may be user-specific versions with custom URLs. Each line contains 3 fields
+ *separated by colons (":"). Note that the last field is the URL, and as such it will
+ *generally contain a colon itself. Only the first two colons encountered are treated
+ *as field separators. The fields are:
+ *@li Object name. This must be the "primary" name of the object (the name at the top of the popup menu).
+ *@li Menu text. The string that should appear in the popup menu to activate the link.
+ *@li URL.
+ *@short Read in image and information URLs.
+ *@return true if data files were successfully read.
+ */
+ bool readURLData( QString url, int type=0, bool deepOnly=false );
+
+ /**@short open a file containing URL links.
+ *@param urlfile string representation of the filename to open
+ *@param file reference to the QFile object which will be opened to this file.
+ *@return TRUE if file successfully opened.
+ */
+ bool openURLFile(QString urlfile, QFile& file);
+
+ /**Initialize custom object catalogs from the files listed in the config file
+ */
+ bool readCustomCatalogs();
+
+ /**Add a user-defined object catalog to the list of custom catalogs.
+ *(Basically just calls createCustomCatalog() )
+ */
+ bool addCatalog( QString filename );
+
+ /**Remove a user-defined object catalog from the list of custom catalogs.
+ *Also removes the objects from the ObjNames list.
+ *@param i the index identifier of the catalog to be removed
+ */
+ bool removeCatalog( int i );
+
+ /**Read in and parse a custom object catalog. Object data are read from a file, and
+ *parsed into a CustomCatalog object.
+ *@param filename name of the custom catalog file
+ *@param showerrs show GUI window summarizing parsing errors
+ *@return pointer to the new catalog
+ */
+ CustomCatalog* createCustomCatalog( QString filename, bool showerrs = false );
+
+ /**@short Parse the header of the custom object catalog.
+ *@param lines string list containing the lines from the custom catalog file
+ *@param Columns reference to list of descriptors of the data columns
+ *@param catName reference to the name of the catalog (read from header)
+ *@param catPrefix reference to the prefix for ID-number-based names (read from header)
+ *@param catColor reference to the color for the object symbols (read from header)
+ *@param catEpoch reference to the coordinate epoch of the catalog (read from header)
+ *@param iStart reference to the line number of the first data line (following the header)
+ *@param showerrs if true, notify user of problems parsing the header.
+ *@param errs reference to the cumulative list of error reports
+ */
+ bool parseCustomDataHeader( QStringList lines, QStringList &Columns,
+ QString &catName, QString &catPrefix, QString &catColor, float &catEpoch, int &iStart,
+ bool showerrs, QStringList &errs );
+
+ /**@short Parse a line from custom object catalog. If parsing is successful, add
+ *the object to the object list
+ *@param num the line number being processed
+ *@param d list of fields in the line
+ *@param Columns the list of field descriptors (read from the header)
+ *@param Prefix the string prefix to be prepended to ID numbers (read from the header)
+ *@param objList reference to the list of SkyObjects in the catalog
+ *@param showerrs if true, notify user of problems parsing the header.
+ *@param errs reference to the cumulative list of error reports
+ */
+ bool processCustomDataLine( int num, QStringList d, QStringList Columns,
+ QString Prefix, QPtrList<SkyObject> &objList, bool showerrs, QStringList &errs );
+
+ /**@short reset the faint limit for the stellar database
+ *@param newMagnitude the new faint limit.
+ *@param forceReload will force a reload also if newMagnitude <= maxSetMagnitude
+ *it's needed to set internal maxSetMagnitude and reload data later; is used in
+ *checkDataPumpAction() and should not used outside.
+ */
+ void setMagnitude( float newMagnitude, bool forceReload=false );
+
+ /**Set the NextDSTChange member.
+ *Need this accessor because I could not make KStars::privatedata a friend
+ *class for some reason...:/
+ */
+ void setNextDSTChange( const KStarsDateTime &dt ) { NextDSTChange = dt; }
+
+ /**Returns true if time is running forward else false. Used by KStars to prevent
+ *2 calculations of daylight saving change time.
+ */
+ bool isTimeRunningForward() { return TimeRunsForward; }
+
+ /**@return pointer to the localization (KLocale) object
+ */
+ KLocale *getLocale() { return locale; }
+
+ /**@return pointer to the Earth object
+ */
+ KSPlanet *earth() { return PCat->earth(); }
+
+ /**@short Find object by name.
+ *@param name Object name to find
+ *@return pointer to SkyObject matching this name
+ */
+ SkyObject* objectNamed( const QString &name );
+
+ /**The Sky is updated more frequently than the moon, which is updated more frequently
+ *than the planets. The date of the last update for each category is recorded so we
+ *know when we need to do it again (see KStars::updateTime()).
+ *Initializing these to -1000000.0 ensures they will be updated immediately
+ *on the first call to KStars::updateTime().
+ */
+ void setFullTimeUpdate();
+
+ /**change the current simulation date/time to the KStarsDateTime argument.
+ *Specified DateTime is always universal time.
+ *@param newDate the DateTime to set.
+ */
+ void changeDateTime( const KStarsDateTime &newDate );
+
+ /**@return pointer to the current simulation local time
+ */
+ const KStarsDateTime& lt() const { return LTime; }
+
+ /**@return reference to the current simulation universal time
+ */
+ const KStarsDateTime& ut() const { return Clock.utc(); }
+
+ /**Sync the LST with the simulation clock.
+ */
+ void syncLST();
+
+ /**Set the HourAngle member variable according to the argument.
+ *@param ha The new HourAngle
+ */
+ void setHourAngle( double ha ) { HourAngle->setH( ha ); }
+
+ //Some members need to be accessed outside of the friend classes (i.e., in the main fcn).
+
+ /**@return pointer to the ColorScheme object
+ */
+ ColorScheme *colorScheme() { return &CScheme; }
+
+ /**@return pointer to the simulation Clock object
+ */
+ SimClock *clock() { return &Clock; }
+
+ /**@return pointer to the local sidereal time: a dms object
+ */
+ dms *lst() { return LST; }
+
+ /**@return pointer to the GeoLocation object*/
+ GeoLocation *geo() { return &Geo; }
+
+ /**@return reference to the CustomCatalogs list
+ */
+ QPtrList<CustomCatalog>& customCatalogs() { return CustomCatalogs; }
+
+ /**Set the GeoLocation according to the argument.
+ *@param l reference to the new GeoLocation
+ */
+ void setLocation( const GeoLocation &l );
+
+ /**Set the GeoLocation according to the values stored in the configuration file.
+ */
+ void setLocationFromOptions();
+
+ /**@return whether the next Focus change will omit the slewing animation.
+ */
+ bool snapNextFocus() const { return snapToFocus; }
+
+ /**Disable or re-enable the slewing animation for the next Focus change.
+ *@note If the user has turned off all animated slewing, setSnapNextFocus(false)
+ *will *NOT* enable animation on the next slew. A false argument would only
+ *be used if you have previously called setSnapNextFocus(true), but then decided
+ *you didn't want that after all. In other words, it's extremely unlikely you'd
+ *ever want to use setSnapNextFocus(false).
+ *@param b when TRUE (the default), the next Focus chnage will omit the slewing
+ *animation.
+ */
+ void setSnapNextFocus(bool b=true) { snapToFocus = b; }
+
+ /**Execute a script. This function actually duplicates the DCOP functionality
+ *for those cases when invoking DCOP is not practical (i.e., when preparing
+ *a sky image in command-line dump mode).
+ *@param name the filename of the script to "execute".
+ *@param map pointer to the SkyMap object.
+ *@return TRUE if the script was successfully parsed.
+ */
+ bool executeScript( const QString &name, SkyMap *map );
+
+ /**@short Initialize celestial equator, horizon and ecliptic.
+ *@param num pointer to a KSNumbers object to use.
+ */
+ void initGuides( KSNumbers *num );
+
+ bool useDefaultOptions, startupComplete;
+
+ /**@short Appends telescope sky object to the list of INDI telescope objects. This enables KStars to track all telescopes properly.
+ *@param object pointer to telescope sky object
+ */
+ void appendTelescopeObject(SkyObject * object);
+
+signals:
+ /**Signal that specifies the text that should be drawn in the KStarsSplash window.
+ */
+ void progressText(QString);
+
+ /**Signal that the Data initialization has finished.
+ */
+ void initFinished(bool);
+
+/**
+ *Should be used to refresh skymap.
+ */
+ void update();
+
+/**
+ *If data changed, emit clearCache signal.
+ */
+ void clearCache();
+
+public slots:
+
+ /**Create a timer and connect its timeout() signal to slotInitialize(). */
+ void initialize();
+
+ /**@short send a message to the console*/
+ void slotConsoleMessage( QString s ) { std::cout << s.utf8() << std::endl; }
+
+ /**Update the Simulation Clock. Update positions of Planets. Update
+ *Alt/Az coordinates of objects. Update precession. Update Focus position.
+ *Draw new Skymap.
+ *
+ * This is ugly.
+ * It _will_ change!
+ *(JH:)hey, it's much less ugly now...can we lose the comment yet? :p
+ */
+ void updateTime(GeoLocation *geo, SkyMap * skymap, const bool automaticDSTchange = true);
+
+ /**Sets the direction of time and stores it in bool TimeRunForwards. If scale >= 0
+ *time is running forward else time runs backward. We need this to calculate just
+ *one daylight saving change time (previous or next DST change).
+ */
+ void setTimeDirection( float scale );
+
+ /**@short Save the shaded state of the Time infobox.
+ *@param b TRUE if the box is shaded
+ */
+ void saveTimeBoxShaded( bool b );
+
+ /**@short Save the shaded state of the Geo infobox.
+ *@param b TRUE if the box is shaded
+ */
+ void saveGeoBoxShaded( bool b );
+
+ /**@short Save the shaded state of the Focus infobox.
+ *@param b TRUE if the box is shaded
+ */
+ void saveFocusBoxShaded( bool b );
+
+ /**@short Save the screen position of the Time infobox.
+ *@param p the position of the box
+ */
+ void saveTimeBoxPos( QPoint p );
+
+ /**@short Save the screen position of the Time infobox.
+ *@param p the position of the box
+ */
+ void saveGeoBoxPos( QPoint p );
+
+ /**@short Save the screen position of the Time infobox.
+ *@param p the position of the box
+ */
+ void saveFocusBoxPos( QPoint p );
+
+private slots:
+ /**This function runs while the splash screen is displayed as KStars is
+ *starting up. It is connected to the timeout() signal of a timer
+ *created in the initialize() slot. It consists of a large switch
+ *statement, in which each case causes the next data object to be
+ *initialized (which usually consists of reading data from a file on disk,
+ *and storing it in the appropriate object in memory).
+ *At the end of this function, the integer which the switch statement is
+ *checking is incremented, so that the next case label will be executed when
+ *the next timeout() signal is fired.
+ */
+ void slotInitialize();
+
+/**Checks if data transmission is already running or not.
+ */
+ void checkDataPumpAction();
+
+/**Send update signal to refresh skymap.
+ */
+ void updateSkymap();
+
+/**Send clearCache signal.
+ */
+ void sendClearCache();
+
+private:
+
+/**Display an Error messagebox if a data file could not be opened. If the file
+ *was marked as "required", then abort the program when the messagebox is closed.
+ *Otherwise, continue loading the program.
+ *@param fn the name of the file which could not be opened.
+ *@param required if TRUE, then the error message is more severe, and the program
+ *exits when the messagebox is closed.
+ */
+ void initError(QString fn, bool required);
+
+/**Reset local time to new daylight saving time. Use this function if DST has changed.
+ *Used by updateTime().
+ */
+ void resetToNewDST(const GeoLocation *geo, const bool automaticDSTchange);
+
+/*
+ * Store the highest magnitude level at the current session and compare with current used
+ * magnitude. If current magnitude is equal to maxSetMagnitude reload data on next increment
+ * of magnitude level.
+ */
+ float maxSetMagnitude;
+/*
+ * Store the last position in star data file. Needed by reloading star data.
+ */
+ int lastFileIndex;
+
+ bool reloadingData(); // is currently reloading of data in progress
+
+/* bool openSAOFile(int i);*/
+ bool openStarFile(int i);
+
+ static QPtrList<GeoLocation> geoList;
+ QPtrList<SkyObject> objList;
+
+ QPtrList<StarObject> starList;
+
+ unsigned int StarCount;
+
+ /** List of all deep sky objects */
+ QPtrList<DeepSkyObject> deepSkyList;
+ /** List of all deep sky objects per type, to speed up drawing the sky map */
+ QPtrList<DeepSkyObject> deepSkyListMessier;
+ /** List of all deep sky objects per type, to speed up drawing the sky map */
+ QPtrList<DeepSkyObject> deepSkyListNGC;
+ /** List of all deep sky objects per type, to speed up drawing the sky map */
+ QPtrList<DeepSkyObject> deepSkyListIC;
+ /** List of all deep sky objects per type, to speed up drawing the sky map */
+ QPtrList<DeepSkyObject> deepSkyListOther;
+
+ QPtrList<KSAsteroid> asteroidList;
+ QPtrList<KSComet> cometList;
+
+ QPtrList<SkyPoint> MilkyWay[NMWFILES];
+
+ QPtrList<SkyPoint> clineList;
+ QPtrList<CSegment> csegmentList;
+ QPtrList<QChar> clineModeList;
+ QPtrList<SkyObject> cnameList;
+ QPtrList<SkyObject> ObjLabelList;
+
+ QPtrList<SkyPoint> Equator;
+ QPtrList<SkyPoint> Ecliptic;
+ QPtrList<SkyPoint> Horizon;
+ QPtrList<VariableStarInfo> VariableStarsList;
+ QPtrList<ADVTreeData> ADVtreeList;
+ QPtrList<INDIHostsInfo> INDIHostsList;
+ QPtrList<SkyObject> INDITelescopeList;
+
+ QPtrList<CustomCatalog> CustomCatalogs;
+
+ ObjectNameList ObjNames;
+
+ static QMap<QString, TimeZoneRule> Rulebook;
+ static QStringList CustomColumns;
+
+ GeoLocation Geo;
+ SimClock Clock;
+ ColorScheme CScheme;
+
+ KStarsDateTime LTime;
+
+ bool TimeRunsForward, temporaryTrail, snapToFocus;
+
+ QString cnameFile;
+ KStandardDirs *stdDirs;
+ KLocale *locale;
+
+ dms *LST, *HourAngle;
+
+ QString TypeName[NTYPENAME];
+ KKey resumeKey;
+
+ PlanetCatalog *PCat;
+ KSMoon *Moon;
+ JupiterMoons *jmoons;
+
+ KSFileReader *starFileReader;
+
+ FOV fovSymbol;
+
+ double Obliquity, dObliq, dEcLong;
+ KStarsDateTime LastNumUpdate, LastSkyUpdate, LastPlanetUpdate, LastMoonUpdate;
+ KStarsDateTime NextDSTChange;
+ KStarsDateTime StoredDate;
+
+ QTimer *initTimer;
+ int initCounter;
+
+/**
+ *Reloading of star data asynchronous:
+ *QDataPump connects FileSource and StarDataSink and starts data transmission.
+ */
+ FileSource *source;
+ StarDataSink *loader;
+ QDataPump *pump;
+
+/**
+ *Count the number of KStarsData objects.
+ */
+ static int objects;
+};
+
+
+#endif // KSTARSDATA_H
+