]> git.saurik.com Git - wxWidgets.git/blame - src/cocoa/NSSlider.mm
added missing export declarations for wxGTK internal functions needed outside of...
[wxWidgets.git] / src / cocoa / NSSlider.mm
CommitLineData
ddac39da
DE
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/cocoa/NSSlider.mm
3// Purpose: wxCocoaNSSlider class
4// Author: Mark Oxenham
90f6792f 5// Modified by: David Elliott
ddac39da 6// Created: 2007/08/10
8d18e365 7// RCS-ID: $Id$
ddac39da
DE
8// Copyright: (c) 2007 Software 2000 Ltd. All rights reserved.
9// Licence: wxWidgets licence
10/////////////////////////////////////////////////////////////////////////////
11
12#include "wx/wxprec.h"
13
14#ifndef WX_PRECOMP
15 #include "wx/log.h"
16#endif // WX_PRECOMP
17
ddac39da
DE
18#include "wx/cocoa/NSSlider.h"
19
20#import <Foundation/NSNotification.h>
21#import <Foundation/NSString.h>
22#import <AppKit/NSEvent.h>
90f6792f 23#include "wx/cocoa/objc/NSSlider.h"
ddac39da
DE
24
25WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSSlider)
26
27// ============================================================================
28// @class wxNSSliderTarget
29// ============================================================================
30@interface wxNSSliderTarget : NSObject
31{
32}
33
34- (void)wxNSSliderUpArrowKeyDown: (id)sender;
35- (void)wxNSSliderDownArrowKeyDown: (id)sender;
36- (void)wxNSSliderLeftArrowKeyDown: (id)sender;
37- (void)wxNSSliderRightArrowKeyDown: (id)sender;
38- (void)wxNSSliderPageUpKeyDown: (id)sender;
39- (void)wxNSSliderPageDownKeyDown: (id)sender;
40- (void)wxNSSliderMoveUp: (id)sender;
41- (void)wxNSSliderMoveDown: (id)sender;
42- (void)wxNSSliderMoveLeft: (id)sender;
43- (void)wxNSSliderMoveRight: (id)sender;
44- (void)wxNSSliderPageUp: (id)sender;
45- (void)wxNSSliderPageDown: (id)sender;
46@end // wxNSSliderTarget
47
48@implementation wxNSSliderTarget : NSObject
49
50- (void)wxNSSliderUpArrowKeyDown: (id)sender
51{
52 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
53 wxCHECK_RET(slider,wxT("wxNSSliderUpArrowKeyDown received without associated wx object"));
54 slider->Cocoa_wxNSSliderUpArrowKeyDown();
55}
56
57- (void)wxNSSliderDownArrowKeyDown: (id)sender
58{
59 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
60 wxCHECK_RET(slider,wxT("wxNSSliderDownArrowKeyDown received without associated wx object"));
61 slider->Cocoa_wxNSSliderDownArrowKeyDown();
62}
63
64- (void)wxNSSliderLeftArrowKeyDown: (id)sender
65{
66 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
67 wxCHECK_RET(slider,wxT("wxNSSliderLeftArrowKeyDown received without associated wx object"));
68 slider->Cocoa_wxNSSliderLeftArrowKeyDown();
69}
70
71- (void)wxNSSliderRightArrowKeyDown: (id)sender
72{
73 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
74 wxCHECK_RET(slider,wxT("wxNSSliderRightArrowKeyDown received without associated wx object"));
75 slider->Cocoa_wxNSSliderRightArrowKeyDown();
76}
77
78- (void)wxNSSliderPageUpKeyDown: (id)sender
79{
80 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
81 wxCHECK_RET(slider,wxT("wxNSSliderPageUpKeyDown received without associated wx object"));
82 slider->Cocoa_wxNSSliderPageUpKeyDown();
83}
84
85- (void)wxNSSliderPageDownKeyDown: (id)sender
86{
87 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
88 wxCHECK_RET(slider,wxT("wxNSSliderPageDownKeyDown received without associated wx object"));
89 slider->Cocoa_wxNSSliderPageDownKeyDown();
90}
91
92- (void)wxNSSliderMoveUp: (id)sender
93{
94 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
95 wxCHECK_RET(slider,wxT("wxNSSliderMoveUp received without associated wx object"));
96 slider->Cocoa_wxNSSliderMoveUp();
97}
98
99- (void)wxNSSliderMoveDown: (id)sender
100{
101 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
102 wxCHECK_RET(slider,wxT("wxNSSliderMoveDown received without associated wx object"));
103 slider->Cocoa_wxNSSliderMoveDown();
104}
105
106- (void)wxNSSliderMoveLeft: (id)sender
107{
108 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
109 wxCHECK_RET(slider,wxT("wxNSSliderMoveLeft received without associated wx object"));
110 slider->Cocoa_wxNSSliderMoveLeft();
111}
112
113- (void)wxNSSliderMoveRight: (id)sender
114{
115 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
116 wxCHECK_RET(slider,wxT("wxNSSliderMoveRight received without associated wx object"));
117 slider->Cocoa_wxNSSliderMoveRight();
118}
119
120- (void)wxNSSliderPageUp: (id)sender
121{
122 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
123 wxCHECK_RET(slider,wxT("wxNSSliderPageUp received without associated wx object"));
124 slider->Cocoa_wxNSSliderPageUp();
125}
126
127- (void)wxNSSliderPageDown: (id)sender
128{
129 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(sender);
130 wxCHECK_RET(slider,wxT("wxNSSliderPageDown received without associated wx object"));
131 slider->Cocoa_wxNSSliderPageDown();
132}
133
134@end // implementation wxNSSliderTarget
135
136// ============================================================================
90f6792f 137// @class WXNSSlider
ddac39da
DE
138// ============================================================================
139
ddac39da 140
90f6792f
DE
141@implementation WXNSSlider : NSSlider
142
143// Override to ensure that WXNSSlider gets created with a WXNSSliderCell
144+ (Class)cellClass
145{
146 return [WX_GET_OBJC_CLASS(WXNSSliderCell) class];
147}
ddac39da
DE
148
149- (void)keyDown:(NSEvent *)theEvent
150{
151 SEL originalAction = [self action];
152 SEL newAction = originalAction;
153 NSString *theEventCharacters = [theEvent charactersIgnoringModifiers];
154
155 if ([theEventCharacters length] == 1)
156 {
157 switch ([theEventCharacters characterAtIndex:0])
158 {
159 case NSUpArrowFunctionKey: newAction = @selector(wxNSSliderUpArrowKeyDown:); break;
160 case NSDownArrowFunctionKey: newAction = @selector(wxNSSliderDownArrowKeyDown:); break;
161 case NSLeftArrowFunctionKey: newAction = @selector(wxNSSliderLeftArrowKeyDown:); break;
162 case NSRightArrowFunctionKey: newAction = @selector(wxNSSliderRightArrowKeyDown:); break;
163 case NSPageUpFunctionKey: newAction = @selector(wxNSSliderPageUpKeyDown:); break;
164 case NSPageDownFunctionKey: newAction = @selector(wxNSSliderPageDownKeyDown:); break;
165 default: break;
166 }
167 }
168
169 [self setAction:newAction];
170 [super keyDown:theEvent];
171 [self setAction:originalAction];
172}
173
174- (void)moveUp:(id)sender
175{
176 SEL originalAction = [self action];
177
178 [self setAction:@selector(wxNSSliderMoveUp:)];
179 [super moveUp:sender];
180 [self setAction:originalAction];
181}
182
183- (void)moveDown:(id)sender
184{
185 SEL originalAction = [self action];
186
187 [self setAction:@selector(wxNSSliderMoveDown:)];
188 [super moveDown:sender];
189 [self setAction:originalAction];
190}
191
192- (void)moveLeft:(id)sender
193{
194 SEL originalAction = [self action];
195
196 [self setAction:@selector(wxNSSliderMoveLeft:)];
197 [super moveLeft:sender];
198 [self setAction:originalAction];
199}
200
201- (void)moveRight:(id)sender
202{
203 SEL originalAction = [self action];
204
205 [self setAction:@selector(wxNSSliderMoveRight:)];
206 [super moveRight:sender];
207 [self setAction:originalAction];
208}
209
210- (void)pageUp:(id)sender
211{
212 SEL originalAction = [self action];
213
214 [self setAction:@selector(wxNSSliderPageUp:)];
215 [super pageUp:sender];
216 [self setAction:originalAction];
217}
218
219- (void)pageDown:(id)sender
220{
221 SEL originalAction = [self action];
222
223 [self setAction:@selector(wxNSSliderPageDown:)];
224 [super pageDown:sender];
225 [self setAction:originalAction];
226}
227
228@end
90f6792f 229WX_IMPLEMENT_GET_OBJC_CLASS(WXNSSlider,NSSlider)
ddac39da
DE
230
231// ============================================================================
90f6792f 232// @class WXNSSliderCell
ddac39da
DE
233// ============================================================================
234
235#define kwxNSSliderStartTracking @"wxNSSliderStartTracking"
236#define kwxNSSliderContinueTracking @"wxNSSliderContinueTracking"
237#define kwxNSSliderStopTracking @"wxNSSliderStopTracking"
238
90f6792f 239@implementation WXNSSliderCell : NSSliderCell
ddac39da
DE
240- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView
241{
242 BOOL result = [super startTrackingAt:startPoint inView:controlView];
72ee73c1
DE
243
244 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(controlView);
245 if(slider)
246 slider->CocoaNotification_startTracking(NULL);
247
ddac39da
DE
248 return result;
249}
250
251- (BOOL)continueTracking:(NSPoint)lastPoint at:(NSPoint)currentPoint inView:(NSView *)controlView
252{
253 BOOL result = [super continueTracking:lastPoint at:currentPoint inView:controlView];
72ee73c1
DE
254
255 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(controlView);
256 if(slider)
257 slider->CocoaNotification_continueTracking(NULL);
258
ddac39da
DE
259 return result;
260}
261
262- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag
263{
264 [super stopTracking:lastPoint at:stopPoint inView:controlView mouseIsUp:flag];
72ee73c1
DE
265
266 wxCocoaNSSlider *slider = wxCocoaNSSlider::GetFromCocoa(controlView);
267 if(slider)
268 slider->CocoaNotification_stopTracking(NULL);
ddac39da
DE
269}
270@end
90f6792f 271WX_IMPLEMENT_GET_OBJC_CLASS(WXNSSliderCell,NSSliderCell)
ddac39da 272
ddac39da
DE
273// ============================================================================
274// class wxCocoaNSSlider
275// ============================================================================
276const wxObjcAutoRefFromAlloc<struct objc_object*> wxCocoaNSSlider::sm_cocoaTarget = [[wxNSSliderTarget alloc] init];
277
278
279void wxCocoaNSSlider::AssociateNSSlider(WX_NSSlider cocoaNSSlider)
280{
281 if(cocoaNSSlider)
282 {
283 sm_cocoaHash.insert(wxCocoaNSSliderHash::value_type(cocoaNSSlider,this));
ddac39da
DE
284 [cocoaNSSlider setTarget:sm_cocoaTarget];
285 }
286}
287
288void wxCocoaNSSlider::DisassociateNSSlider(WX_NSSlider cocoaNSSlider)
289{
290 if(cocoaNSSlider)
291 {
292 sm_cocoaHash.erase(cocoaNSSlider);
ddac39da
DE
293 }
294}