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
10 // Copyright: (c) Stefan Csomor
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
14 #ifndef _WX_PRIVATE_COCOA_H_
15 #define _WX_PRIVATE_COCOA_H_
17 #include <ApplicationServices/ApplicationServices.h>
20 #import <Cocoa/Cocoa.h>
23 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
24 // available in 10.4 but not in the headers
26 kEventMouseScroll
= 11
30 // shared between Cocoa and Carbon
33 // bring in theming types without pulling in the headers
36 typedef SInt16 ThemeBrush
;
37 CGColorRef WXDLLIMPEXP_CORE
wxMacCreateCGColorFromHITheme( ThemeBrush brush
) ;
38 OSStatus WXDLLIMPEXP_CORE
wxMacDrawCGImage(
39 CGContextRef inContext
,
40 const CGRect
* inBounds
,
42 WX_NSImage WXDLLIMPEXP_CORE
wxOSXGetNSImageFromCGImage( CGImageRef image
);
43 CGImageRef WXDLLIMPEXP_CORE
wxOSXCreateCGImageFromNSImage( WX_NSImage nsimage
);
44 wxBitmap WXDLLIMPEXP_CORE
wxOSXCreateSystemBitmap(const wxString
& id
, const wxString
&client
, const wxSize
& size
);
45 WXWindow WXDLLIMPEXP_CORE
wxOSXGetMainWindow();
47 class WXDLLIMPEXP_FWD_CORE wxDialog
;
49 class WXDLLIMPEXP_CORE wxWidgetCocoaImpl
: public wxWidgetImpl
52 wxWidgetCocoaImpl( wxWindowMac
* peer
, WXWidget w
, bool isRootControl
= false, bool isUserPane
= false ) ;
58 virtual bool IsVisible() const ;
59 virtual void SetVisibility(bool);
61 // we provide a static function which can be reused from
62 // wxNonOwnedWindowCocoaImpl too
63 static bool ShowViewOrWindowWithEffect(wxWindow
*win
,
68 virtual bool ShowWithEffect(bool show
,
76 virtual void ScrollRect( const wxRect
*rect
, int dx
, int dy
);
78 virtual WXWidget
GetWXWidget() const { return m_osxView
; }
80 virtual void SetBackgroundColour(const wxColour
&);
81 virtual bool SetBackgroundStyle(wxBackgroundStyle style
);
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;
87 virtual void SetControlSize( wxWindowVariant variant
);
89 virtual void SetNeedsDisplay( const wxRect
* where
= NULL
);
90 virtual bool GetNeedsDisplay() const;
92 virtual bool CanFocus() const;
93 // return true if successful
94 virtual bool SetFocus();
95 virtual bool HasFocus() const;
97 void RemoveFromParent();
98 void Embed( wxWidgetImpl
*parent
);
100 void SetDefaultButton( bool isDefault
);
102 virtual void SetLabel(const wxString
& title
, wxFontEncoding encoding
);
104 void SetCursor( const wxCursor
& cursor
);
108 void SetDropTarget(wxDropTarget
* target
);
110 wxInt32
GetValue() const;
111 void SetValue( wxInt32 v
);
112 wxBitmap
GetBitmap() const;
113 void SetBitmap( const wxBitmap
& bitmap
);
114 void SetBitmapPosition( wxDirection dir
);
115 void SetupTabs( const wxNotebook
¬ebook
);
116 void GetBestRect( wxRect
*r
) const;
117 bool IsEnabled() const;
118 void Enable( bool enable
);
119 bool ButtonClickDidStateChange() { return true ;}
120 void SetMinimum( wxInt32 v
);
121 void SetMaximum( wxInt32 v
);
122 wxInt32
GetMinimum() const;
123 wxInt32
GetMaximum() const;
125 void SetScrollThumb( wxInt32 value
, wxInt32 thumbSize
);
127 void SetFont( const wxFont
& font
, const wxColour
& foreground
, long windowStyle
, bool ignoreBlack
= true );
128 void SetToolTip( wxToolTip
* tooltip
);
130 void InstallEventHandler( WXWidget control
= NULL
);
132 virtual bool DoHandleMouseEvent(NSEvent
*event
);
133 virtual bool DoHandleKeyEvent(NSEvent
*event
);
134 virtual bool DoHandleCharEvent(NSEvent
*event
, NSString
*text
);
135 virtual void DoNotifyFocusEvent(bool receivedFocus
, wxWidgetImpl
* otherWindow
);
137 virtual void SetupKeyEvent(wxKeyEvent
&wxevent
, NSEvent
* nsEvent
, NSString
* charString
= NULL
);
138 virtual void SetupMouseEvent(wxMouseEvent
&wxevent
, NSEvent
* nsEvent
);
141 void SetFlipped(bool flipped
);
142 virtual bool IsFlipped() const { return m_isFlipped
; }
144 // cocoa thunk connected calls
146 virtual unsigned int draggingEntered(void* sender
, WXWidget slf
, void* _cmd
);
147 virtual void draggingExited(void* sender
, WXWidget slf
, void* _cmd
);
148 virtual unsigned int draggingUpdated(void* sender
, WXWidget slf
, void* _cmd
);
149 virtual bool performDragOperation(void* sender
, WXWidget slf
, void* _cmd
);
150 virtual void mouseEvent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
151 virtual void cursorUpdate(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
152 virtual void keyEvent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
153 virtual void insertText(NSString
* text
, WXWidget slf
, void* _cmd
);
154 virtual bool performKeyEquivalent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
155 virtual bool acceptsFirstResponder(WXWidget slf
, void* _cmd
);
156 virtual bool becomeFirstResponder(WXWidget slf
, void* _cmd
);
157 virtual bool resignFirstResponder(WXWidget slf
, void* _cmd
);
158 virtual bool isFlipped(WXWidget slf
, void* _cmd
);
159 virtual void drawRect(void* rect
, WXWidget slf
, void* _cmd
);
161 virtual void controlAction(WXWidget slf
, void* _cmd
, void* sender
);
162 virtual void controlDoubleAction(WXWidget slf
, void* _cmd
, void *sender
);
164 // for wxTextCtrl-derived classes, put here since they don't all derive
165 // from the same pimpl class.
166 virtual void controlTextDidChange();
170 NSEvent
* m_lastKeyDownEvent
;
172 // if it the control has an editor, that editor will already send some
173 // events, don't resend them
176 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl
)
179 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow
);
181 class wxNonOwnedWindowCocoaImpl
: public wxNonOwnedWindowImpl
184 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow
* nonownedwnd
) ;
185 wxNonOwnedWindowCocoaImpl();
187 virtual ~wxNonOwnedWindowCocoaImpl();
189 virtual void WillBeDestroyed() ;
190 void Create( wxWindow
* parent
, const wxPoint
& pos
, const wxSize
& size
,
191 long style
, long extraStyle
, const wxString
& name
) ;
192 void Create( wxWindow
* parent
, WXWindow nativeWindow
);
194 WXWindow
GetWXWindow() const;
197 bool Show(bool show
);
199 virtual bool ShowWithEffect(bool show
,
204 bool SetTransparent(wxByte alpha
);
205 bool SetBackgroundColour(const wxColour
& col
);
206 void SetExtraStyle( long exStyle
);
207 void SetWindowStyleFlag( long style
);
208 bool SetBackgroundStyle(wxBackgroundStyle style
);
209 bool CanSetTransparent();
211 void MoveWindow(int x
, int y
, int width
, int height
);
212 void GetPosition( int &x
, int &y
) const;
213 void GetSize( int &width
, int &height
) const;
215 void GetContentArea( int &left
, int &top
, int &width
, int &height
) const;
216 bool SetShape(const wxRegion
& region
);
218 virtual void SetTitle( const wxString
& title
, wxFontEncoding encoding
) ;
220 virtual bool IsMaximized() const;
222 virtual bool IsIconized() const;
224 virtual void Iconize( bool iconize
);
226 virtual void Maximize(bool maximize
);
228 virtual bool IsFullScreen() const;
230 virtual bool ShowFullScreen(bool show
, long style
);
232 virtual void ShowWithoutActivating();
234 virtual void RequestUserAttention(int flags
);
236 virtual void ScreenToWindow( int *x
, int *y
);
238 virtual void WindowToScreen( int *x
, int *y
);
240 virtual bool IsActive();
242 virtual void SetModified(bool modified
);
243 virtual bool IsModified() const;
245 virtual void SetRepresentedFilename(const wxString
& filename
);
247 wxNonOwnedWindow
* GetWXPeer() { return m_wxPeer
; }
249 CGWindowLevel
GetWindowLevel() const { return m_macWindowLevel
; }
250 void RestoreWindowLevel();
252 CGWindowLevel m_macWindowLevel
;
253 WXWindow m_macWindow
;
254 void * m_macFullScreenData
;
255 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl
)
258 DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton
);
260 class wxButtonCocoaImpl
: public wxWidgetCocoaImpl
, public wxButtonImpl
263 wxButtonCocoaImpl(wxWindowMac
*wxpeer
, wxNSButton
*v
);
264 virtual void SetBitmap(const wxBitmap
& bitmap
);
266 virtual void SetLabelMarkup(const wxString
& markup
);
267 #endif // wxUSE_MARKUP
269 void SetPressedBitmap( const wxBitmap
& bitmap
);
270 void GetLayoutInset(int &left
, int &top
, int &right
, int &bottom
) const;
271 void SetAcceleratorFromLabel(const wxString
& label
);
274 NSButton
*GetNSButton() const;
279 WXDLLIMPEXP_CORE NSScreen
* wxOSXGetMenuScreen();
280 WXDLLIMPEXP_CORE NSRect
wxToNSRect( NSView
* parent
, const wxRect
& r
);
281 WXDLLIMPEXP_CORE wxRect
wxFromNSRect( NSView
* parent
, const NSRect
& rect
);
282 WXDLLIMPEXP_CORE NSPoint
wxToNSPoint( NSView
* parent
, const wxPoint
& p
);
283 WXDLLIMPEXP_CORE wxPoint
wxFromNSPoint( NSView
* parent
, const NSPoint
& p
);
285 NSRect WXDLLIMPEXP_CORE
wxOSXGetFrameForControl( wxWindowMac
* window
, const wxPoint
& pos
, const wxSize
&size
,
286 bool adjustForOrigin
= true );
288 // used for many wxControls
290 @interface wxNSButton
: NSButton
292 NSTrackingRectTag rectTag
;
297 @interface wxNSBox
: NSBox
303 @interface wxNSTextFieldEditor
: NSTextView
305 NSEvent
* lastKeyDownEvent
;
310 @interface wxNSTextField
: NSTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
312 wxNSTextFieldEditor
* fieldEditor
;
315 - (wxNSTextFieldEditor
*) fieldEditor
;
316 - (void) setFieldEditor
:(wxNSTextFieldEditor
*) fieldEditor
;
320 @interface wxNSSecureTextField
: NSSecureTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
327 @interface wxNSTextView
: NSTextView
wxOSX_10_6_AND_LATER(<NSTextViewDelegate
>)
331 - (void)textDidChange
:(NSNotification
*)aNotification
;
335 @interface wxNSMenu
: NSMenu
340 - (void) setImplementation
:(wxMenuImpl
*) item
;
341 - (wxMenuImpl
*) implementation
;
345 @interface wxNSMenuItem
: NSMenuItem
347 wxMenuItemImpl
* impl
;
350 - (void) setImplementation
:(wxMenuItemImpl
*) item
;
351 - (wxMenuItemImpl
*) implementation
;
353 - (void)clickedAction
:(id
)sender
;
354 - (BOOL
)validateMenuItem
:(NSMenuItem
*)menuItem
;
358 void WXDLLIMPEXP_CORE
wxOSXCocoaClassAddWXMethods(Class c
);
361 We need this for ShowModal, as the sheet just disables the parent window and
362 returns control to the app, whereas we don't want to return from ShowModal
363 until the sheet has been dismissed.
365 @interface ModalDialogDelegate
: NSObject
372 - (void)setImplementation
: (wxDialog
*)dialog
;
375 - (void)waitForSheetToFinish
;
376 - (void)sheetDidEnd
:(NSWindow
*)sheet returnCode
:(int)returnCode contextInfo
:(void *)contextInfo
;
379 // This interface must be exported in shared 64 bit multilib build but
380 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
381 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
382 // builds but seems to be unnecessary there so to avoid the expense of a
383 // configure check verifying if this does work or not with the current
384 // compiler we just only use it for 64 bit builds where this is always
387 // NB: Currently this is the only place where we need to export an
388 // interface but if we need to do it elsewhere we should define a
389 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
390 // instead of duplicating this preprocessor check.
393 #endif // 64 bit builds
394 @interface wxNSAppController
: NSObject
wxOSX_10_6_AND_LATER(<NSApplicationDelegate
>)
404 WX_NSCursor
wxMacCocoaCreateStockCursor( int cursor_type
);
405 WX_NSCursor
wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef
, float hotSpotX
, float hotSpotY
);
406 void wxMacCocoaSetCursor( WX_NSCursor cursor
);
407 void wxMacCocoaHideCursor();
408 void wxMacCocoaShowCursor();
410 typedef struct tagClassicCursor
417 const short kwxCursorBullseye
= 0;
418 const short kwxCursorBlank
= 1;
419 const short kwxCursorPencil
= 2;
420 const short kwxCursorMagnifier
= 3;
421 const short kwxCursorNoEntry
= 4;
422 const short kwxCursorPaintBrush
= 5;
423 const short kwxCursorPointRight
= 6;
424 const short kwxCursorPointLeft
= 7;
425 const short kwxCursorQuestionArrow
= 8;
426 const short kwxCursorRightArrow
= 9;
427 const short kwxCursorSizeNS
= 10;
428 const short kwxCursorSize
= 11;
429 const short kwxCursorSizeNESW
= 12;
430 const short kwxCursorSizeNWSE
= 13;
431 const short kwxCursorRoller
= 14;
432 const short kwxCursorWatch
= 15;
433 const short kwxCursorLast
= kwxCursorWatch
;
435 // exposing our fallback cursor map
437 extern ClassicCursor gMacCursors
[];
439 extern NSLayoutManager
* gNSLayoutManager
;
444 // _WX_PRIVATE_COCOA_H_