]> git.saurik.com Git - wxWidgets.git/blob - include/wx/osx/cocoa/private.h
support for freeze and thaw under cocoa
[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 void SetDrawingEnabled(bool enabled);
93
94 virtual bool CanFocus() const;
95 // return true if successful
96 virtual bool SetFocus();
97 virtual bool HasFocus() const;
98
99 void RemoveFromParent();
100 void Embed( wxWidgetImpl *parent );
101
102 void SetDefaultButton( bool isDefault );
103 void PerformClick();
104 virtual void SetLabel(const wxString& title, wxFontEncoding encoding);
105
106 void SetCursor( const wxCursor & cursor );
107 void CaptureMouse();
108 void ReleaseMouse();
109
110 void SetDropTarget(wxDropTarget* target);
111
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 &notebook );
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;
126 void PulseGauge();
127 void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
128
129 void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
130 void SetToolTip( wxToolTip* tooltip );
131
132 void InstallEventHandler( WXWidget control = NULL );
133
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);
138
139 virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
140 virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
141
142
143 void SetFlipped(bool flipped);
144 virtual bool IsFlipped() const { return m_isFlipped; }
145
146 // cocoa thunk connected calls
147
148 virtual unsigned int draggingEntered(void* sender, WXWidget slf, void* _cmd);
149 virtual void draggingExited(void* sender, WXWidget slf, void* _cmd);
150 virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd);
151 virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd);
152 virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
153 virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
154 virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
155 virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
156 virtual bool performKeyEquivalent(WX_NSEvent event, WXWidget slf, void* _cmd);
157 virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
158 virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
159 virtual bool resignFirstResponder(WXWidget slf, void* _cmd);
160 virtual bool isFlipped(WXWidget slf, void* _cmd);
161 virtual void drawRect(void* rect, WXWidget slf, void* _cmd);
162
163 virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
164 virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
165
166 // for wxTextCtrl-derived classes, put here since they don't all derive
167 // from the same pimpl class.
168 virtual void controlTextDidChange();
169
170 protected:
171 WXWidget m_osxView;
172 NSEvent* m_lastKeyDownEvent;
173 bool m_isFlipped;
174 // if it the control has an editor, that editor will already send some
175 // events, don't resend them
176 bool m_hasEditor;
177
178 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
179 };
180
181 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
182
183 class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
184 {
185 public :
186 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
187 wxNonOwnedWindowCocoaImpl();
188
189 virtual ~wxNonOwnedWindowCocoaImpl();
190
191 virtual void WillBeDestroyed() ;
192 void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
193 long style, long extraStyle, const wxString& name ) ;
194 void Create( wxWindow* parent, WXWindow nativeWindow );
195
196 WXWindow GetWXWindow() const;
197 void Raise();
198 void Lower();
199 bool Show(bool show);
200
201 virtual bool ShowWithEffect(bool show,
202 wxShowEffect effect,
203 unsigned timeout);
204
205 void Update();
206 bool SetTransparent(wxByte alpha);
207 bool SetBackgroundColour(const wxColour& col );
208 void SetExtraStyle( long exStyle );
209 void SetWindowStyleFlag( long style );
210 bool SetBackgroundStyle(wxBackgroundStyle style);
211 bool CanSetTransparent();
212
213 void MoveWindow(int x, int y, int width, int height);
214 void GetPosition( int &x, int &y ) const;
215 void GetSize( int &width, int &height ) const;
216
217 void GetContentArea( int &left , int &top , int &width , int &height ) const;
218 bool SetShape(const wxRegion& region);
219
220 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
221
222 virtual bool IsMaximized() const;
223
224 virtual bool IsIconized() const;
225
226 virtual void Iconize( bool iconize );
227
228 virtual void Maximize(bool maximize);
229
230 virtual bool IsFullScreen() const;
231
232 virtual bool ShowFullScreen(bool show, long style);
233
234 virtual void ShowWithoutActivating();
235
236 virtual void RequestUserAttention(int flags);
237
238 virtual void ScreenToWindow( int *x, int *y );
239
240 virtual void WindowToScreen( int *x, int *y );
241
242 virtual bool IsActive();
243
244 virtual void SetModified(bool modified);
245 virtual bool IsModified() const;
246
247 virtual void SetRepresentedFilename(const wxString& filename);
248
249 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
250
251 CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; }
252 void RestoreWindowLevel();
253 protected :
254 CGWindowLevel m_macWindowLevel;
255 WXWindow m_macWindow;
256 void * m_macFullScreenData ;
257 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
258 };
259
260 DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton );
261
262 class wxButtonCocoaImpl : public wxWidgetCocoaImpl, public wxButtonImpl
263 {
264 public:
265 wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v);
266 virtual void SetBitmap(const wxBitmap& bitmap);
267 #if wxUSE_MARKUP
268 virtual void SetLabelMarkup(const wxString& markup);
269 #endif // wxUSE_MARKUP
270
271 void SetPressedBitmap( const wxBitmap& bitmap );
272 void GetLayoutInset(int &left , int &top , int &right, int &bottom) const;
273 void SetAcceleratorFromLabel(const wxString& label);
274
275 NSButton *GetNSButton() const;
276 };
277
278 #ifdef __OBJC__
279
280 WXDLLIMPEXP_CORE NSScreen* wxOSXGetMenuScreen();
281 WXDLLIMPEXP_CORE NSRect wxToNSRect( NSView* parent, const wxRect& r );
282 WXDLLIMPEXP_CORE wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
283 WXDLLIMPEXP_CORE NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
284 WXDLLIMPEXP_CORE wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
285
286 NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
287 bool adjustForOrigin = true );
288
289 // used for many wxControls
290
291 @interface wxNSButton : NSButton
292 {
293 NSTrackingRectTag rectTag;
294 }
295
296 @end
297
298 @interface wxNSBox : NSBox
299 {
300 }
301
302 @end
303
304 @interface wxNSTextFieldEditor : NSTextView
305 {
306 NSEvent* lastKeyDownEvent;
307 }
308
309 @end
310
311 @interface wxNSTextField : NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
312 {
313 wxNSTextFieldEditor* fieldEditor;
314 }
315
316 - (wxNSTextFieldEditor*) fieldEditor;
317 - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
318
319 @end
320
321 @interface wxNSSecureTextField : NSSecureTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
322 {
323 }
324
325 @end
326
327
328 @interface wxNSTextView : NSTextView wxOSX_10_6_AND_LATER(<NSTextViewDelegate>)
329 {
330 }
331
332 - (void)textDidChange:(NSNotification *)aNotification;
333
334 @end
335
336 @interface wxNSMenu : NSMenu
337 {
338 wxMenuImpl* impl;
339 }
340
341 - (void) setImplementation:(wxMenuImpl*) item;
342 - (wxMenuImpl*) implementation;
343
344 @end
345
346 @interface wxNSMenuItem : NSMenuItem
347 {
348 wxMenuItemImpl* impl;
349 }
350
351 - (void) setImplementation:(wxMenuItemImpl*) item;
352 - (wxMenuItemImpl*) implementation;
353
354 - (void)clickedAction:(id)sender;
355 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
356
357 @end
358
359 void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c);
360
361 /*
362 We need this for ShowModal, as the sheet just disables the parent window and
363 returns control to the app, whereas we don't want to return from ShowModal
364 until the sheet has been dismissed.
365 */
366 @interface ModalDialogDelegate : NSObject
367 {
368 BOOL sheetFinished;
369 int resultCode;
370 wxDialog* impl;
371 }
372
373 - (void)setImplementation: (wxDialog *)dialog;
374 - (BOOL)finished;
375 - (int)code;
376 - (void)waitForSheetToFinish;
377 - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
378 @end
379
380 // This interface must be exported in shared 64 bit multilib build but
381 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
382 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
383 // builds but seems to be unnecessary there so to avoid the expense of a
384 // configure check verifying if this does work or not with the current
385 // compiler we just only use it for 64 bit builds where this is always
386 // supported.
387 //
388 // NB: Currently this is the only place where we need to export an
389 // interface but if we need to do it elsewhere we should define a
390 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
391 // instead of duplicating this preprocessor check.
392 #ifdef __LP64__
393 WXEXPORT
394 #endif // 64 bit builds
395 @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER(<NSApplicationDelegate>)
396 {
397 }
398
399 @end
400
401 #endif // __OBJC__
402
403 // NSCursor
404
405 WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
406 WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
407 void wxMacCocoaSetCursor( WX_NSCursor cursor );
408 void wxMacCocoaHideCursor();
409 void wxMacCocoaShowCursor();
410
411 typedef struct tagClassicCursor
412 {
413 wxUint16 bits[16];
414 wxUint16 mask[16];
415 wxInt16 hotspot[2];
416 }ClassicCursor;
417
418 const short kwxCursorBullseye = 0;
419 const short kwxCursorBlank = 1;
420 const short kwxCursorPencil = 2;
421 const short kwxCursorMagnifier = 3;
422 const short kwxCursorNoEntry = 4;
423 const short kwxCursorPaintBrush = 5;
424 const short kwxCursorPointRight = 6;
425 const short kwxCursorPointLeft = 7;
426 const short kwxCursorQuestionArrow = 8;
427 const short kwxCursorRightArrow = 9;
428 const short kwxCursorSizeNS = 10;
429 const short kwxCursorSize = 11;
430 const short kwxCursorSizeNESW = 12;
431 const short kwxCursorSizeNWSE = 13;
432 const short kwxCursorRoller = 14;
433 const short kwxCursorWatch = 15;
434 const short kwxCursorLast = kwxCursorWatch;
435
436 // exposing our fallback cursor map
437
438 extern ClassicCursor gMacCursors[];
439
440 extern NSLayoutManager* gNSLayoutManager;
441
442 #endif
443
444 #endif
445 // _WX_PRIVATE_COCOA_H_
446