/*************************************************************************** kstars.h - Trinity Desktop Planetarium ------------------- begin : Mon Feb 5 01:11:45 PST 2001 copyright : (C) 2001 by Jason Harris email : jharris@30doradus.org ***************************************************************************/ /*************************************************************************** * * * 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 KSTARS_H #define KSTARS_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "kstarsinterface.h" #include "observinglist.h" // forward declaration is enough. We only need pointers class TQPalette; class TQVBoxLayout; class TDEActionMenu; class KDialogBase; class KKey; class TDEToolBar; class dms; class KSNewStuff; class KStarsData; class KStarsSplash; class SkyMap; class GeoLocation; class FindDialog; class LocationDialog; class TimeDialog; class InfoBoxes; class ToggleAction; class TimeStepBox; //class AstroCalc; class INDIMenu; class INDIDriver; class imagesequence; /** *@class KStars *@short This is the main window for KStars. *In addition to the GUI elements, the class contains the program clock, *KStarsData, and SkyMap objects. It also contains functions for the DCOP interface. *@author Jason Harris *@version 1.0 */ class KStars : public TDEMainWindow, virtual public KStarsInterface { Q_OBJECT public: /** *@short Constructor. *@param doSplash should the splash panel be displayed during *initialization. *@param startClockRunning should the clock be running on startup? *@param startDateString date (in string representation) to start running from. * * @todo Refer to documentation on date format. */ KStars( bool doSplash, bool startClockRunning = true, const TQString &startDateString = "" ); /**Destructor. Synchs config file. Deletes objects. */ ~KStars(); /**@return pointer to KStarsData object which contains application data. */ KStarsData* data(); /**@return pointer to the local sidereal time. */ dms* LST(); /**@return pointer to SkyMap object which is the sky display widget. */ SkyMap* map(); ObservingList* observingList(); /**@return pointer to GeoLocation object which is the current geographic location. */ GeoLocation* geo(); /**@return pointer to InfoBoxes object. */ InfoBoxes* infoBoxes(); /**@return pointer to the INDI driver */ INDIDriver* getINDIDriver(void) { return indidriver; } /**@return pointer to the INDI menu */ INDIMenu* getINDIMenu(void) { return indimenu; } /** Establish the INDI system. No GUI */ void establishINDI(); /**Add an item to the color-scheme action manu *@param name The name to use in the menu *@param actionName The internal name for the action (derived from filename) */ void addColorMenuItem( TQString name, TQString actionName ); /**Remove an item from the color-scheme action manu *@param actionName The internal name of the action (derived from filename) */ void removeColorMenuItem( TQString actionName ); /**DCOP interface function. *Set focus to given Ra/Dec coordinates *@p ra the Right Ascension coordinate for the focus (in Hours) *@p dec the Declination coordinate for the focus (in Degrees) */ ASYNC setRaDec( double ra, double dec ); /**DCOP interface function. *Set focus to given Alt/Az coordinates. *@p alt the Altitude coordinate for the focus (in Degrees) *@p az the Azimuth coordinate for the focus (in Degrees) */ ASYNC setAltAz(double alt, double az); /**DCOP interface function. *Point in the direction described by the string argument. *@p direction either an object name, a compass direction (e.g., "north"), or "zenith" */ ASYNC lookTowards( const TQString direction ); /**DCOP interface function. Zoom in one step. */ ASYNC zoomIn(void) { slotZoomIn(); } /**DCOP interface function. Zoom out one step. */ ASYNC zoomOut(void){ slotZoomOut(); } /**DCOP interface function. reset to the default zoom level. */ ASYNC defaultZoom(void) { slotDefaultZoom(); } /**DCOP interface function. Set zoom level to specified value. *@p a the zoom level. Units are pixels per radian. */ ASYNC zoom(double z); /**DCOP interface function. Set local time and date. *@p yr year of date *@p mth month of date *@p day day of date *@p hr hour of time *@p min minute of time *@p sec second of time */ ASYNC setLocalTime(int yr, int mth, int day, int hr, int min, int sec); /**DCOP interface function. Delay further execution of DCOP commands. *@p t number of seconds to delay */ ASYNC waitFor( double t ); /**DCOP interface function. Pause further DCOP execution until a key is pressed. *@p k the key which will resume DCOP execution */ ASYNC waitForKey( const TQString k ); /**DCOP interface function. Toggle tracking. *@p track engage tracking if true; else disengage tracking */ ASYNC setTracking( bool track ); /**DCOP interface function. modify a view option. *@p option the name of the option to be modified *@p value the option's new value */ ASYNC changeViewOption( const TQString option, const TQString value ); /**DCOP interface function. *@p name the name of the option to query *@return the current value of the named option */ TQString getOption( const TQString &name ); /**DCOP interface function. Read config file. *This function is useful for restoring the user settings from the config file, *after having modified the settings in memory. *@sa writeConfig() */ ASYNC readConfig(); /**DCOP interface function. Write current settings to config file. *This function is useful for storing user settings before modifying them with a DCOP *script. The original settings can be restored with readConfig(). *@sa readConfig() */ ASYNC writeConfig(); /**DCOP interface function. Show text message in a popup window. *@note Not Yet Implemented *@p x x-coordinate for message window *@p y y-coordinate for message window *@p message the text to display in the message window */ ASYNC popupMessage( int x, int y, const TQString message ); /**DCOP interface function. Draw a line on the sky map. *@note Not Yet Implemented *@p x1 starting x-coordinate of line *@p y1 starting y-coordinate of line *@p x2 ending x-coordinate of line *@p y2 ending y-coordinate of line *@p speed speed at which line should appear from start to end points (in pixels per second) */ ASYNC drawLine( int x1, int y1, int x2, int y2, int speed ); /**DCOP interface function. Set the geographic location. *@p city the city name of the location *@p province the province name of the location *@p country the country name of the location */ ASYNC setGeoLocation( const TQString city, const TQString province, const TQString country ); /**DCOP interface function. Modify a color. *@p colorName the name of the color to be modified (e.g., "SkyColor") *@p value the new color to use */ ASYNC setColor( const TQString colorName, const TQString value ); /**DCOP interface function. Load a color scheme. *@p name the name of the color scheme to load (e.g., "Moonless Night") */ ASYNC loadColorScheme( const TQString name ); /**DCOP interface function. Export the sky image to a file. *@p filename the filename for the exported image *@p width the width for the exported image *@p height the height for the exported image */ ASYNC exportImage( const TQString filename, int width, int height ); /**DCOP interface function. Print the sky image. *@p usePrintDialog if true, the TDE print dialog will be shown; otherwise, default parameters will be used *@p useChartColors if true, the "Star Chart" color scheme will be used for the printout, which will save ink. */ ASYNC printImage( bool usePrintDialog, bool useChartColors ); /**DCOP interface function. Establish an INDI driver. *@p driverName the name of the driver to be established *@p useLocal establish driver locally? */ ASYNC startINDI (TQString driverName, bool useLocal); /**DCOP interface function. Shutdown an INDI driver. *@p driverName the name of the driver to be shut down */ ASYNC shutdownINDI (TQString driverName); /**DCOP interface function. Turn INDI driver on/off. *@p driverName the name of the driver to be switched on/off *@p turnOn if true, turn driver on; otherwise turn off */ ASYNC switchINDI(TQString driverName, bool turnOn); /**DCOP interface function. Set INDI connection port. *@p driverName the name of the driver for which the port will be set *@p port the port identifier */ ASYNC setINDIPort(TQString driverName, TQString port); /**DCOP interface function. Set INDI target RA/DEC coordinates *@p driverName the name of the driver *@p RA the target's Right Ascension coordinate (in Hours) *@p DEC the target's Declination coordinate (in Degrees) */ ASYNC setINDITargetCoord(TQString driverName, double RA, double DEC); /**DCOP interface function. Set INDI target to a named object. *@p driverName the name of the driver *@p objectName the name of the object to be targeted */ ASYNC setINDITargetName(TQString driverName, TQString objectName); /**DCOP interface function. Set INDI action. *@p driverName the name of the driver *@p action the action to set */ ASYNC setINDIAction(TQString driverName, TQString action); /**DCOP interface function. Pause DCOP execution until named INDI action is completed. *@p driverName the name of the driver *@p action the action which is to be completed before resuming DCOP execution */ ASYNC waitForINDIAction(TQString driverName, TQString action); /**DCOP interface function. Set INDI focus speed. *@p driverName the name of the driver *@p action the name of the action (??) */ ASYNC setINDIFocusSpeed(TQString driverName,unsigned int speed); /**DCOP interface function. Set INDI focus direction and focus. *@p driverName the name of the driver *@p focusDir 0 = focus in; 1 = focus out */ ASYNC startINDIFocus(TQString driverName, int focusDir); /**DCOP interface function. Set INDI geographical information. *@p driverName the name of the driver *@p longitude the longitude to set, in Degrees *@p latitude the latitude to set, in Degrees */ ASYNC setINDIGeoLocation(TQString driverName, double longitude, double latitude); /**DCOP interface function. Sets focus operation timeout. *@p driverName the name of the driver *@p timeout the timeout interval, in seconds (?) */ ASYNC setINDIFocusTimeout(TQString driverName, int timeout); /**DCOP interface function. Start camera exposure with a timeout. *@p driverName the name of the driver *@p timeout the exposure time, in seconds (?) */ ASYNC startINDIExposure(TQString driverName, int timeout); /**DCOP interface function. Set INDI UTC date and time. *@p driverName the name of the driver *@p UTCDateTime the UTC date and time (e.g., "23 June 2004 12:30:00" ?) */ ASYNC setINDIUTC(TQString driverName, TQString UTCDateTime); /**DCOP interface function. Set INDI Telescope action. *@p deviceName the name of the telescope device *@p action the action to set */ ASYNC setINDIScopeAction(TQString deviceName, TQString action); /**DCOP interface function. Set CCD camera frame type. *@p deviceName the name of the CCD device *@p type the frame type */ ASYNC setINDIFrameType(TQString deviceName, TQString type); /**DCOP interface function. Set CCD filter. *@p deviceName the name of the CCD device *@p filter_num identifier of the CCD filter */ ASYNC setINDIFilterNum(TQString deviceName, int filter_num); /**DCOP interface function. Set CCD target temperature. *@p deviceName the name of the CCD device *@p temp the target CCD temperature (in Celsius ?) */ ASYNC setINDICCDTemp(TQString deviceName, int temp); /**@short Apply config options throughout the program. *In most cases, options are set in the "Options" object directly, *but for some things we have to manually react to config changes. */ void applyConfig(); public slots: /** *Update time-dependent data and (possibly) repaint the sky map. *@p automaticDSTchange change DST status automatically? */ void updateTime( const bool automaticDSTchange = true ); /** *Apply new settings and redraw skymap */ void slotApplyConfigChanges( void ); /** *action slot: Zoom in one step */ void slotZoomIn(); /** *action slot: Zoom out one step */ void slotZoomOut(); /** *action slot: Set the zoom level to its default value */ void slotDefaultZoom(); /** *action slot: Allow user to specify a field-of-view angle for the display window in degrees, *and set the zoom level accordingly. */ void slotSetZoom(); /** *action slot: Toggle whether kstars is tracking current position */ void slotTrack(); /** *action slot: open dialog for selecting a new geographic location */ void slotGeoLocator(); /**Delete FindDialog because ObjNames list has changed in KStarsData due to *reloading star data. So list in FindDialog must be new filled with current data. */ void clearCachedFindDialog(); /** *Resume execution of DCOP commands */ void resumeDCOP( void ) { kapp->dcopClient()->resume(); } /** *Remove all trails which may have been added to solar system bodies */ void slotClearAllTrails(); private slots: /** *action slot: sync kstars clock to system time */ void slotSetTimeToNow(); /** *action slot: open a dialog for setting the time and date */ void slotSetTime(); /** *action slot: toggle whether kstars clock is running or not */ void slotToggleTimer(); /** *action slot: open dialog for finding a named object */ void slotFind(); /** * action slot: open KStars setup wizard */ void slotWizard(); /** * action slot: open KNewStuff window to download extra data. */ void slotDownload(); /** * action slot: open KStars calculator to compute astronomical * ephemeris */ void slotCalculator(); /** * action slot: open KStars AAVSO Light Curve Generator */ void slotLCGenerator(); /** * action slot: open Elevation vs. Time tool */ void slotAVT(); /** * action slot: open What's up tonight dialog */ void slotWUT(); //FIXME GLOSSARY // /** // * action slot: open the glossary // */ // void slotGlossary(); /** * action slot: open ScriptBuilder dialog */ void slotScriptBuilder(); /** * action slot: open Solar system viewer */ void slotSolarSystem(); /** * action slot: open Jupiter Moons tool */ void slotJMoonTool(); /** * action slot: open Telescope wizard */ void slotTelescopeWizard(); /** * action slot: open Telescope wizard */ void slotTelescopeProperties(); /** * action slot: open Image Sequence dialog */ void slotImageSequence(); /** * action slot: open INDI driver panel */ void slotINDIDriver(); /** * action slot: open INDI control panel */ void slotINDIPanel(); /** * action slot: open INDI configuration dialog */ void slotINDIConf(); /** *action slot: open dialog for setting the view options */ void slotViewOps(); /** finish setting up after the kstarsData has finished */ void datainitFinished(bool worked); /**Open new KStars window. */ void newWindow(); /**Close KStars window. */ void closeWindow(); /** Open FITS image. */ void slotOpenFITS(); /**Action slot to save the sky image to a file.*/ void slotExportImage(); /**Action slot to select a DCOP script and run it.*/ void slotRunScript(); /**Action slot to print skymap. */ void slotPrint(); /**Action slot to show tip-of-the-day window. */ void slotTipOfDay(); /**Action slot to set focus coordinates manually (opens FocusDialog). */ void slotManualFocus(); /**Meta-slot to point the focus at special points (zenith, N, S, E, W). *Uses the name of the Action which sent the Signal to identify the *desired direction. */ void slotPointFocus(); /**Meta-slot to set the color scheme according to the name of the *Action which sent the activating signal. */ void slotColorScheme(); /**Select the Target symbol (a.k.a. field-of-view indicator) */ void slotTargetSymbol(); /**Invoke the Field-of-View symbol editor window */ void slotFOVEdit(); /**Toggle between Equatorial and Ecliptic coordinte systems */ void slotCoordSys(); /**Toggle display of the observing list tool*/ void slotObsList(); /**Meta-slot to handle display toggles for all of the viewtoolbar buttons. *uses the name of the sender to identify the item to change. */ void slotViewToolBar(); /**Meta-slot to handle toggling display of GUI elements (toolbars and infoboxes) *uses name of the sender action to identify the widget to hide/show. */ void slotShowGUIItem( bool ); /**Re-assign the input focus to the SkyMap widget. */ void mapGetsFocus(); /**Toggle to and from full screen mode */ void slotFullScreen(); private: /** *Initialize Menu bar, toolbars and all Actions. */ void initActions(); /** *Initialize Field-of-View symbols and FOV submenu */ void initFOV(); /** *Initialize Status bar. */ void initStatusBar(); SkyMap *skymap; TQWidget *centralWidget; TQVBoxLayout *topLayout; TDEToolBar *viewToolBar; TimeStepBox *TimeStep; ToggleAction *actCoordSys; ToggleAction *actObsList; TDEActionMenu *colorActionMenu, *fovActionMenu; KDialogBase *AAVSODialog; FindDialog *findDialog; KSNewStuff *kns; INDIMenu *indimenu; INDIDriver *indidriver; imagesequence *indiseq; /* We need imgsequence here because it runs in batch mode */ int idSpinBox; bool DialogIsObsolete; bool StartClockRunning; TQString StartDateString; TQPalette OriginalPalette, DarkPalette; class privatedata; friend class privatedata; privatedata *pd; ObservingList *obsList; }; class KStars::privatedata { public: KStars *ks; KStarsSplash *splash; KStarsData *kstarsData; /**Constructor */ privatedata(KStars *parent) : ks(parent), splash(0), kstarsData(0) {} /**Destructor */ ~privatedata(); /**Build the main KStars window */ void buildGUI(); }; #endif