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 wxInt32
GetValue() const;
109 void SetValue( wxInt32 v
);
110 wxBitmap
GetBitmap() const;
111 void SetBitmap( const wxBitmap
& bitmap
);
112 void SetBitmapPosition( wxDirection dir
);
113 void SetupTabs( const wxNotebook
¬ebook
);
114 void GetBestRect( wxRect
*r
) const;
115 bool IsEnabled() const;
116 void Enable( bool enable
);
117 bool ButtonClickDidStateChange() { return true ;}
118 void SetMinimum( wxInt32 v
);
119 void SetMaximum( wxInt32 v
);
120 wxInt32
GetMinimum() const;
121 wxInt32
GetMaximum() const;
123 void SetScrollThumb( wxInt32 value
, wxInt32 thumbSize
);
125 void SetFont( const wxFont
& font
, const wxColour
& foreground
, long windowStyle
, bool ignoreBlack
= true );
126 void SetToolTip( wxToolTip
* tooltip
);
128 void InstallEventHandler( WXWidget control
= NULL
);
130 virtual bool DoHandleMouseEvent(NSEvent
*event
);
131 virtual bool DoHandleKeyEvent(NSEvent
*event
);
132 virtual bool DoHandleCharEvent(NSEvent
*event
, NSString
*text
);
133 virtual void DoNotifyFocusEvent(bool receivedFocus
, wxWidgetImpl
* otherWindow
);
135 virtual void SetupKeyEvent(wxKeyEvent
&wxevent
, NSEvent
* nsEvent
, NSString
* charString
= NULL
);
136 virtual void SetupMouseEvent(wxMouseEvent
&wxevent
, NSEvent
* nsEvent
);
139 void SetFlipped(bool flipped
);
140 virtual bool IsFlipped() const { return m_isFlipped
; }
142 // cocoa thunk connected calls
144 virtual unsigned int draggingEntered(void* sender
, WXWidget slf
, void* _cmd
);
145 virtual void draggingExited(void* sender
, WXWidget slf
, void* _cmd
);
146 virtual unsigned int draggingUpdated(void* sender
, WXWidget slf
, void* _cmd
);
147 virtual bool performDragOperation(void* sender
, WXWidget slf
, void* _cmd
);
148 virtual void mouseEvent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
149 virtual void cursorUpdate(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
150 virtual void keyEvent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
151 virtual void insertText(NSString
* text
, WXWidget slf
, void* _cmd
);
152 virtual bool performKeyEquivalent(WX_NSEvent event
, WXWidget slf
, void* _cmd
);
153 virtual bool acceptsFirstResponder(WXWidget slf
, void* _cmd
);
154 virtual bool becomeFirstResponder(WXWidget slf
, void* _cmd
);
155 virtual bool resignFirstResponder(WXWidget slf
, void* _cmd
);
156 virtual bool isFlipped(WXWidget slf
, void* _cmd
);
157 virtual void drawRect(void* rect
, WXWidget slf
, void* _cmd
);
159 virtual void controlAction(WXWidget slf
, void* _cmd
, void* sender
);
160 virtual void controlDoubleAction(WXWidget slf
, void* _cmd
, void *sender
);
162 // for wxTextCtrl-derived classes, put here since they don't all derive
163 // from the same pimpl class.
164 virtual void controlTextDidChange();
168 NSEvent
* m_lastKeyDownEvent
;
170 // if it the control has an editor, that editor will already send some
171 // events, don't resend them
174 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl
)
177 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow
);
179 class wxNonOwnedWindowCocoaImpl
: public wxNonOwnedWindowImpl
182 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow
* nonownedwnd
) ;
183 wxNonOwnedWindowCocoaImpl();
185 virtual ~wxNonOwnedWindowCocoaImpl();
187 virtual void WillBeDestroyed() ;
188 void Create( wxWindow
* parent
, const wxPoint
& pos
, const wxSize
& size
,
189 long style
, long extraStyle
, const wxString
& name
) ;
190 void Create( wxWindow
* parent
, WXWindow nativeWindow
);
192 WXWindow
GetWXWindow() const;
195 bool Show(bool show
);
197 virtual bool ShowWithEffect(bool show
,
202 bool SetTransparent(wxByte alpha
);
203 bool SetBackgroundColour(const wxColour
& col
);
204 void SetExtraStyle( long exStyle
);
205 void SetWindowStyleFlag( long style
);
206 bool SetBackgroundStyle(wxBackgroundStyle style
);
207 bool CanSetTransparent();
209 void MoveWindow(int x
, int y
, int width
, int height
);
210 void GetPosition( int &x
, int &y
) const;
211 void GetSize( int &width
, int &height
) const;
213 void GetContentArea( int &left
, int &top
, int &width
, int &height
) const;
214 bool SetShape(const wxRegion
& region
);
216 virtual void SetTitle( const wxString
& title
, wxFontEncoding encoding
) ;
218 virtual bool IsMaximized() const;
220 virtual bool IsIconized() const;
222 virtual void Iconize( bool iconize
);
224 virtual void Maximize(bool maximize
);
226 virtual bool IsFullScreen() const;
228 virtual bool ShowFullScreen(bool show
, long style
);
230 virtual void ShowWithoutActivating();
232 virtual void RequestUserAttention(int flags
);
234 virtual void ScreenToWindow( int *x
, int *y
);
236 virtual void WindowToScreen( int *x
, int *y
);
238 virtual bool IsActive();
240 virtual void SetModified(bool modified
);
241 virtual bool IsModified() const;
243 virtual void SetRepresentedFilename(const wxString
& filename
);
245 wxNonOwnedWindow
* GetWXPeer() { return m_wxPeer
; }
247 CGWindowLevel
GetWindowLevel() const { return m_macWindowLevel
; }
248 void RestoreWindowLevel();
250 CGWindowLevel m_macWindowLevel
;
251 WXWindow m_macWindow
;
252 void * m_macFullScreenData
;
253 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl
)
258 WXDLLIMPEXP_CORE NSScreen
* wxOSXGetMenuScreen();
259 WXDLLIMPEXP_CORE NSRect
wxToNSRect( NSView
* parent
, const wxRect
& r
);
260 WXDLLIMPEXP_CORE wxRect
wxFromNSRect( NSView
* parent
, const NSRect
& rect
);
261 WXDLLIMPEXP_CORE NSPoint
wxToNSPoint( NSView
* parent
, const wxPoint
& p
);
262 WXDLLIMPEXP_CORE wxPoint
wxFromNSPoint( NSView
* parent
, const NSPoint
& p
);
264 NSRect WXDLLIMPEXP_CORE
wxOSXGetFrameForControl( wxWindowMac
* window
, const wxPoint
& pos
, const wxSize
&size
,
265 bool adjustForOrigin
= true );
267 // used for many wxControls
269 @interface wxNSButton
: NSButton
271 NSTrackingRectTag rectTag
;
276 @interface wxNSBox
: NSBox
282 @interface wxNSTextFieldEditor
: NSTextView
284 NSEvent
* lastKeyDownEvent
;
289 @interface wxNSTextField
: NSTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
291 wxNSTextFieldEditor
* fieldEditor
;
294 - (wxNSTextFieldEditor
*) fieldEditor
;
295 - (void) setFieldEditor
:(wxNSTextFieldEditor
*) fieldEditor
;
299 @interface wxNSSecureTextField
: NSSecureTextField
wxOSX_10_6_AND_LATER(<NSTextFieldDelegate
>)
306 @interface wxNSTextView
: NSTextView
wxOSX_10_6_AND_LATER(<NSTextViewDelegate
>)
310 - (void)textDidChange
:(NSNotification
*)aNotification
;
314 @interface wxNSMenu
: NSMenu
319 - (void) setImplementation
:(wxMenuImpl
*) item
;
320 - (wxMenuImpl
*) implementation
;
324 @interface wxNSMenuItem
: NSMenuItem
326 wxMenuItemImpl
* impl
;
329 - (void) setImplementation
:(wxMenuItemImpl
*) item
;
330 - (wxMenuItemImpl
*) implementation
;
332 - (void)clickedAction
:(id
)sender
;
333 - (BOOL
)validateMenuItem
:(NSMenuItem
*)menuItem
;
337 void WXDLLIMPEXP_CORE
wxOSXCocoaClassAddWXMethods(Class c
);
340 We need this for ShowModal, as the sheet just disables the parent window and
341 returns control to the app, whereas we don't want to return from ShowModal
342 until the sheet has been dismissed.
344 @interface ModalDialogDelegate
: NSObject
351 - (void)setImplementation
: (wxDialog
*)dialog
;
354 - (void)waitForSheetToFinish
;
355 - (void)sheetDidEnd
:(NSWindow
*)sheet returnCode
:(int)returnCode contextInfo
:(void *)contextInfo
;
358 // This interface must be exported in shared 64 bit multilib build but
359 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
360 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
361 // builds but seems to be unnecessary there so to avoid the expense of a
362 // configure check verifying if this does work or not with the current
363 // compiler we just only use it for 64 bit builds where this is always
366 // NB: Currently this is the only place where we need to export an
367 // interface but if we need to do it elsewhere we should define a
368 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
369 // instead of duplicating this preprocessor check.
372 #endif // 64 bit builds
373 @interface wxNSAppController
: NSObject
wxOSX_10_6_AND_LATER(<NSApplicationDelegate
>)
383 WX_NSCursor
wxMacCocoaCreateStockCursor( int cursor_type
);
384 WX_NSCursor
wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef
, float hotSpotX
, float hotSpotY
);
385 void wxMacCocoaSetCursor( WX_NSCursor cursor
);
386 void wxMacCocoaHideCursor();
387 void wxMacCocoaShowCursor();
389 typedef struct tagClassicCursor
396 const short kwxCursorBullseye
= 0;
397 const short kwxCursorBlank
= 1;
398 const short kwxCursorPencil
= 2;
399 const short kwxCursorMagnifier
= 3;
400 const short kwxCursorNoEntry
= 4;
401 const short kwxCursorPaintBrush
= 5;
402 const short kwxCursorPointRight
= 6;
403 const short kwxCursorPointLeft
= 7;
404 const short kwxCursorQuestionArrow
= 8;
405 const short kwxCursorRightArrow
= 9;
406 const short kwxCursorSizeNS
= 10;
407 const short kwxCursorSize
= 11;
408 const short kwxCursorSizeNESW
= 12;
409 const short kwxCursorSizeNWSE
= 13;
410 const short kwxCursorRoller
= 14;
411 const short kwxCursorWatch
= 15;
412 const short kwxCursorLast
= kwxCursorWatch
;
414 // exposing our fallback cursor map
416 extern ClassicCursor gMacCursors
[];
421 // _WX_PRIVATE_COCOA_H_