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