X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..dd60b9ec1e436bfa13eb94ffb69f921aef534eb0:/src/os2/timer.cpp diff --git a/src/os2/timer.cpp b/src/os2/timer.cpp index 5262040cf6..bca6302c87 100644 --- a/src/os2/timer.cpp +++ b/src/os2/timer.cpp @@ -1,52 +1,134 @@ ///////////////////////////////////////////////////////////////////////////// // Name: timer.cpp // Purpose: wxTimer implementation -// Author: AUTHOR +// Author: David Webster // Modified by: -// Created: ??/??/98 +// Created: 10/17/99 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) David Webster +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "timer.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#include "wx/window.h" +#include "wx/os2/private.h" + +#ifndef WX_PRECOMP + #include "wx/setup.h" + #include "wx/list.h" + #include "wx/event.h" + #include "wx/app.h" #endif +#include "wx/intl.h" +#include "wx/log.h" + #include "wx/timer.h" +#include +#include + +#include + +// ---------------------------------------------------------------------------- +// private functions +// ---------------------------------------------------------------------------- + +wxList wxTimerList(wxKEY_INTEGER); +UINT wxTimerProc(HWND hwnd, WORD, int idTimer, DWORD); + +// ---------------------------------------------------------------------------- +// macros +// ---------------------------------------------------------------------------- + #if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject) #endif wxTimer::wxTimer() { - m_milli = 0 ; - m_id = 0; - m_oneShot = FALSE; + milli = 0 ; + id = 0; + oneShot = FALSE; } wxTimer::~wxTimer() { Stop(); + + wxTimerList.DeleteObject(this); } bool wxTimer::Start(int milliseconds,bool mode) { - m_oneShot = mode ; - if (milliseconds <= 0) - return FALSE; + oneShot = mode; + if (milliseconds < 0) + milliseconds = lastMilli; + + wxCHECK_MSG( milliseconds > 0, FALSE, wxT("invalid value for timer timeour") ); + + lastMilli = milli = milliseconds; + + wxTimerList.DeleteObject(this); +// TODO: +/* + TIMERPROC wxTimerProcInst = (TIMERPROC) + MakeProcInstance((FARPROC)wxTimerProc, wxGetInstance()); - m_milli = milliseconds; + id = SetTimer(NULL, (UINT)(id ? id : 1), + (UINT)milliseconds, wxTimerProcInst); +*/ + if (id > 0) + { + wxTimerList.Append(id, this); - // TODO: set the timer going. - return FALSE; + return TRUE; + } + else + { + wxLogSysError(_("Couldn't create a timer")); + + return FALSE; + } } void wxTimer::Stop() { - m_id = 0 ; - m_milli = 0 ; + if ( id ) + { +// KillTimer(NULL, (UINT)id); + wxTimerList.DeleteObject(this); + } + id = 0; + milli = 0; } +// ---------------------------------------------------------------------------- +// private functions +// ---------------------------------------------------------------------------- + +void wxProcessTimer(wxTimer& timer) +{ + // Avoid to process spurious timer events + if ( timer.id == 0) + return; + + if ( timer.oneShot ) + timer.Stop(); + + timer.Notify(); +} + +UINT wxTimerProc(HWND WXUNUSED(hwnd), WORD, int idTimer, DWORD) +{ + wxNode *node = wxTimerList.Find((long)idTimer); + + wxCHECK_MSG( node, 0, wxT("bogus timer id in wxTimerProc") ); + + wxProcessTimer(*(wxTimer *)node->Data()); + + return 0; +}