00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "wgui_include_config.h"
00026 #include "wg_timer.h"
00027 #include "wg_message_server.h"
00028
00029
00030 namespace wGui
00031 {
00032
00033 Uint32 TimerCallback(Uint32 Interval, void* param)
00034 {
00035 return static_cast<CTimer*>(param)->TimerHit(Interval);
00036 }
00037
00038
00039 CTimer::CTimer(CMessageClient* pOwner) :
00040 m_TimerID(0),
00041 m_bAutoRestart(false),
00042 m_iCounter(0),
00043 m_pOwner(pOwner)
00044 { }
00045
00046
00047 CTimer::~CTimer(void)
00048 {
00049 StopTimer();
00050 }
00051
00052
00053 void CTimer::StartTimer(unsigned long int Interval, bool bAutoRestart)
00054 {
00055 m_bAutoRestart = bAutoRestart;
00056 if (m_TimerID != 0)
00057 {
00058 StopTimer();
00059 }
00060 m_TimerID = SDL_AddTimer(Interval, &TimerCallback, this);
00061 }
00062
00063
00064 void CTimer::StopTimer(void)
00065 {
00066 if (m_TimerID)
00067 {
00068 SDL_RemoveTimer(m_TimerID);
00069 m_TimerID = 0;
00070 }
00071 }
00072
00073
00074 Uint32 CTimer::TimerHit(Uint32 Interval)
00075 {
00076 m_iCounter++;
00077 CMessageServer::Instance().QueueMessage(new TIntMessage(CMessage::CTRL_TIMER, m_pOwner, this, m_iCounter));
00078 if (!m_bAutoRestart)
00079 {
00080 StopTimer();
00081 }
00082
00083 return Interval;
00084 }
00085
00086
00087 bool CTimer::HandleMessage(CMessage* )
00088 {
00089 bool bHandled = false;
00090
00091 return bHandled;
00092 }
00093
00094 }
00095