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 void SetDrawingEnabled(bool enabled
);
94 virtual bool CanFocus() const;
95 // return true if successful
96 virtual bool SetFocus();
97 virtual bool HasFocus() const;
99 void RemoveFromParent();
100 void Embed( wxWidgetImpl
*parent
);
102 void SetDefaultButton( bool isDefault
);
104 virtual void SetLabel(const wxString
& title
, wxFontEncoding encoding
);
106 void SetCursor( const wxCursor
& cursor
);
110 void SetDropTarget(wxDropTarget
* target
);
112 wxInt32
GetValue() const;
113 void SetValue( wxInt32 v
);
114 wxBitmap
GetBitmap() const;
115 void SetBitmap( const wxBitmap
& bitmap
);
116 void SetBitmapPosition( wxDirection dir
);
117 void SetupTabs( const wxNotebook
¬ebook
);
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
);
124 wxInt32
GetMinimum() const;
125 wxInt32
GetMaximum() const;
127 void SetScrollThumb( wxInt32 value
, wxInt32 thumbSize
);
129 void SetFont( const wxFont
& font
, const wxColour
& foreground
, long windowStyle
, bool ignoreBlack
= true );
130 void SetToolTip( wxToolTip
* tooltip
);
132 void InstallEventHandler( WXWidget control
= NULL
);
134 virtual bool DoHandleMouseEvent(NSEvent
*event
);
135 virtual bool DoHandleKeyEvent(NSEvent
*event
);
136 virtual bool DoHandleCharEvent(NSEvent
*event
, NSString
*text
);
137 virtual void DoNotifyFocusEvent(bool receivedFocus
, wxWidgetImpl
* otherWindow
);
139 virtual void SetupKeyEvent(wxKeyEvent
&wxevent
, NSEvent
* nsEvent
, NSString
* charString
= NULL
);
140 virtual void SetupMouseEvent(wxMouseEvent
&wxevent
, NSEvent
* nsEvent
);
141 void SetupCoordinates(wxCoord
&x
, wxCoord
&y
, NSEvent
*nsEvent
);
142 virtual bool SetupCursor(NSEvent
* event
);
145 #if !wxOSX_USE_NATIVE_FLIPPED
146 void SetFlipped(bool flipped
);
147 virtual bool IsFlipped() const { return m_isFlipped
; }
150 // cocoa thunk connected calls
152 virtual unsigned int draggingEntered(void* sender
, WXWidget slf
, void* _cmd
);
153 virtual void draggingExited(void* sender
, WXWidget slf
, void* _cmd
);
154 virtual unsigned int draggingUpdated(void* sender
, WXWidget slf
, void* _cmd
);
155 virtual bool performDragOperation(void* sender
, WXWidget slf
, void* _cmd
);
156 virtual void mouseEvent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
157 virtual void cursorUpdate(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
158 virtual void keyEvent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
159 virtual void insertText(NSString
* text
, WXWidget slf
, void* _cmd
);
160 virtual bool performKeyEquivalent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
161 virtual bool acceptsFirstResponder(WXWidget slf
, void* _cmd
);
162 virtual bool becomeFirstResponder(WXWidget slf
, void* _cmd
);
163 virtual bool resignFirstResponder(WXWidget slf
, void* _cmd
);
164 #if !wxOSX_USE_NATIVE_FLIPPED
165 virtual bool isFlipped(WXWidget slf
, void* _cmd
);
167 virtual void drawRect(void* rect
, WXWidget slf
, void* _cmd
);
169 virtual void controlAction(WXWidget slf
, void* _cmd
, void* sender
);
170 virtual void controlDoubleAction(WXWidget slf
, void* _cmd
, void *sender
);
172 // for wxTextCtrl-derived classes, put here since they don't all derive
173 // from the same pimpl class.
174 virtual void controlTextDidChange();
178 NSEvent
* m_lastKeyDownEvent
;
179 #if !wxOSX_USE_NATIVE_FLIPPED
182 // if it the control has an editor, that editor will already send some
183 // events, don't resend them
186 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl
)
189 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow
);
191 class wxNonOwnedWindowCocoaImpl
: public wxNonOwnedWindowImpl
194 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow
* nonownedwnd
) ;
195 wxNonOwnedWindowCocoaImpl();
197 virtual ~wxNonOwnedWindowCocoaImpl();
199 virtual void WillBeDestroyed() ;
200 void Create( wxWindow
* parent
, const wxPoint
& pos
, const wxSize
& size
,
201 long style
, long extraStyle
, const wxString
& name
) ;
202 void Create( wxWindow
* parent
, WXWindow nativeWindow
);
204 WXWindow
GetWXWindow() const;
207 bool Show(bool show
);
209 virtual bool ShowWithEffect(bool show
,
214 bool SetTransparent(wxByte alpha
);
215 bool SetBackgroundColour(const wxColour
& col
);
216 void SetExtraStyle( long exStyle
);
217 void SetWindowStyleFlag( long style
);
218 bool SetBackgroundStyle(wxBackgroundStyle style
);
219 bool CanSetTransparent();
221 void MoveWindow(int x
, int y
, int width
, int height
);
222 void GetPosition( int &x
, int &y
) const;
223 void GetSize( int &width
, int &height
) const;
225 void GetContentArea( int &left
, int &top
, int &width
, int &height
) const;
226 bool SetShape(const wxRegion
& region
);
228 virtual void SetTitle( const wxString
& title
, wxFontEncoding encoding
) ;
230 virtual bool IsMaximized() const;
232 virtual bool IsIconized() const;
234 virtual void Iconize( bool iconize
);
236 virtual void Maximize(bool maximize
);
238 virtual bool IsFullScreen() const;
240 virtual bool ShowFullScreen(bool show
, long style
);
242 virtual void ShowWithoutActivating();
244 virtual void RequestUserAttention(int flags
);
246 virtual void ScreenToWindow( int *x
, int *y
);
248 virtual void WindowToScreen( int *x
, int *y
);
250 virtual double GetMagnificationFactor() const;
252 virtual bool IsActive();
254 virtual void SetModified(bool modified
);
255 virtual bool IsModified() const;
257 virtual void SetRepresentedFilename(const wxString
& filename
);
259 wxNonOwnedWindow
* GetWXPeer() { return m_wxPeer
; }
261 CGWindowLevel
GetWindowLevel() const { return m_macWindowLevel
; }
262 void RestoreWindowLevel();
264 static WX_NSResponder
GetNextFirstResponder() ;
266 CGWindowLevel m_macWindowLevel
;
267 WXWindow m_macWindow
;
268 void * m_macFullScreenData
;
269 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl
)
272 DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton
);
274 class wxButtonCocoaImpl
: public wxWidgetCocoaImpl
, public wxButtonImpl
277 wxButtonCocoaImpl(wxWindowMac
*wxpeer
, wxNSButton
*v
);
278 virtual void SetBitmap(const wxBitmap
& bitmap
);
280 virtual void SetLabelMarkup(const wxString
& markup
);
281 #endif // wxUSE_MARKUP
283 void SetPressedBitmap( const wxBitmap
& bitmap
);
284 void GetLayoutInset(int &left
, int &top
, int &right
, int &bottom
) const;
285 void SetAcceleratorFromLabel(const wxString
& label
);
287 NSButton
*GetNSButton() const;
291 typedef void (*wxOSX_TextEventHandlerPtr
)(NSView
* self
, SEL _cmd
, NSString
*event
);
292 typedef void (*wxOSX_EventHandlerPtr
)(NSView
* self
, SEL _cmd
, NSEvent
*event
);
293 typedef BOOL (*wxOSX_PerformKeyEventHandlerPtr
)(NSView
* self
, SEL _cmd
, NSEvent
*event
);
294 typedef BOOL (*wxOSX_FocusHandlerPtr
)(NSView
* self
, SEL _cmd
);
297 WXDLLIMPEXP_CORE NSScreen
* wxOSXGetMenuScreen();
298 WXDLLIMPEXP_CORE NSRect
wxToNSRect( NSView
* parent
, const wxRect
& r
);
299 WXDLLIMPEXP_CORE wxRect
wxFromNSRect( NSView
* parent
, const NSRect
& rect
);
300 WXDLLIMPEXP_CORE NSPoint
wxToNSPoint( NSView
* parent
, const wxPoint
& p
);
301 WXDLLIMPEXP_CORE wxPoint
wxFromNSPoint( NSView
* parent
, const NSPoint
& p
);
303 NSRect WXDLLIMPEXP_CORE
wxOSXGetFrameForControl( wxWindowMac
* window
, const wxPoint
& pos
, const wxSize
&size
,
304 bool adjustForOrigin
= true );
306 WXDLLIMPEXP_CORE NSView
* wxOSXGetViewFromResponder( NSResponder
* responder
);
308 // used for many wxControls
310 @interface wxNSButton
: NSButton
312 NSTrackingRectTag rectTag
;
317 @interface wxNSBox
: NSBox
323 @interface wxNSTextFieldEditor
: NSTextView
325 NSEvent
* lastKeyDownEvent
;
330 @interface wxNSTextField
: NSTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
332 wxNSTextFieldEditor
* fieldEditor
;
335 - (wxNSTextFieldEditor
*) fieldEditor
;
336 - (void) setFieldEditor
:(wxNSTextFieldEditor
*) fieldEditor
;
340 @interface wxNSSecureTextField
: NSSecureTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
347 @interface wxNSTextView
: NSTextView
wxOSX_10_6_AND_LATER(<NSTextViewDelegate
>)
351 - (void)textDidChange
:(NSNotification
*)aNotification
;
355 @interface wxNSComboBox
: NSComboBox
357 wxNSTextFieldEditor
* fieldEditor
;
360 - (wxNSTextFieldEditor
*) fieldEditor
;
361 - (void) setFieldEditor
:(wxNSTextFieldEditor
*) fieldEditor
;
367 @interface wxNSMenu
: NSMenu
372 - (void) setImplementation
:(wxMenuImpl
*) item
;
373 - (wxMenuImpl
*) implementation
;
377 @interface wxNSMenuItem
: NSMenuItem
379 wxMenuItemImpl
* impl
;
382 - (void) setImplementation
:(wxMenuItemImpl
*) item
;
383 - (wxMenuItemImpl
*) implementation
;
385 - (void)clickedAction
:(id
)sender
;
386 - (BOOL
)validateMenuItem
:(NSMenuItem
*)menuItem
;
390 void WXDLLIMPEXP_CORE
wxOSXCocoaClassAddWXMethods(Class c
);
393 We need this for ShowModal, as the sheet just disables the parent window and
394 returns control to the app, whereas we don't want to return from ShowModal
395 until the sheet has been dismissed.
397 @interface ModalDialogDelegate
: NSObject
404 - (void)setImplementation
: (wxDialog
*)dialog
;
407 - (void)waitForSheetToFinish
;
408 - (void)sheetDidEnd
:(NSWindow
*)sheet returnCode
:(int)returnCode contextInfo
:(void *)contextInfo
;
411 // This interface must be exported in shared 64 bit multilib build but
412 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
413 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
414 // builds but seems to be unnecessary there so to avoid the expense of a
415 // configure check verifying if this does work or not with the current
416 // compiler we just only use it for 64 bit builds where this is always
419 // NB: Currently this is the only place where we need to export an
420 // interface but if we need to do it elsewhere we should define a
421 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
422 // instead of duplicating this preprocessor check.
425 #endif // 64 bit builds
426 @interface wxNSAppController
: NSObject
wxOSX_10_6_AND_LATER(<NSApplicationDelegate
>)
436 WX_NSCursor
wxMacCocoaCreateStockCursor( int cursor_type
);
437 WX_NSCursor
wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef
, float hotSpotX
, float hotSpotY
);
438 void wxMacCocoaSetCursor( WX_NSCursor cursor
);
439 void wxMacCocoaHideCursor();
440 void wxMacCocoaShowCursor();
442 typedef struct tagClassicCursor
449 const short kwxCursorBullseye
= 0;
450 const short kwxCursorBlank
= 1;
451 const short kwxCursorPencil
= 2;
452 const short kwxCursorMagnifier
= 3;
453 const short kwxCursorNoEntry
= 4;
454 const short kwxCursorPaintBrush
= 5;
455 const short kwxCursorPointRight
= 6;
456 const short kwxCursorPointLeft
= 7;
457 const short kwxCursorQuestionArrow
= 8;
458 const short kwxCursorRightArrow
= 9;
459 const short kwxCursorSizeNS
= 10;
460 const short kwxCursorSize
= 11;
461 const short kwxCursorSizeNESW
= 12;
462 const short kwxCursorSizeNWSE
= 13;
463 const short kwxCursorRoller
= 14;
464 const short kwxCursorWatch
= 15;
465 const short kwxCursorLast
= kwxCursorWatch
;
467 // exposing our fallback cursor map
469 extern ClassicCursor gMacCursors
[];
471 extern NSLayoutManager
* gNSLayoutManager
;
476 // _WX_PRIVATE_COCOA_H_