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
6 // Author: Stefan Csomor
9 // RCS-ID: $Id: private.h 53819 2008-05-29 14:11:45Z SC $
10 // Copyright: (c) Stefan Csomor
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
14 #ifndef _WX_PRIVATE_COCOA_H_
15 #define _WX_PRIVATE_COCOA_H_
17 #include "wx/osx/core/private.h"
21 #include <ApplicationServices/ApplicationServices.h>
23 #if wxOSX_USE_ATSU_TEXT
24 // we need theming and atsu
25 #include <Carbon/Carbon.h>
27 // we only need theming, if we find a better include replace the following
28 #include <Carbon/Carbon.h>
32 #import <Cocoa/Cocoa.h>
35 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
36 // available in 10.4 but not in the headers
38 kEventMouseScroll
= 11
42 // shared between Cocoa and Carbon
45 // bring in theming types without pulling in the headers
48 typedef SInt16 ThemeBrush
;
49 CGColorRef WXDLLIMPEXP_CORE
wxMacCreateCGColorFromHITheme( ThemeBrush brush
) ;
50 OSStatus WXDLLIMPEXP_CORE
wxMacDrawCGImage(
51 CGContextRef inContext
,
52 const CGRect
* inBounds
,
54 WX_NSImage WXDLLIMPEXP_CORE
wxOSXCreateNSImageFromCGImage( CGImageRef image
);
55 CGImageRef WXDLLIMPEXP_CORE
wxOSXCreateCGImageFromNSImage( WX_NSImage nsimage
);
58 long UMAGetSystemVersion() ;
59 WXDLLIMPEXP_BASE
void wxMacStringToPascal( const wxString
&from
, StringPtr to
);
60 WXDLLIMPEXP_BASE wxString
wxMacFSRefToPath( const FSRef
*fsRef
, CFStringRef additionalPathComponent
= NULL
);
61 WXDLLIMPEXP_BASE OSStatus
wxMacPathToFSRef( const wxString
&path
, FSRef
*fsRef
);
62 WXDLLIMPEXP_BASE wxString
wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname
);
64 class WXDLLIMPEXP_FWD_CORE wxDialog
;
72 class WXDLLIMPEXP_CORE wxWidgetCocoaImpl
: public wxWidgetImpl
75 wxWidgetCocoaImpl( wxWindowMac
* peer
, WXWidget w
, bool isRootControl
= false ) ;
81 virtual bool IsVisible() const ;
82 virtual void SetVisibility(bool);
84 // we provide a static function which can be reused from
85 // wxNonOwnedWindowCocoaImpl too
86 static bool ShowViewOrWindowWithEffect(wxWindow
*win
,
91 virtual bool ShowWithEffect(bool show
,
99 virtual void ScrollRect( const wxRect
*rect
, int dx
, int dy
);
101 virtual WXWidget
GetWXWidget() const { return m_osxView
; }
103 virtual void SetBackgroundColour(const wxColour
&);
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;
109 virtual void SetControlSize( wxWindowVariant variant
);
111 virtual void SetNeedsDisplay( const wxRect
* where
= NULL
);
112 virtual bool GetNeedsDisplay() const;
114 virtual bool CanFocus() const;
115 // return true if successful
116 virtual bool SetFocus();
117 virtual bool HasFocus() const;
119 void RemoveFromParent();
120 void Embed( wxWidgetImpl
*parent
);
122 void SetDefaultButton( bool isDefault
);
124 virtual void SetLabel(const wxString
& title
, wxFontEncoding encoding
);
126 void SetCursor( const wxCursor
& cursor
);
130 wxInt32
GetValue() const;
131 void SetValue( wxInt32 v
);
132 wxBitmap
GetBitmap() const;
133 void SetBitmap( const wxBitmap
& bitmap
);
134 void SetBitmapPosition( wxDirection dir
);
135 void SetupTabs( const wxNotebook
¬ebook
);
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
);
142 wxInt32
GetMinimum() const;
143 wxInt32
GetMaximum() const;
145 void SetScrollThumb( wxInt32 value
, wxInt32 thumbSize
);
147 void SetFont( const wxFont
& font
, const wxColour
& foreground
, long windowStyle
, bool ignoreBlack
= true );
149 void InstallEventHandler( WXWidget control
= NULL
);
151 virtual bool DoHandleMouseEvent(NSEvent
*event
);
152 virtual bool DoHandleKeyEvent(NSEvent
*event
);
153 virtual bool DoHandleCharEvent(NSEvent
*event
, NSString
*text
);
154 virtual void DoNotifyFocusEvent(bool receivedFocus
, wxWidgetImpl
* otherWindow
);
156 virtual void SetupKeyEvent(wxKeyEvent
&wxevent
, NSEvent
* nsEvent
, NSString
* charString
= NULL
);
157 virtual void SetupMouseEvent(wxMouseEvent
&wxevent
, NSEvent
* nsEvent
);
160 void SetFlipped(bool flipped
);
161 virtual bool IsFlipped() const { return m_isFlipped
; }
163 // cocoa thunk connected calls
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
);
171 virtual void insertText(NSString
* text
, WXWidget slf
, void* _cmd
);
172 virtual bool performKeyEquivalent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
173 virtual bool acceptsFirstResponder(WXWidget slf
, void* _cmd
);
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
);
180 virtual void controlAction(WXWidget slf
, void* _cmd
, void* sender
);
181 virtual void controlDoubleAction(WXWidget slf
, void* _cmd
, void *sender
);
183 // for wxTextCtrl-derived classes, put here since they don't all derive
184 // from the same pimpl class.
185 virtual void controlTextDidChange();
189 NSEvent
* m_lastKeyDownEvent
;
191 // if it the control has an editor, that editor will already send some
192 // events, don't resend them
195 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl
)
198 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow
);
200 class wxNonOwnedWindowCocoaImpl
: public wxNonOwnedWindowImpl
203 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow
* nonownedwnd
) ;
204 wxNonOwnedWindowCocoaImpl();
206 virtual ~wxNonOwnedWindowCocoaImpl();
208 virtual void WillBeDestroyed() ;
209 void Create( wxWindow
* parent
, const wxPoint
& pos
, const wxSize
& size
,
210 long style
, long extraStyle
, const wxString
& name
) ;
212 WXWindow
GetWXWindow() const;
215 bool Show(bool show
);
217 virtual bool ShowWithEffect(bool show
,
222 bool SetTransparent(wxByte alpha
);
223 bool SetBackgroundColour(const wxColour
& col
);
224 void SetExtraStyle( long exStyle
);
225 void SetWindowStyleFlag( long style
);
226 bool SetBackgroundStyle(wxBackgroundStyle style
);
227 bool CanSetTransparent();
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;
233 void GetContentArea( int &left
, int &top
, int &width
, int &height
) const;
234 bool SetShape(const wxRegion
& region
);
236 virtual void SetTitle( const wxString
& title
, wxFontEncoding encoding
) ;
238 virtual bool IsMaximized() const;
240 virtual bool IsIconized() const;
242 virtual void Iconize( bool iconize
);
244 virtual void Maximize(bool maximize
);
246 virtual bool IsFullScreen() const;
248 virtual bool ShowFullScreen(bool show
, long style
);
250 virtual void ShowWithoutActivating();
252 virtual void RequestUserAttention(int flags
);
254 virtual void ScreenToWindow( int *x
, int *y
);
256 virtual void WindowToScreen( int *x
, int *y
);
258 virtual bool IsActive();
260 virtual void SetModified(bool modified
);
261 virtual bool IsModified() const;
263 wxNonOwnedWindow
* GetWXPeer() { return m_wxPeer
; }
265 WX_wxNSWindow m_macWindow
;
266 void * m_macFullScreenData
;
267 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl
)
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
);
277 NSRect WXDLLIMPEXP_CORE
wxOSXGetFrameForControl( wxWindowMac
* window
, const wxPoint
& pos
, const wxSize
&size
,
278 bool adjustForOrigin
= true );
280 // used for many wxControls
282 @interface wxNSButton
: NSButton
284 NSTrackingRectTag rectTag
;
289 @interface wxNSBox
: NSBox
295 @interface wxNSTextFieldEditor
: NSTextView
297 NSEvent
* lastKeyDownEvent
;
302 @interface wxNSTextField
: NSTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
304 wxNSTextFieldEditor
* fieldEditor
;
307 - (wxNSTextFieldEditor
*) fieldEditor
;
308 - (void) setFieldEditor
:(wxNSTextFieldEditor
*) fieldEditor
;
312 @interface wxNSSecureTextField
: NSSecureTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
319 @interface wxNSTextView
: NSTextView
wxOSX_10_6_AND_LATER(<NSTextViewDelegate
>)
323 - (void)textDidChange
:(NSNotification
*)aNotification
;
327 @interface wxNSMenu
: NSMenu
332 - (void) setImplementation
:(wxMenuImpl
*) item
;
333 - (wxMenuImpl
*) implementation
;
337 @interface wxNSMenuItem
: NSMenuItem
339 wxMenuItemImpl
* impl
;
342 - (void) setImplementation
:(wxMenuItemImpl
*) item
;
343 - (wxMenuItemImpl
*) implementation
;
345 - (void)clickedAction
:(id
)sender
;
346 - (BOOL
)validateMenuItem
:(NSMenuItem
*)menuItem
;
350 void WXDLLIMPEXP_CORE
wxOSXCocoaClassAddWXMethods(Class c
);
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.
357 @interface ModalDialogDelegate
: NSObject
364 - (void)setImplementation
: (wxDialog
*)dialog
;
367 - (void)waitForSheetToFinish
;
368 - (void)sheetDidEnd
:(NSWindow
*)sheet returnCode
:(int)returnCode contextInfo
:(void *)contextInfo
;
376 WX_NSCursor
wxMacCocoaCreateStockCursor( int cursor_type
);
377 WX_NSCursor
wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef
, float hotSpotX
, float hotSpotY
);
378 void wxMacCocoaSetCursor( WX_NSCursor cursor
);
379 void wxMacCocoaHideCursor();
380 void wxMacCocoaShowCursor();
382 typedef struct tagClassicCursor
389 const short kwxCursorBullseye
= 0;
390 const short kwxCursorBlank
= 1;
391 const short kwxCursorPencil
= 2;
392 const short kwxCursorMagnifier
= 3;
393 const short kwxCursorNoEntry
= 4;
394 const short kwxCursorPaintBrush
= 5;
395 const short kwxCursorPointRight
= 6;
396 const short kwxCursorPointLeft
= 7;
397 const short kwxCursorQuestionArrow
= 8;
398 const short kwxCursorRightArrow
= 9;
399 const short kwxCursorSizeNS
= 10;
400 const short kwxCursorSize
= 11;
401 const short kwxCursorSizeNESW
= 12;
402 const short kwxCursorSizeNWSE
= 13;
403 const short kwxCursorRoller
= 14;
404 const short kwxCursorLast
= kwxCursorRoller
;
406 // exposing our fallback cursor map
408 extern ClassicCursor gMacCursors
[];
413 // _WX_PRIVATE_COCOA_H_