]> git.saurik.com Git - wxWidgets.git/blame - include/wx/osx/cocoa/private.h
guarding agains NULL
[wxWidgets.git] / include / wx / osx / cocoa / private.h
CommitLineData
4849f027
SC
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/osx/cocoa/private.h
3// Purpose: Private declarations: as this header is only included by
4// wxWidgets itself, it may contain identifiers which don't start
5// with "wx".
6// Author: Stefan Csomor
7// Modified by:
8// Created: 1998-01-01
a9a4f229 9// RCS-ID: $Id$
4849f027
SC
10// Copyright: (c) Stefan Csomor
11// Licence: wxWindows licence
12/////////////////////////////////////////////////////////////////////////////
13
14#ifndef _WX_PRIVATE_COCOA_H_
15#define _WX_PRIVATE_COCOA_H_
16
935e6c7d
SC
17#include <ApplicationServices/ApplicationServices.h>
18
4849f027 19#ifdef __OBJC__
4849f027 20 #import <Cocoa/Cocoa.h>
4850cc8b 21#endif
4849f027 22
126254a8
SC
23#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
24// available in 10.4 but not in the headers
25enum {
26 kEventMouseScroll = 11
27};
28#endif
524c47aa
SC
29//
30// shared between Cocoa and Carbon
31//
32
b3b17ee7 33// bring in theming types without pulling in the headers
524c47aa 34
935e6c7d 35#if wxUSE_GUI
524c47aa 36typedef SInt16 ThemeBrush;
6da991db 37CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
524c47aa
SC
38OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
39 CGContextRef inContext,
40 const CGRect * inBounds,
41 CGImageRef inImage) ;
59d866ad 42WX_NSImage WXDLLIMPEXP_CORE wxOSXGetNSImageFromCGImage( CGImageRef image );
267ba369 43CGImageRef WXDLLIMPEXP_CORE wxOSXCreateCGImageFromNSImage( WX_NSImage nsimage );
ca9eebc3 44wxBitmap WXDLLIMPEXP_CORE wxOSXCreateSystemBitmap(const wxString& id, const wxString &client, const wxSize& size);
78f21217 45WXWindow WXDLLIMPEXP_CORE wxOSXGetMainWindow();
524c47aa 46
bfa92264
KO
47class WXDLLIMPEXP_FWD_CORE wxDialog;
48
4849f027
SC
49class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
50{
51public :
415f4a01 52 wxWidgetCocoaImpl( wxWindowMac* peer , WXWidget w, bool isRootControl = false, bool isUserPane = false ) ;
03647350
VZ
53 wxWidgetCocoaImpl() ;
54 ~wxWidgetCocoaImpl();
55
4849f027 56 void Init();
03647350 57
4849f027 58 virtual bool IsVisible() const ;
524c47aa
SC
59 virtual void SetVisibility(bool);
60
ab9a0b84
VZ
61 // we provide a static function which can be reused from
62 // wxNonOwnedWindowCocoaImpl too
63 static bool ShowViewOrWindowWithEffect(wxWindow *win,
64 bool show,
65 wxShowEffect effect,
66 unsigned timeout);
67
68 virtual bool ShowWithEffect(bool show,
69 wxShowEffect effect,
70 unsigned timeout);
71
4849f027 72 virtual void Raise();
03647350 73
4849f027
SC
74 virtual void Lower();
75
76 virtual void ScrollRect( const wxRect *rect, int dx, int dy );
77
78 virtual WXWidget GetWXWidget() const { return m_osxView; }
79
524c47aa 80 virtual void SetBackgroundColour(const wxColour&);
bc5c09a3 81 virtual bool SetBackgroundStyle(wxBackgroundStyle style);
524c47aa 82
4849f027
SC
83 virtual void GetContentArea( int &left , int &top , int &width , int &height ) const;
84 virtual void Move(int x, int y, int width, int height);
85 virtual void GetPosition( int &x, int &y ) const;
86 virtual void GetSize( int &width, int &height ) const;
524c47aa 87 virtual void SetControlSize( wxWindowVariant variant );
4849f027
SC
88
89 virtual void SetNeedsDisplay( const wxRect* where = NULL );
90 virtual bool GetNeedsDisplay() const;
91
92 virtual bool CanFocus() const;
93 // return true if successful
94 virtual bool SetFocus();
95 virtual bool HasFocus() const;
96
97 void RemoveFromParent();
98 void Embed( wxWidgetImpl *parent );
524c47aa
SC
99
100 void SetDefaultButton( bool isDefault );
101 void PerformClick();
a4e32492 102 virtual void SetLabel(const wxString& title, wxFontEncoding encoding);
524c47aa 103
54f11060
SC
104 void SetCursor( const wxCursor & cursor );
105 void CaptureMouse();
106 void ReleaseMouse();
107
524c47aa
SC
108 wxInt32 GetValue() const;
109 void SetValue( wxInt32 v );
e5d05b90 110 wxBitmap GetBitmap() const;
524c47aa 111 void SetBitmap( const wxBitmap& bitmap );
e5d05b90 112 void SetBitmapPosition( wxDirection dir );
524c47aa
SC
113 void SetupTabs( const wxNotebook &notebook );
114 void GetBestRect( wxRect *r ) const;
115 bool IsEnabled() const;
116 void Enable( bool enable );
117 bool ButtonClickDidStateChange() { return true ;}
118 void SetMinimum( wxInt32 v );
119 void SetMaximum( wxInt32 v );
19c7ac3d
SC
120 wxInt32 GetMinimum() const;
121 wxInt32 GetMaximum() const;
524c47aa
SC
122 void PulseGauge();
123 void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
124
1e181c7a 125 void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
a7b9865d 126 void SetToolTip( wxToolTip* tooltip );
1e181c7a 127
c4825ef7 128 void InstallEventHandler( WXWidget control = NULL );
03647350
VZ
129
130 virtual bool DoHandleMouseEvent(NSEvent *event);
f0e0116e
KO
131 virtual bool DoHandleKeyEvent(NSEvent *event);
132 virtual bool DoHandleCharEvent(NSEvent *event, NSString *text);
03647350 133 virtual void DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow);
030495ec 134
ddbc8ac9
SC
135 virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
136 virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
137
4850cc8b 138
4dd9fdf8 139 void SetFlipped(bool flipped);
ee032c59 140 virtual bool IsFlipped() const { return m_isFlipped; }
96defed0
SC
141
142 // cocoa thunk connected calls
4dd9fdf8
SC
143
144 virtual unsigned int draggingEntered(void* sender, WXWidget slf, void* _cmd);
145 virtual void draggingExited(void* sender, WXWidget slf, void* _cmd);
146 virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd);
147 virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd);
148 virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
3a176763 149 virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
4dd9fdf8 150 virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
f0e0116e 151 virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
4dd9fdf8 152 virtual bool performKeyEquivalent(WX_NSEvent event, WXWidget slf, void* _cmd);
09a9eb20 153 virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
4dd9fdf8
SC
154 virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
155 virtual bool resignFirstResponder(WXWidget slf, void* _cmd);
4dd9fdf8
SC
156 virtual bool isFlipped(WXWidget slf, void* _cmd);
157 virtual void drawRect(void* rect, WXWidget slf, void* _cmd);
03647350 158
e32090ba
SC
159 virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
160 virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
ce00f59b 161
75a2c6a1
KO
162 // for wxTextCtrl-derived classes, put here since they don't all derive
163 // from the same pimpl class.
164 virtual void controlTextDidChange();
4dd9fdf8 165
4849f027
SC
166protected:
167 WXWidget m_osxView;
f0e0116e 168 NSEvent* m_lastKeyDownEvent;
4dd9fdf8 169 bool m_isFlipped;
7cb2a241 170 // if it the control has an editor, that editor will already send some
03647350 171 // events, don't resend them
7cb2a241 172 bool m_hasEditor;
03647350 173
4849f027
SC
174 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
175};
176
ffad7b0d
SC
177DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
178
4849f027
SC
179class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
180{
181public :
182 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
183 wxNonOwnedWindowCocoaImpl();
03647350 184
4849f027 185 virtual ~wxNonOwnedWindowCocoaImpl();
03647350 186
0aaa6ace 187 virtual void WillBeDestroyed() ;
4849f027
SC
188 void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
189 long style, long extraStyle, const wxString& name ) ;
17e2694c 190 void Create( wxWindow* parent, WXWindow nativeWindow );
03647350 191
4849f027 192 WXWindow GetWXWindow() const;
03647350 193 void Raise();
4849f027 194 void Lower();
03647350 195 bool Show(bool show);
ab9a0b84
VZ
196
197 virtual bool ShowWithEffect(bool show,
198 wxShowEffect effect,
199 unsigned timeout);
03647350 200
4849f027
SC
201 void Update();
202 bool SetTransparent(wxByte alpha);
203 bool SetBackgroundColour(const wxColour& col );
03647350 204 void SetExtraStyle( long exStyle );
b6dc21e7 205 void SetWindowStyleFlag( long style );
03647350 206 bool SetBackgroundStyle(wxBackgroundStyle style);
4849f027
SC
207 bool CanSetTransparent();
208
209 void MoveWindow(int x, int y, int width, int height);
210 void GetPosition( int &x, int &y ) const;
211 void GetSize( int &width, int &height ) const;
212
03647350 213 void GetContentArea( int &left , int &top , int &width , int &height ) const;
4849f027 214 bool SetShape(const wxRegion& region);
03647350 215
4849f027 216 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
03647350 217
4849f027 218 virtual bool IsMaximized() const;
03647350 219
4849f027 220 virtual bool IsIconized() const;
03647350 221
4849f027 222 virtual void Iconize( bool iconize );
03647350 223
4849f027 224 virtual void Maximize(bool maximize);
03647350 225
4849f027 226 virtual bool IsFullScreen() const;
03647350 227
4849f027 228 virtual bool ShowFullScreen(bool show, long style);
030495ec 229
dbc7ceb9 230 virtual void ShowWithoutActivating();
4849f027
SC
231
232 virtual void RequestUserAttention(int flags);
03647350 233
4849f027 234 virtual void ScreenToWindow( int *x, int *y );
03647350 235
4849f027 236 virtual void WindowToScreen( int *x, int *y );
03647350 237
dbc7ceb9 238 virtual bool IsActive();
ce00f59b 239
efb2fa41 240 virtual void SetModified(bool modified);
ebf7d5c4 241 virtual bool IsModified() const;
030495ec 242
6a0e4ead
VZ
243 virtual void SetRepresentedFilename(const wxString& filename);
244
4849f027 245 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
9d243a47
SC
246
247 CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; }
248 void RestoreWindowLevel();
4849f027 249protected :
9d243a47 250 CGWindowLevel m_macWindowLevel;
447e2772
SC
251 WXWindow m_macWindow;
252 void * m_macFullScreenData ;
4849f027 253 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
03647350 254};
4849f027 255
4850cc8b
SC
256#ifdef __OBJC__
257
5d57348e 258 WXDLLIMPEXP_CORE NSScreen* wxOSXGetMenuScreen();
2acc3915
SC
259 WXDLLIMPEXP_CORE NSRect wxToNSRect( NSView* parent, const wxRect& r );
260 WXDLLIMPEXP_CORE wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
261 WXDLLIMPEXP_CORE NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
262 WXDLLIMPEXP_CORE wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
03647350
VZ
263
264 NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
4850cc8b 265 bool adjustForOrigin = true );
03647350 266
b466e85a 267 // used for many wxControls
03647350 268
b466e85a
SC
269 @interface wxNSButton : NSButton
270 {
411a1c35 271 NSTrackingRectTag rectTag;
b466e85a 272 }
03647350 273
b466e85a
SC
274 @end
275
276 @interface wxNSBox : NSBox
277 {
b466e85a
SC
278 }
279
b466e85a
SC
280 @end
281
7cb2a241
SC
282 @interface wxNSTextFieldEditor : NSTextView
283 {
284 NSEvent* lastKeyDownEvent;
285 }
286
287 @end
288
c8fdb345 289 @interface wxNSTextField : NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
7cb2a241
SC
290 {
291 wxNSTextFieldEditor* fieldEditor;
292 }
293
294 - (wxNSTextFieldEditor*) fieldEditor;
295 - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
296
297 @end
298
c8fdb345 299 @interface wxNSSecureTextField : NSSecureTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
b466e85a 300 {
b466e85a 301 }
7cb2a241
SC
302
303 @end
304
305
030495ec 306 @interface wxNSTextView : NSTextView wxOSX_10_6_AND_LATER(<NSTextViewDelegate>)
7cb2a241
SC
307 {
308 }
030495ec 309
b9cf2753 310 - (void)textDidChange:(NSNotification *)aNotification;
030495ec 311
b466e85a
SC
312 @end
313
ffad7b0d
SC
314 @interface wxNSMenu : NSMenu
315 {
316 wxMenuImpl* impl;
317 }
318
319 - (void) setImplementation:(wxMenuImpl*) item;
320 - (wxMenuImpl*) implementation;
321
03647350 322 @end
ffad7b0d
SC
323
324 @interface wxNSMenuItem : NSMenuItem
325 {
326 wxMenuItemImpl* impl;
327 }
328
329 - (void) setImplementation:(wxMenuItemImpl*) item;
330 - (wxMenuItemImpl*) implementation;
331
332 - (void)clickedAction:(id)sender;
333 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
334
03647350
VZ
335 @end
336
485c6263 337 void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c);
b466e85a 338
724999ee
KO
339 /*
340 We need this for ShowModal, as the sheet just disables the parent window and
341 returns control to the app, whereas we don't want to return from ShowModal
342 until the sheet has been dismissed.
343 */
344 @interface ModalDialogDelegate : NSObject
345 {
346 BOOL sheetFinished;
347 int resultCode;
bfa92264 348 wxDialog* impl;
724999ee
KO
349 }
350
bfa92264 351 - (void)setImplementation: (wxDialog *)dialog;
724999ee
KO
352 - (BOOL)finished;
353 - (int)code;
354 - (void)waitForSheetToFinish;
355 - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
356 @end
357
040050b8
VZ
358 // This interface must be exported in shared 64 bit multilib build but
359 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
360 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
361 // builds but seems to be unnecessary there so to avoid the expense of a
362 // configure check verifying if this does work or not with the current
363 // compiler we just only use it for 64 bit builds where this is always
364 // supported.
365 //
366 // NB: Currently this is the only place where we need to export an
367 // interface but if we need to do it elsewhere we should define a
368 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
369 // instead of duplicating this preprocessor check.
370#ifdef __LP64__
371 WXEXPORT
372#endif // 64 bit builds
373 @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER(<NSApplicationDelegate>)
a5d0c88a
SC
374 {
375 }
376
377 @end
724999ee 378
4850cc8b
SC
379#endif // __OBJC__
380
4849f027
SC
381// NSCursor
382
383WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
384WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
385void wxMacCocoaSetCursor( WX_NSCursor cursor );
386void wxMacCocoaHideCursor();
387void wxMacCocoaShowCursor();
388
389typedef struct tagClassicCursor
390{
391 wxUint16 bits[16];
392 wxUint16 mask[16];
393 wxInt16 hotspot[2];
394}ClassicCursor;
395
524c47aa
SC
396const short kwxCursorBullseye = 0;
397const short kwxCursorBlank = 1;
398const short kwxCursorPencil = 2;
399const short kwxCursorMagnifier = 3;
400const short kwxCursorNoEntry = 4;
401const short kwxCursorPaintBrush = 5;
402const short kwxCursorPointRight = 6;
403const short kwxCursorPointLeft = 7;
404const short kwxCursorQuestionArrow = 8;
405const short kwxCursorRightArrow = 9;
406const short kwxCursorSizeNS = 10;
407const short kwxCursorSize = 11;
408const short kwxCursorSizeNESW = 12;
409const short kwxCursorSizeNWSE = 13;
410const short kwxCursorRoller = 14;
4c00ce28
SC
411const short kwxCursorWatch = 15;
412const short kwxCursorLast = kwxCursorWatch;
524c47aa
SC
413
414// exposing our fallback cursor map
415
416extern ClassicCursor gMacCursors[];
417
4849f027
SC
418#endif
419
420#endif
421 // _WX_PRIVATE_COCOA_H_
422