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/tools/altvstime.h

224 lines
6.6 KiB

/***************************************************************************
altvstime.h - description
-------------------
begin : Mon Dec 23 2002
copyright : (C) 2002 by Pablo de Vicente
email : vicente@oan.es
***************************************************************************/
/***************************************************************************
* *
* 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 ALTVSTIME_H
#define ALTVSTIME_H
#include "kstarsplotwidget.h"
class KStarsDateTime;
class TQTime;
class TQVariant;
class TQVBoxLayout;
class KDialogBase;
class TDELocale;
class SkyObject;
class SkyPoint;
class dms;
class GeoLocation;
class KStars;
class AltVsTimeUI;
/**@class AVTPlotWidget
*@short An extension of the KStarsPlotWidget for the AltVsTime tool.
*The biggest difference is that in addition to the plot objects, it
*draws the "ground" below Alt=0 and draws the sky light blue for day
*times, and black for night times. The transition between day and
*night is drawn with a gradient, and the position follows the actual
*sunrise/sunset times of the given date/location.
*Also, this plot widget provides two time axes (local time along the
*bottom, and local sideral time along the top).
*@version 1.0
*@author Jason Harris
*/
class AVTPlotWidget : public KStarsPlotWidget
{
Q_OBJECT
public:
/**Constructor
*/
AVTPlotWidget( double x1=0.0, double x2=1.0, double y1=0.0, double y2=1.0, TQWidget *parent=0, const char* name=0 );
/**Set the fractional positions of the Sunrise and Sunset positions,
*in units where last midnight was 0.0, and next midnight is 1.0.
*i.e., if Sunrise is at 06:00, then we set it as 0.25 in this
*function. Likewise, if Sunset is at 18:00, then we set it as
*0.75 in this function.
*@param sr the fractional position of Sunrise
*@param ss the fractional position of Sunset
*/
void setSunRiseSetTimes( double sr, double ss ) { SunRise = sr; SunSet = ss; }
protected:
/**Handle mouse move events. If the mouse button is down,
*draw crosshair lines centered at the cursor position. This
*allows the user to pinpoint specific position sin the plot.
*/
void mouseMoveEvent( TQMouseEvent *e );
/**Simply calls mouseMoveEvent().
*/
void mousePressEvent( TQMouseEvent *e );
/**Redraw the plot.
*/
void paintEvent( TQPaintEvent *e );
private:
double SunRise, SunSet;
};
/**@class AltVsTime
*@short the Altitude vs. Time Tool.
*Plot the altitude as a function of time for any list of
*objects, as seen from any location, on any date.
*@version 1.0
*@author Jason Harris
*/
class AltVsTime : public KDialogBase
{
Q_OBJECT
public:
/**Constructor
*/
AltVsTime( TQWidget* parent = 0);
/**Destructor
*/
~AltVsTime();
/**Determine the limits for the sideral time axis, using
*the sidereal time at midnight for the current date
*and location settings.
*/
void setLSTLimits();
/**Set the AltVsTime Date according to the current Date
*in the KStars main window. Currently, this is only
*used in the ctor to initialize the Date.
*/
void showCurrentDate (void);
/**@return a KStarsDateTime object constructed from the
*current setting in the Date widget.
*/
KStarsDateTime getDate (void);
/**Determine the time of sunset and sunrise for the current
*date and location settings. Convert the times to doubles,
*expressing the times as fractions of a full day.
*Calls AVTPlotWidget::setSunRiseSetTimes() to send the
*numbers to the plot widget.
*/
void computeSunRiseSetTimes();
/**Parse a string as an epoch number. If the string can't
*be parsed, return 2000.0.
*@param eName the epoch string to be parsed
*@return the epoch number
*/
double getEpoch (TQString eName);
/**@short Add a SkyObject to the display.
*Constructs a PLotObject representing the Alt-vs-time curve for the object.
*@param o pointer to the SkyObject to be added
*@param forceAdd if true, then the object will be added, even if there
*is already a curve for the same coordinates.
*/
void processObject( SkyObject *o, bool forceAdd=false );
/**@short Determine the altitude coordinate of a SkyPoint,
*given an hour of the day.
*
*This is called for every 30-minute interval in the displayed Day,
*in order to construct the altitude curve for a given object.
*@param p the skypoint whose altitude is to be found
*@param hour the time in the displayed day, expressed in hours
*@return the Altitude, expresse in degrees
*/
double findAltitude( SkyPoint *p, double hour );
/**@return the currently highlighted item in the list of displayed
*objects
*/
int currentPlotListItem() const;
/**@return a pointer to the list of SkyPoints representing the
*objects being displayed.
*/
TQPtrList<SkyPoint>* skyPointList() { return &pList; }
public slots:
/**@short Update the plot to reflec new Date and Location settings.
*/
void slotUpdateDateLoc(void);
/**@short Clear the list of displayed objects.
*/
void slotClear(void);
/**@short Clear the edit boxes for specifying a new object.
*/
void slotClearBoxes(void);
/**@short Add an object to the list of displayed objects, according
*to the data entered in the edit boxes.
*/
void slotAddSource(void);
/**@short Launch the Find Object window to select a new object for
*the list of displayed objects.
*/
void slotBrowseObject(void);
/**@short Launch the Location dialog to choose a new location.
*/
void slotChooseCity(void);
/**@short Move input keyboard focus to the next logical widget.
*We need a separate slot for this because we are intercepting
*Enter key events, which close the window by default, to
*advance input focus instead (when the Enter events occur in
*certain Edit boxes).
*/
void slotAdvanceFocus(void);
/**Update the plot to highlight the altitude curve of the objects
*which is highlighted in the listbox.
*/
void slotHighlight(void);
private:
AVTPlotWidget *View;
AltVsTimeUI *avtUI;
TQVBoxLayout *topLayout;
GeoLocation *geo;
KStars *ks;
TQPtrList<SkyPoint> pList;
TQPtrList<SkyPoint> deleteList;
int DayOffset;
bool dirtyFlag;
};
#endif // ALTVSTIME_H