]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/cocoa/timer.mm
wxMessageBox off the main thread lost result code.
[wxWidgets.git] / src / cocoa / timer.mm
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/cocoa/timer.mm
3// Purpose: wxTimer for wxCocoa
4// Author: Ryan Norton
5// Modified by: David Elliott
6// Created: 2005-02-04
7// Copyright: (c) Ryan Norton
8// Licence: wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11// ============================================================================
12// declarations
13// ============================================================================
14
15// ----------------------------------------------------------------------------
16// headers
17// ----------------------------------------------------------------------------
18
19// For compilers that support precompilation, includes "wx.h".
20#include "wx/wxprec.h"
21
22#if wxUSE_TIMER
23
24#include "wx/cocoa/private/timer.h"
25#include "wx/cocoa/autorelease.h"
26
27#include "wx/cocoa/objc/objc_uniquifying.h"
28
29#import <Foundation/NSTimer.h>
30
31// ========================================================================
32// wxNSTimerData
33// ========================================================================
34@interface wxNSTimerData : NSObject
35{
36 wxCocoaTimerImpl* m_timer;
37}
38
39- (id)init;
40- (id)initWithWxTimer:(wxCocoaTimerImpl*)theTimer;
41- (wxCocoaTimerImpl*)timer;
42- (void)onNotify:(NSTimer *)theTimer;
43@end // interface wxNSTimerData : NSObject
44WX_DECLARE_GET_OBJC_CLASS(wxNSTimerData,NSObject)
45
46@implementation wxNSTimerData : NSObject
47- (id)init
48{
49 if(!(self = [super init]))
50 return nil;
51 m_timer = NULL;
52 return self;
53}
54
55- (id)initWithWxTimer:(wxCocoaTimerImpl*)theTimer;
56{
57 if(!(self = [super init]))
58 return nil;
59 m_timer = theTimer;
60 return self;
61}
62
63- (wxCocoaTimerImpl*)timer
64{
65 return m_timer;
66}
67
68- (void)onNotify:(NSTimer *)theTimer
69{
70 m_timer->Notify();
71}
72@end
73WX_IMPLEMENT_GET_OBJC_CLASS(wxNSTimerData,NSObject)
74
75// ----------------------------------------------------------------------------
76// wxCocoaTimerImpl
77// ----------------------------------------------------------------------------
78
79wxCocoaTimerImpl::~wxCocoaTimerImpl()
80{
81 Stop();
82}
83
84void wxCocoaTimerImpl::Init()
85{
86 m_cocoaNSTimer = NULL;
87}
88
89bool wxCocoaTimerImpl::Start(int millisecs, bool oneShot)
90{
91 Stop();
92
93 wxAutoNSAutoreleasePool thePool;
94
95 wxNSTimerData *timerData = [[WX_GET_OBJC_CLASS(wxNSTimerData) alloc] initWithWxTimer:this];
96 m_cocoaNSTimer = [[NSTimer
97 scheduledTimerWithTimeInterval: millisecs / 1000.0 //seconds
98 target: timerData
99 selector: @selector(onNotify:)
100 userInfo: nil
101 repeats: oneShot == false] retain];
102 [timerData release];
103
104 return IsRunning();
105}
106
107void wxCocoaTimerImpl::Stop()
108{
109 if (m_cocoaNSTimer)
110 {
111 // FIXME: Is this safe to do if !isValid ?
112 [m_cocoaNSTimer invalidate];
113 [m_cocoaNSTimer release];
114 m_cocoaNSTimer = NULL;
115 }
116}
117
118bool wxCocoaTimerImpl::IsRunning() const
119{
120 return m_cocoaNSTimer != NULL && [m_cocoaNSTimer isValid];
121}
122
123#endif // wxUSE_TIMER
124