1//
2// This file is part of the aMule Project.
3//
4// Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org )
5//
6// Any parts of this program derived from the xMule, lMule or eMule project,
7// or contributed by third-party developers are copyrighted by their
8// respective authors.
9//
10// This program is free software; you can redistribute it and/or modify
11// it under the terms of the GNU General Public License as published by
12// the Free Software Foundation; either version 2 of the License, or
13// (at your option) any later version.
14//
15// This program is distributed in the hope that it will be useful,
16// but WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with this program; if not, write to the Free Software
22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
23//
24
25#ifndef TIMER_H
26#define TIMER_H
27
28class wxEvtHandler;
29class CTimerThread;
30
31#include <wx/event.h>
32
33
34/**
35 * Replacement for wxTimer as it doesn't work on non-X builds
36 */
37class CTimer
38{
39public:
40	CTimer(wxEvtHandler *owner, int timerid = -1);
41	~CTimer();
42
43	/**
44	 * Starts the timer.
45	 *
46	 * @param millisecs The frequency of events.
47	 * @param oneShot Specifies if only one event should be produced.
48	 */
49	bool Start(int millisecs, bool oneShot = false);
50
51	/**
52	 * Returns true if the timer is running.
53	 */
54	bool IsRunning() const;
55
56	/**
57	 * Stops the timer.
58	 *
59	 * Note that this does not delete the actual thread
60	 * immediatly, but no new events will be queued after
61	 * calling this function.
62	 */
63	void Stop();
64
65private:
66	CTimerThread* m_thread;
67	wxEvtHandler* m_owner;
68	int m_id;
69};
70
71
72
73class CTimerEvent : public wxEvent
74{
75public:
76	CTimerEvent(int id = 0);
77
78	virtual wxEvent* Clone() const;
79};
80
81
82DECLARE_LOCAL_EVENT_TYPE(MULE_EVT_TIMER, -1)
83
84
85typedef void (wxEvtHandler::*MuleTimerEventFunction)(CTimerEvent&);
86
87#define EVT_MULE_TIMER(id, func) \
88	DECLARE_EVENT_TABLE_ENTRY(MULE_EVT_TIMER, id, -1, \
89	(wxObjectEventFunction) (wxEventFunction) \
90	wxStaticCastEvent(MuleTimerEventFunction, &func), (wxObject*) NULL),
91
92#endif /* TIMER_H */
93// File_checked_for_headers
94