]> git.saurik.com Git - wxWidgets.git/blame - include/wx/osx/cocoa/private.h
Fix wrong tab order in wxAuiNotebook after dragging.
[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
2ab38025
SC
92 virtual void SetDrawingEnabled(bool enabled);
93
4849f027
SC
94 virtual bool CanFocus() const;
95 // return true if successful
96 virtual bool SetFocus();
97 virtual bool HasFocus() const;
98
99 void RemoveFromParent();
100 void Embed( wxWidgetImpl *parent );
524c47aa
SC
101
102 void SetDefaultButton( bool isDefault );
103 void PerformClick();
a4e32492 104 virtual void SetLabel(const wxString& title, wxFontEncoding encoding);
524c47aa 105
54f11060
SC
106 void SetCursor( const wxCursor & cursor );
107 void CaptureMouse();
108 void ReleaseMouse();
109
14de8214
SC
110 void SetDropTarget(wxDropTarget* target);
111
524c47aa
SC
112 wxInt32 GetValue() const;
113 void SetValue( wxInt32 v );
e5d05b90 114 wxBitmap GetBitmap() const;
524c47aa 115 void SetBitmap( const wxBitmap& bitmap );
e5d05b90 116 void SetBitmapPosition( wxDirection dir );
524c47aa
SC
117 void SetupTabs( const wxNotebook &notebook );
118 void GetBestRect( wxRect *r ) const;
119 bool IsEnabled() const;
120 void Enable( bool enable );
121 bool ButtonClickDidStateChange() { return true ;}
122 void SetMinimum( wxInt32 v );
123 void SetMaximum( wxInt32 v );
19c7ac3d
SC
124 wxInt32 GetMinimum() const;
125 wxInt32 GetMaximum() const;
524c47aa
SC
126 void PulseGauge();
127 void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
128
1e181c7a 129 void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
a7b9865d 130 void SetToolTip( wxToolTip* tooltip );
1e181c7a 131
c4825ef7 132 void InstallEventHandler( WXWidget control = NULL );
03647350
VZ
133
134 virtual bool DoHandleMouseEvent(NSEvent *event);
f0e0116e
KO
135 virtual bool DoHandleKeyEvent(NSEvent *event);
136 virtual bool DoHandleCharEvent(NSEvent *event, NSString *text);
03647350 137 virtual void DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow);
030495ec 138
ddbc8ac9
SC
139 virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
140 virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
141
4850cc8b 142
4dd9fdf8 143 void SetFlipped(bool flipped);
ee032c59 144 virtual bool IsFlipped() const { return m_isFlipped; }
96defed0
SC
145
146 // cocoa thunk connected calls
4dd9fdf8
SC
147
148 virtual unsigned int draggingEntered(void* sender, WXWidget slf, void* _cmd);
149 virtual void draggingExited(void* sender, WXWidget slf, void* _cmd);
150 virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd);
151 virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd);
152 virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
3a176763 153 virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
4dd9fdf8 154 virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
f0e0116e 155 virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
4dd9fdf8 156 virtual bool performKeyEquivalent(WX_NSEvent event, WXWidget slf, void* _cmd);
09a9eb20 157 virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
4dd9fdf8
SC
158 virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
159 virtual bool resignFirstResponder(WXWidget slf, void* _cmd);
4dd9fdf8
SC
160 virtual bool isFlipped(WXWidget slf, void* _cmd);
161 virtual void drawRect(void* rect, WXWidget slf, void* _cmd);
03647350 162
e32090ba
SC
163 virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
164 virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
ce00f59b 165
75a2c6a1
KO
166 // for wxTextCtrl-derived classes, put here since they don't all derive
167 // from the same pimpl class.
168 virtual void controlTextDidChange();
4dd9fdf8 169
4849f027
SC
170protected:
171 WXWidget m_osxView;
f0e0116e 172 NSEvent* m_lastKeyDownEvent;
4dd9fdf8 173 bool m_isFlipped;
7cb2a241 174 // if it the control has an editor, that editor will already send some
03647350 175 // events, don't resend them
7cb2a241 176 bool m_hasEditor;
03647350 177
4849f027
SC
178 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
179};
180
ffad7b0d
SC
181DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
182
4849f027
SC
183class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
184{
185public :
186 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
187 wxNonOwnedWindowCocoaImpl();
03647350 188
4849f027 189 virtual ~wxNonOwnedWindowCocoaImpl();
03647350 190
0aaa6ace 191 virtual void WillBeDestroyed() ;
4849f027
SC
192 void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
193 long style, long extraStyle, const wxString& name ) ;
17e2694c 194 void Create( wxWindow* parent, WXWindow nativeWindow );
03647350 195
4849f027 196 WXWindow GetWXWindow() const;
03647350 197 void Raise();
4849f027 198 void Lower();
03647350 199 bool Show(bool show);
ab9a0b84
VZ
200
201 virtual bool ShowWithEffect(bool show,
202 wxShowEffect effect,
203 unsigned timeout);
03647350 204
4849f027
SC
205 void Update();
206 bool SetTransparent(wxByte alpha);
207 bool SetBackgroundColour(const wxColour& col );
03647350 208 void SetExtraStyle( long exStyle );
b6dc21e7 209 void SetWindowStyleFlag( long style );
03647350 210 bool SetBackgroundStyle(wxBackgroundStyle style);
4849f027
SC
211 bool CanSetTransparent();
212
213 void MoveWindow(int x, int y, int width, int height);
214 void GetPosition( int &x, int &y ) const;
215 void GetSize( int &width, int &height ) const;
216
03647350 217 void GetContentArea( int &left , int &top , int &width , int &height ) const;
4849f027 218 bool SetShape(const wxRegion& region);
03647350 219
4849f027 220 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
03647350 221
4849f027 222 virtual bool IsMaximized() const;
03647350 223
4849f027 224 virtual bool IsIconized() const;
03647350 225
4849f027 226 virtual void Iconize( bool iconize );
03647350 227
4849f027 228 virtual void Maximize(bool maximize);
03647350 229
4849f027 230 virtual bool IsFullScreen() const;
03647350 231
4849f027 232 virtual bool ShowFullScreen(bool show, long style);
030495ec 233
dbc7ceb9 234 virtual void ShowWithoutActivating();
4849f027
SC
235
236 virtual void RequestUserAttention(int flags);
03647350 237
4849f027 238 virtual void ScreenToWindow( int *x, int *y );
03647350 239
4849f027 240 virtual void WindowToScreen( int *x, int *y );
03647350 241
dbc7ceb9 242 virtual bool IsActive();
ce00f59b 243
efb2fa41 244 virtual void SetModified(bool modified);
ebf7d5c4 245 virtual bool IsModified() const;
030495ec 246
6a0e4ead
VZ
247 virtual void SetRepresentedFilename(const wxString& filename);
248
4849f027 249 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
9d243a47
SC
250
251 CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; }
252 void RestoreWindowLevel();
4849f027 253protected :
9d243a47 254 CGWindowLevel m_macWindowLevel;
447e2772
SC
255 WXWindow m_macWindow;
256 void * m_macFullScreenData ;
4849f027 257 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
03647350 258};
4849f027 259
a1b719bc
SC
260DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton );
261
262class wxButtonCocoaImpl : public wxWidgetCocoaImpl, public wxButtonImpl
263{
264public:
265 wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v);
266 virtual void SetBitmap(const wxBitmap& bitmap);
267#if wxUSE_MARKUP
268 virtual void SetLabelMarkup(const wxString& markup);
269#endif // wxUSE_MARKUP
270
271 void SetPressedBitmap( const wxBitmap& bitmap );
272 void GetLayoutInset(int &left , int &top , int &right, int &bottom) const;
2ab67385
SC
273 void SetAcceleratorFromLabel(const wxString& label);
274
a1b719bc
SC
275 NSButton *GetNSButton() const;
276};
277
4850cc8b
SC
278#ifdef __OBJC__
279
5d57348e 280 WXDLLIMPEXP_CORE NSScreen* wxOSXGetMenuScreen();
2acc3915
SC
281 WXDLLIMPEXP_CORE NSRect wxToNSRect( NSView* parent, const wxRect& r );
282 WXDLLIMPEXP_CORE wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
283 WXDLLIMPEXP_CORE NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
284 WXDLLIMPEXP_CORE wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
03647350
VZ
285
286 NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
4850cc8b 287 bool adjustForOrigin = true );
03647350 288
b466e85a 289 // used for many wxControls
03647350 290
b466e85a
SC
291 @interface wxNSButton : NSButton
292 {
411a1c35 293 NSTrackingRectTag rectTag;
b466e85a 294 }
03647350 295
b466e85a
SC
296 @end
297
298 @interface wxNSBox : NSBox
299 {
b466e85a
SC
300 }
301
b466e85a
SC
302 @end
303
7cb2a241
SC
304 @interface wxNSTextFieldEditor : NSTextView
305 {
306 NSEvent* lastKeyDownEvent;
307 }
308
309 @end
310
c8fdb345 311 @interface wxNSTextField : NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
7cb2a241
SC
312 {
313 wxNSTextFieldEditor* fieldEditor;
314 }
315
316 - (wxNSTextFieldEditor*) fieldEditor;
317 - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
318
319 @end
320
c8fdb345 321 @interface wxNSSecureTextField : NSSecureTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
b466e85a 322 {
b466e85a 323 }
7cb2a241
SC
324
325 @end
326
327
030495ec 328 @interface wxNSTextView : NSTextView wxOSX_10_6_AND_LATER(<NSTextViewDelegate>)
7cb2a241
SC
329 {
330 }
030495ec 331
b9cf2753 332 - (void)textDidChange:(NSNotification *)aNotification;
030495ec 333
b466e85a
SC
334 @end
335
ffad7b0d
SC
336 @interface wxNSMenu : NSMenu
337 {
338 wxMenuImpl* impl;
339 }
340
341 - (void) setImplementation:(wxMenuImpl*) item;
342 - (wxMenuImpl*) implementation;
343
03647350 344 @end
ffad7b0d
SC
345
346 @interface wxNSMenuItem : NSMenuItem
347 {
348 wxMenuItemImpl* impl;
349 }
350
351 - (void) setImplementation:(wxMenuItemImpl*) item;
352 - (wxMenuItemImpl*) implementation;
353
354 - (void)clickedAction:(id)sender;
355 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
356
03647350
VZ
357 @end
358
485c6263 359 void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c);
b466e85a 360
724999ee
KO
361 /*
362 We need this for ShowModal, as the sheet just disables the parent window and
363 returns control to the app, whereas we don't want to return from ShowModal
364 until the sheet has been dismissed.
365 */
366 @interface ModalDialogDelegate : NSObject
367 {
368 BOOL sheetFinished;
369 int resultCode;
bfa92264 370 wxDialog* impl;
724999ee
KO
371 }
372
bfa92264 373 - (void)setImplementation: (wxDialog *)dialog;
724999ee
KO
374 - (BOOL)finished;
375 - (int)code;
376 - (void)waitForSheetToFinish;
377 - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
378 @end
379
040050b8
VZ
380 // This interface must be exported in shared 64 bit multilib build but
381 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
382 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
383 // builds but seems to be unnecessary there so to avoid the expense of a
384 // configure check verifying if this does work or not with the current
385 // compiler we just only use it for 64 bit builds where this is always
386 // supported.
387 //
388 // NB: Currently this is the only place where we need to export an
389 // interface but if we need to do it elsewhere we should define a
390 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
391 // instead of duplicating this preprocessor check.
392#ifdef __LP64__
393 WXEXPORT
394#endif // 64 bit builds
395 @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER(<NSApplicationDelegate>)
a5d0c88a
SC
396 {
397 }
398
399 @end
724999ee 400
4850cc8b
SC
401#endif // __OBJC__
402
4849f027
SC
403// NSCursor
404
405WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
406WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
407void wxMacCocoaSetCursor( WX_NSCursor cursor );
408void wxMacCocoaHideCursor();
409void wxMacCocoaShowCursor();
410
411typedef struct tagClassicCursor
412{
413 wxUint16 bits[16];
414 wxUint16 mask[16];
415 wxInt16 hotspot[2];
416}ClassicCursor;
417
524c47aa
SC
418const short kwxCursorBullseye = 0;
419const short kwxCursorBlank = 1;
420const short kwxCursorPencil = 2;
421const short kwxCursorMagnifier = 3;
422const short kwxCursorNoEntry = 4;
423const short kwxCursorPaintBrush = 5;
424const short kwxCursorPointRight = 6;
425const short kwxCursorPointLeft = 7;
426const short kwxCursorQuestionArrow = 8;
427const short kwxCursorRightArrow = 9;
428const short kwxCursorSizeNS = 10;
429const short kwxCursorSize = 11;
430const short kwxCursorSizeNESW = 12;
431const short kwxCursorSizeNWSE = 13;
432const short kwxCursorRoller = 14;
4c00ce28
SC
433const short kwxCursorWatch = 15;
434const short kwxCursorLast = kwxCursorWatch;
524c47aa
SC
435
436// exposing our fallback cursor map
437
438extern ClassicCursor gMacCursors[];
439
befe64ed
SC
440extern NSLayoutManager* gNSLayoutManager;
441
4849f027
SC
442#endif
443
444#endif
445 // _WX_PRIVATE_COCOA_H_
446