You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kstars/kstars/kstars.h

681 lines
19 KiB

/***************************************************************************
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 <config.h>
#endif
#include <dcopclient.h>
#include <kapplication.h>
#include <kmainwindow.h>
#include <tqwidget.h>
#include "kstarsinterface.h"
#include "observinglist.h"
// forward declaration is enough. We only need pointers
class TQPalette;
class TQVBoxLayout;
class KActionMenu;
class KDialogBase;
class KKey;
class KToolBar;
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 KMainWindow, 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;
KToolBar *viewToolBar;
TimeStepBox *TimeStep;
ToggleAction *actCoordSys;
ToggleAction *actObsList;
KActionMenu *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