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