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