]> git.saurik.com Git - wxWidgets.git/blob - include/wx/osx/cocoa/private.h
exposing mainWindow for C++
[wxWidgets.git] / include / wx / osx / cocoa / private.h
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$
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 <ApplicationServices/ApplicationServices.h>
18
19 #ifdef __OBJC__
20 #import <Cocoa/Cocoa.h>
21 #endif
22
23 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
24 // available in 10.4 but not in the headers
25 enum {
26 kEventMouseScroll = 11
27 };
28 #endif
29 //
30 // shared between Cocoa and Carbon
31 //
32
33 // bring in theming types without pulling in the headers
34
35 #if wxUSE_GUI
36 typedef SInt16 ThemeBrush;
37 CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
38 OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
39 CGContextRef inContext,
40 const CGRect * inBounds,
41 CGImageRef inImage) ;
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();
46
47 class WXDLLIMPEXP_FWD_CORE wxDialog;
48
49 class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
50 {
51 public :
52 wxWidgetCocoaImpl( wxWindowMac* peer , WXWidget w, bool isRootControl = false, bool isUserPane = false ) ;
53 wxWidgetCocoaImpl() ;
54 ~wxWidgetCocoaImpl();
55
56 void Init();
57
58 virtual bool IsVisible() const ;
59 virtual void SetVisibility(bool);
60
61 // we provide a static function which can be reused from
62 // wxNonOwnedWindowCocoaImpl too
63 static bool ShowViewOrWindowWithEffect(wxWindow *win,
64 bool show,
65 wxShowEffect effect,
66 unsigned timeout);
67
68 virtual bool ShowWithEffect(bool show,
69 wxShowEffect effect,
70 unsigned timeout);
71
72 virtual void Raise();
73
74 virtual void Lower();
75
76 virtual void ScrollRect( const wxRect *rect, int dx, int dy );
77
78 virtual WXWidget GetWXWidget() const { return m_osxView; }
79
80 virtual void SetBackgroundColour(const wxColour&);
81 virtual bool SetBackgroundStyle(wxBackgroundStyle style);
82
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 );
88
89 virtual void SetNeedsDisplay( const wxRect* where = NULL );
90 virtual bool GetNeedsDisplay() const;
91
92 virtual bool CanFocus() const;
93 // return true if successful
94 virtual bool SetFocus();
95 virtual bool HasFocus() const;
96
97 void RemoveFromParent();
98 void Embed( wxWidgetImpl *parent );
99
100 void SetDefaultButton( bool isDefault );
101 void PerformClick();
102 virtual void SetLabel(const wxString& title, wxFontEncoding encoding);
103
104 void SetCursor( const wxCursor & cursor );
105 void CaptureMouse();
106 void ReleaseMouse();
107
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 &notebook );
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;
122 void PulseGauge();
123 void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
124
125 void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
126 void SetToolTip( wxToolTip* tooltip );
127
128 void InstallEventHandler( WXWidget control = NULL );
129
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);
134
135 virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
136 virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
137
138
139 void SetFlipped(bool flipped);
140 virtual bool IsFlipped() const { return m_isFlipped; }
141
142 // cocoa thunk connected calls
143
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);
158
159 virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
160 virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
161
162 // for wxTextCtrl-derived classes, put here since they don't all derive
163 // from the same pimpl class.
164 virtual void controlTextDidChange();
165
166 protected:
167 WXWidget m_osxView;
168 NSEvent* m_lastKeyDownEvent;
169 bool m_isFlipped;
170 // if it the control has an editor, that editor will already send some
171 // events, don't resend them
172 bool m_hasEditor;
173
174 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
175 };
176
177 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
178
179 class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
180 {
181 public :
182 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
183 wxNonOwnedWindowCocoaImpl();
184
185 virtual ~wxNonOwnedWindowCocoaImpl();
186
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 );
191
192 WXWindow GetWXWindow() const;
193 void Raise();
194 void Lower();
195 bool Show(bool show);
196
197 virtual bool ShowWithEffect(bool show,
198 wxShowEffect effect,
199 unsigned timeout);
200
201 void Update();
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();
208
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;
212
213 void GetContentArea( int &left , int &top , int &width , int &height ) const;
214 bool SetShape(const wxRegion& region);
215
216 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
217
218 virtual bool IsMaximized() const;
219
220 virtual bool IsIconized() const;
221
222 virtual void Iconize( bool iconize );
223
224 virtual void Maximize(bool maximize);
225
226 virtual bool IsFullScreen() const;
227
228 virtual bool ShowFullScreen(bool show, long style);
229
230 virtual void ShowWithoutActivating();
231
232 virtual void RequestUserAttention(int flags);
233
234 virtual void ScreenToWindow( int *x, int *y );
235
236 virtual void WindowToScreen( int *x, int *y );
237
238 virtual bool IsActive();
239
240 virtual void SetModified(bool modified);
241 virtual bool IsModified() const;
242
243 virtual void SetRepresentedFilename(const wxString& filename);
244
245 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
246
247 CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; }
248 void RestoreWindowLevel();
249 protected :
250 CGWindowLevel m_macWindowLevel;
251 WXWindow m_macWindow;
252 void * m_macFullScreenData ;
253 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
254 };
255
256 #ifdef __OBJC__
257
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 );
263
264 NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
265 bool adjustForOrigin = true );
266
267 // used for many wxControls
268
269 @interface wxNSButton : NSButton
270 {
271 NSTrackingRectTag rectTag;
272 }
273
274 @end
275
276 @interface wxNSBox : NSBox
277 {
278 }
279
280 @end
281
282 @interface wxNSTextFieldEditor : NSTextView
283 {
284 NSEvent* lastKeyDownEvent;
285 }
286
287 @end
288
289 @interface wxNSTextField : NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
290 {
291 wxNSTextFieldEditor* fieldEditor;
292 }
293
294 - (wxNSTextFieldEditor*) fieldEditor;
295 - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
296
297 @end
298
299 @interface wxNSSecureTextField : NSSecureTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
300 {
301 }
302
303 @end
304
305
306 @interface wxNSTextView : NSTextView wxOSX_10_6_AND_LATER(<NSTextViewDelegate>)
307 {
308 }
309
310 - (void)textDidChange:(NSNotification *)aNotification;
311
312 @end
313
314 @interface wxNSMenu : NSMenu
315 {
316 wxMenuImpl* impl;
317 }
318
319 - (void) setImplementation:(wxMenuImpl*) item;
320 - (wxMenuImpl*) implementation;
321
322 @end
323
324 @interface wxNSMenuItem : NSMenuItem
325 {
326 wxMenuItemImpl* impl;
327 }
328
329 - (void) setImplementation:(wxMenuItemImpl*) item;
330 - (wxMenuItemImpl*) implementation;
331
332 - (void)clickedAction:(id)sender;
333 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
334
335 @end
336
337 void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c);
338
339 /*
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.
343 */
344 @interface ModalDialogDelegate : NSObject
345 {
346 BOOL sheetFinished;
347 int resultCode;
348 wxDialog* impl;
349 }
350
351 - (void)setImplementation: (wxDialog *)dialog;
352 - (BOOL)finished;
353 - (int)code;
354 - (void)waitForSheetToFinish;
355 - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
356 @end
357
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
364 // supported.
365 //
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.
370 #ifdef __LP64__
371 WXEXPORT
372 #endif // 64 bit builds
373 @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER(<NSApplicationDelegate>)
374 {
375 }
376
377 @end
378
379 #endif // __OBJC__
380
381 // NSCursor
382
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();
388
389 typedef struct tagClassicCursor
390 {
391 wxUint16 bits[16];
392 wxUint16 mask[16];
393 wxInt16 hotspot[2];
394 }ClassicCursor;
395
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;
413
414 // exposing our fallback cursor map
415
416 extern ClassicCursor gMacCursors[];
417
418 #endif
419
420 #endif
421 // _WX_PRIVATE_COCOA_H_
422