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.
143 lines
4.5 KiB
143 lines
4.5 KiB
/***************************************************************************
|
|
simclock.h - description
|
|
-------------------
|
|
begin : Mon Feb 18 2002
|
|
copyright : (C) 2002 by Mark Hollomon
|
|
email : mhh@mindspring.com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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_SIMCLOCK_H_
|
|
#define KSTARS_SIMCLOCK_H_
|
|
|
|
#include <time.h>
|
|
#include <tqtimer.h>
|
|
|
|
#include "simclockinterface.h"
|
|
#include "kstarsdatetime.h"
|
|
|
|
/**@class SimClock
|
|
*@short kstars simulation clock
|
|
*@author Mark Hollomon
|
|
*@version 1.0
|
|
*/
|
|
|
|
class SimClock : public TQObject, public SimClockInterface {
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
/**
|
|
* Constructor
|
|
* @param parent parent object for the clock
|
|
* @param when the date/time to which the SimClock should be initialized in UTC
|
|
*/
|
|
SimClock(TQObject *parent = 0, const KStarsDateTime &when = KStarsDateTime::currentDateTime() );
|
|
/**
|
|
* Constructor
|
|
* @param old a SimClock to initialize from.
|
|
*/
|
|
SimClock(const SimClock &old);
|
|
|
|
/**@return const reference to the current simulation Universal Time. */
|
|
const KStarsDateTime& utc() const { return UTC; }
|
|
|
|
/**Whether the clock is active or not is a bit complicated by the
|
|
*introduction of "manual mode". In manual mode, SimClock's internal timer
|
|
*is stopped, because the clock is ticked manually when the current update
|
|
*has finished. So, if ManualMode is true, then isActive() checks
|
|
*whether ManualActive is true. Otherwise, it checks whether the timer is
|
|
*running.
|
|
*@returns true if the Simulation clock is actively running.
|
|
*/
|
|
bool isActive();
|
|
|
|
/**@returns the current timestep setting */
|
|
double scale() const { return Scale; }
|
|
|
|
/**Manual Mode is a new (04/2002) addition to the SimClock. It is
|
|
*intended to be activated for large timesteps, when we want each frame
|
|
*drawn to the screen to be precisely Scale seconds later than the
|
|
*previous frame. (i.e., if the timescale is 1 year, then each successive
|
|
*frame should be 1 year later than the previous frame). ManualMode
|
|
*accomplishes this by stopping the internal timer and allowing the clock
|
|
*to be advanced manually (the manualTick() slot is called at the end of each
|
|
*KStars::updateTime()).
|
|
*@returns whether Manual Mode is active.
|
|
*/
|
|
bool isManualMode() const { return ManualMode; }
|
|
|
|
/**Sets Manual Mode on/off according to the bool argument. */
|
|
void setManualMode( bool on=true );
|
|
|
|
/**DCOP function to stop the SimClock. */
|
|
virtual ASYNC stop();
|
|
|
|
/**DCOP function to start the SimClock. */
|
|
virtual ASYNC start();
|
|
|
|
/**DCOP function to set the time of the SimClock. */
|
|
virtual ASYNC setUTC(const KStarsDateTime &newtime);
|
|
|
|
/**DCOP function to set scale of simclock. Calls setScale().
|
|
*/
|
|
virtual ASYNC setClockScale(float s);
|
|
|
|
public slots:
|
|
|
|
/**Adjust the clock timescale*/
|
|
void setScale(float s);
|
|
|
|
/**Respond to the TQTimer::timeout signal */
|
|
void tick();
|
|
|
|
/**Equivalent of tick() for manual mode.
|
|
*If ManualActive is true, add Scale seconds to the SimClock time.
|
|
*(we may want to modify this slightly...e.g., the number of seconds in a
|
|
*year is not constant (leap years), so it is better to increment the
|
|
*year, instead of adding 31 million seconds. */
|
|
void manualTick( bool force=false );
|
|
|
|
signals:
|
|
|
|
/**The time has changed (emitted by setUTC() ) */
|
|
void timeChanged();
|
|
|
|
/**The clock has ticked (emitted by tick() )*/
|
|
void timeAdvanced();
|
|
|
|
/**The timestep has changed*/
|
|
void scaleChanged(float);
|
|
|
|
|
|
/**The clock has started */
|
|
void clockStarted();
|
|
|
|
/**The clock has stopped */
|
|
void clockStopped();
|
|
|
|
private:
|
|
long double julianmark;
|
|
KStarsDateTime UTC;
|
|
TQTimer tmr;
|
|
double Scale;
|
|
TQTime sysmark;
|
|
int lastelapsed;
|
|
bool ManualMode, ManualActive;
|
|
|
|
// used to generate names for dcop interfaces
|
|
static int idgen;
|
|
// how often to update
|
|
static int TimerInterval;
|
|
};
|
|
|
|
#endif
|