Add markup support to wxOSX/Cocoa wxStaticText and wxButton.
[wxWidgets.git] / include / wx / osx / core / private.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/osx/core/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: private.h 53819 2008-05-29 14:11:45Z SC $
10 // Copyright: (c) Stefan Csomor
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
13
14 #ifndef _WX_PRIVATE_CORE_H_
15 #define _WX_PRIVATE_CORE_H_
16
17 #include "wx/defs.h"
18
19 #include <CoreFoundation/CoreFoundation.h>
20
21 #include "wx/osx/core/cfstring.h"
22 #include "wx/osx/core/cfdataref.h"
23
24 // Define helper macros allowing to insert small snippets of code to be
25 // compiled for high enough OS X version only: this shouldn't be abused for
26 // anything big but it's handy for e.g. specifying OS X 10.6-only protocols in
27 // the Objective C classes declarations when they're not supported under the
28 // previous versions
29 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
30 #define wxOSX_10_6_AND_LATER(x) x
31 #else
32 #define wxOSX_10_6_AND_LATER(x)
33 #endif
34
35 #if !wxUSE_GUI || wxOSX_USE_COCOA_OR_CARBON
36
37 // Carbon functions are currently still used in wxOSX/Cocoa too (including
38 // wxBase part of it).
39 #include <Carbon/Carbon.h>
40
41 WXDLLIMPEXP_BASE long UMAGetSystemVersion() ;
42
43 void WXDLLIMPEXP_CORE wxMacStringToPascal( const wxString&from , unsigned char * to );
44 wxString WXDLLIMPEXP_CORE wxMacMakeStringFromPascal( const unsigned char * from );
45
46 WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL );
47 WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef );
48 WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname );
49
50 #endif
51
52 #if wxUSE_GUI
53
54 #if wxOSX_USE_IPHONE
55 #include <CoreGraphics/CoreGraphics.h>
56 #else
57 #include <ApplicationServices/ApplicationServices.h>
58 #endif
59
60 #include "wx/bitmap.h"
61 #include "wx/window.h"
62
63 class WXDLLIMPEXP_CORE wxMacCGContextStateSaver
64 {
65 wxDECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver);
66
67 public:
68 wxMacCGContextStateSaver( CGContextRef cg )
69 {
70 m_cg = cg;
71 CGContextSaveGState( cg );
72 }
73 ~wxMacCGContextStateSaver()
74 {
75 CGContextRestoreGState( m_cg );
76 }
77 private:
78 CGContextRef m_cg;
79 };
80
81 class WXDLLIMPEXP_CORE wxDeferredObjectDeleter : public wxObject
82 {
83 public :
84 wxDeferredObjectDeleter( wxObject* obj ) : m_obj(obj)
85 {
86 }
87 virtual ~wxDeferredObjectDeleter()
88 {
89 delete m_obj;
90 }
91 protected :
92 wxObject* m_obj ;
93 } ;
94
95 // Quartz
96
97 WXDLLIMPEXP_CORE CGImageRef wxMacCreateCGImageFromBitmap( const wxBitmap& bitmap );
98
99 WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithCFData( CFDataRef data );
100 WXDLLIMPEXP_CORE CGDataConsumerRef wxMacCGDataConsumerCreateWithCFData( CFMutableDataRef data );
101 WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithMemoryBuffer( const wxMemoryBuffer& buf );
102
103 CGColorSpaceRef WXDLLIMPEXP_CORE wxMacGetGenericRGBColorSpace(void);
104
105 class wxWindowMac;
106 // to
107 extern wxWindow* g_MacLastWindow;
108 class wxNonOwnedWindow;
109
110 // temporary typedef so that no additional casts are necessary within carbon code at the moment
111
112 class wxMacControl;
113 class wxWidgetImpl;
114 class wxComboBox;
115 class wxNotebook;
116 class wxTextCtrl;
117 class wxSearchCtrl;
118
119 WXDLLIMPEXP_CORE wxWindowMac * wxFindWindowFromWXWidget(WXWidget inControl );
120
121 #if wxOSX_USE_CARBON
122 typedef wxMacControl wxWidgetImplType;
123 #else
124 typedef wxWidgetImpl wxWidgetImplType;
125 #endif
126
127 #if wxUSE_MENUS
128 class wxMenuItemImpl : public wxObject
129 {
130 public :
131 wxMenuItemImpl( wxMenuItem* peer ) : m_peer(peer)
132 {
133 }
134
135 virtual ~wxMenuItemImpl() ;
136 virtual void SetBitmap( const wxBitmap& bitmap ) = 0;
137 virtual void Enable( bool enable ) = 0;
138 virtual void Check( bool check ) = 0;
139 virtual void SetLabel( const wxString& text, wxAcceleratorEntry *entry ) = 0;
140 virtual void Hide( bool hide = true ) = 0;
141
142 virtual void * GetHMenuItem() = 0;
143
144 wxMenuItem* GetWXPeer() { return m_peer ; }
145
146 static wxMenuItemImpl* Create( wxMenuItem* peer, wxMenu *pParentMenu,
147 int id,
148 const wxString& text,
149 wxAcceleratorEntry *entry,
150 const wxString& strHelp,
151 wxItemKind kind,
152 wxMenu *pSubMenu );
153
154 // handle OS specific menu items if they weren't handled during normal processing
155 virtual bool DoDefault() { return false; }
156 protected :
157 wxMenuItem* m_peer;
158
159 DECLARE_ABSTRACT_CLASS(wxMenuItemImpl)
160 } ;
161
162 class wxMenuImpl : public wxObject
163 {
164 public :
165 wxMenuImpl( wxMenu* peer ) : m_peer(peer)
166 {
167 }
168
169 virtual ~wxMenuImpl() ;
170 virtual void InsertOrAppend(wxMenuItem *pItem, size_t pos) = 0;
171 virtual void Remove( wxMenuItem *pItem ) = 0;
172
173 virtual void MakeRoot() = 0;
174
175 virtual void SetTitle( const wxString& text ) = 0;
176
177 virtual WXHMENU GetHMenu() = 0;
178
179 wxMenu* GetWXPeer() { return m_peer ; }
180
181 virtual void PopUp( wxWindow *win, int x, int y ) = 0;
182
183 static wxMenuImpl* Create( wxMenu* peer, const wxString& title );
184 static wxMenuImpl* CreateRootMenu( wxMenu* peer );
185 protected :
186 wxMenu* m_peer;
187
188 DECLARE_ABSTRACT_CLASS(wxMenuItemImpl)
189 } ;
190 #endif
191
192
193 class WXDLLIMPEXP_CORE wxWidgetImpl : public wxObject
194 {
195 public :
196 wxWidgetImpl( wxWindowMac* peer , bool isRootControl = false );
197 wxWidgetImpl();
198 virtual ~wxWidgetImpl();
199
200 void Init();
201
202 bool IsRootControl() const { return m_isRootControl; }
203
204 wxWindowMac* GetWXPeer() const { return m_wxPeer; }
205
206 bool IsOk() const { return GetWXWidget() != NULL; }
207
208 // not only the control itself, but also all its parents must be visible
209 // in order for this function to return true
210 virtual bool IsVisible() const = 0;
211 // set the visibility of this widget (maybe latent)
212 virtual void SetVisibility( bool visible ) = 0;
213
214 virtual bool ShowWithEffect(bool WXUNUSED(show),
215 wxShowEffect WXUNUSED(effect),
216 unsigned WXUNUSED(timeout))
217 {
218 return false;
219 }
220
221 virtual void Raise() = 0;
222
223 virtual void Lower() = 0;
224
225 virtual void ScrollRect( const wxRect *rect, int dx, int dy ) = 0;
226
227 virtual WXWidget GetWXWidget() const = 0;
228
229 virtual void SetBackgroundColour( const wxColour& col ) = 0;
230 virtual bool SetBackgroundStyle(wxBackgroundStyle style) = 0;
231
232 // all coordinates in native parent widget relative coordinates
233 virtual void GetContentArea( int &left , int &top , int &width , int &height ) const = 0;
234 virtual void Move(int x, int y, int width, int height) = 0;
235 virtual void GetPosition( int &x, int &y ) const = 0;
236 virtual void GetSize( int &width, int &height ) const = 0;
237 virtual void SetControlSize( wxWindowVariant variant ) = 0;
238 virtual float GetContentScaleFactor() const
239 {
240 return 1.0;
241 }
242
243 // the native coordinates may have an 'aura' for shadows etc, if this is the case the layout
244 // inset indicates on which insets the real control is drawn
245 virtual void GetLayoutInset(int &left , int &top , int &right, int &bottom) const
246 {
247 left = top = right = bottom = 0;
248 }
249
250 // native view coordinates are topleft to bottom right (flipped regarding CoreGraphics origin)
251 virtual bool IsFlipped() const { return true; }
252
253 virtual void SetNeedsDisplay( const wxRect* where = NULL ) = 0;
254 virtual bool GetNeedsDisplay() const = 0;
255
256 virtual bool NeedsFocusRect() const;
257 virtual void SetNeedsFocusRect( bool needs );
258
259 virtual bool NeedsFrame() const;
260 virtual void SetNeedsFrame( bool needs );
261
262 virtual bool CanFocus() const = 0;
263 // return true if successful
264 virtual bool SetFocus() = 0;
265 virtual bool HasFocus() const = 0;
266
267 virtual void RemoveFromParent() = 0;
268 virtual void Embed( wxWidgetImpl *parent ) = 0;
269
270 virtual void SetDefaultButton( bool isDefault ) = 0;
271 virtual void PerformClick() = 0;
272 virtual void SetLabel( const wxString& title, wxFontEncoding encoding ) = 0;
273 #if wxOSX_USE_COCOA
274 virtual void SetLabelMarkup( const wxString& WXUNUSED(markup) ) { }
275 #endif
276
277 virtual void SetCursor( const wxCursor & cursor ) = 0;
278 virtual void CaptureMouse() = 0;
279 virtual void ReleaseMouse() = 0;
280
281 virtual wxInt32 GetValue() const = 0;
282 virtual void SetValue( wxInt32 v ) = 0;
283 virtual wxBitmap GetBitmap() const = 0;
284 virtual void SetBitmap( const wxBitmap& bitmap ) = 0;
285 virtual void SetBitmapPosition( wxDirection dir ) = 0;
286 virtual void SetupTabs( const wxNotebook &notebook ) =0;
287 virtual void GetBestRect( wxRect *r ) const = 0;
288 virtual bool IsEnabled() const = 0;
289 virtual void Enable( bool enable ) = 0;
290 virtual void SetMinimum( wxInt32 v ) = 0;
291 virtual void SetMaximum( wxInt32 v ) = 0;
292 virtual wxInt32 GetMinimum() const = 0;
293 virtual wxInt32 GetMaximum() const = 0;
294 virtual void PulseGauge() = 0;
295 virtual void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) = 0;
296
297 virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true ) = 0;
298
299 virtual void SetToolTip(wxToolTip* WXUNUSED(tooltip)) { }
300
301 // is the clicked event sent AFTER the state already changed, so no additional
302 // state changing logic is required from the outside
303 virtual bool ButtonClickDidStateChange() = 0;
304
305 virtual void InstallEventHandler( WXWidget control = NULL ) = 0;
306
307 // Mechanism used to keep track of whether a change should send an event
308 // Do SendEvents(false) when starting actions that would trigger programmatic events
309 // and SendEvents(true) at the end of the block.
310 virtual void SendEvents(bool shouldSendEvents) { m_shouldSendEvents = shouldSendEvents; }
311 virtual bool ShouldSendEvents() { return m_shouldSendEvents; }
312
313 // static methods for associating native controls and their implementations
314
315 static wxWidgetImpl*
316 FindFromWXWidget(WXWidget control);
317
318 static void RemoveAssociations( wxWidgetImpl* impl);
319
320 static void Associate( WXWidget control, wxWidgetImpl *impl );
321
322 static WXWidget FindFocus();
323
324 // static creation methods, must be implemented by all toolkits
325
326 static wxWidgetImplType* CreateUserPane( wxWindowMac* wxpeer,
327 wxWindowMac* parent,
328 wxWindowID id,
329 const wxPoint& pos,
330 const wxSize& size,
331 long style,
332 long extraStyle) ;
333 static wxWidgetImplType* CreateContentView( wxNonOwnedWindow* now ) ;
334
335 static wxWidgetImplType* CreateButton( wxWindowMac* wxpeer,
336 wxWindowMac* parent,
337 wxWindowID id,
338 const wxString& label,
339 const wxPoint& pos,
340 const wxSize& size,
341 long style,
342 long extraStyle) ;
343
344 static wxWidgetImplType* CreateDisclosureTriangle( wxWindowMac* wxpeer,
345 wxWindowMac* parent,
346 wxWindowID id,
347 const wxString& label,
348 const wxPoint& pos,
349 const wxSize& size,
350 long style,
351 long extraStyle) ;
352
353 static wxWidgetImplType* CreateStaticLine( wxWindowMac* wxpeer,
354 wxWindowMac* parent,
355 wxWindowID id,
356 const wxPoint& pos,
357 const wxSize& size,
358 long style,
359 long extraStyle) ;
360
361 static wxWidgetImplType* CreateGroupBox( wxWindowMac* wxpeer,
362 wxWindowMac* parent,
363 wxWindowID id,
364 const wxString& label,
365 const wxPoint& pos,
366 const wxSize& size,
367 long style,
368 long extraStyle) ;
369
370 static wxWidgetImplType* CreateStaticText( wxWindowMac* wxpeer,
371 wxWindowMac* parent,
372 wxWindowID id,
373 const wxString& label,
374 const wxPoint& pos,
375 const wxSize& size,
376 long style,
377 long extraStyle) ;
378
379 static wxWidgetImplType* CreateTextControl( wxTextCtrl* wxpeer,
380 wxWindowMac* parent,
381 wxWindowID id,
382 const wxString& content,
383 const wxPoint& pos,
384 const wxSize& size,
385 long style,
386 long extraStyle) ;
387
388 static wxWidgetImplType* CreateSearchControl( wxSearchCtrl* wxpeer,
389 wxWindowMac* parent,
390 wxWindowID id,
391 const wxString& content,
392 const wxPoint& pos,
393 const wxSize& size,
394 long style,
395 long extraStyle) ;
396
397 static wxWidgetImplType* CreateCheckBox( wxWindowMac* wxpeer,
398 wxWindowMac* parent,
399 wxWindowID id,
400 const wxString& label,
401 const wxPoint& pos,
402 const wxSize& size,
403 long style,
404 long extraStyle);
405
406 static wxWidgetImplType* CreateRadioButton( wxWindowMac* wxpeer,
407 wxWindowMac* parent,
408 wxWindowID id,
409 const wxString& label,
410 const wxPoint& pos,
411 const wxSize& size,
412 long style,
413 long extraStyle);
414
415 static wxWidgetImplType* CreateToggleButton( wxWindowMac* wxpeer,
416 wxWindowMac* parent,
417 wxWindowID id,
418 const wxString& label,
419 const wxPoint& pos,
420 const wxSize& size,
421 long style,
422 long extraStyle);
423
424 static wxWidgetImplType* CreateBitmapToggleButton( wxWindowMac* wxpeer,
425 wxWindowMac* parent,
426 wxWindowID id,
427 const wxBitmap& bitmap,
428 const wxPoint& pos,
429 const wxSize& size,
430 long style,
431 long extraStyle);
432
433 static wxWidgetImplType* CreateBitmapButton( wxWindowMac* wxpeer,
434 wxWindowMac* parent,
435 wxWindowID id,
436 const wxBitmap& bitmap,
437 const wxPoint& pos,
438 const wxSize& size,
439 long style,
440 long extraStyle);
441
442 static wxWidgetImplType* CreateTabView( wxWindowMac* wxpeer,
443 wxWindowMac* parent,
444 wxWindowID id,
445 const wxPoint& pos,
446 const wxSize& size,
447 long style,
448 long extraStyle);
449
450 static wxWidgetImplType* CreateGauge( wxWindowMac* wxpeer,
451 wxWindowMac* parent,
452 wxWindowID id,
453 wxInt32 value,
454 wxInt32 minimum,
455 wxInt32 maximum,
456 const wxPoint& pos,
457 const wxSize& size,
458 long style,
459 long extraStyle);
460
461 static wxWidgetImplType* CreateSlider( wxWindowMac* wxpeer,
462 wxWindowMac* parent,
463 wxWindowID id,
464 wxInt32 value,
465 wxInt32 minimum,
466 wxInt32 maximum,
467 const wxPoint& pos,
468 const wxSize& size,
469 long style,
470 long extraStyle);
471
472 static wxWidgetImplType* CreateSpinButton( wxWindowMac* wxpeer,
473 wxWindowMac* parent,
474 wxWindowID id,
475 wxInt32 value,
476 wxInt32 minimum,
477 wxInt32 maximum,
478 const wxPoint& pos,
479 const wxSize& size,
480 long style,
481 long extraStyle);
482
483 static wxWidgetImplType* CreateScrollBar( wxWindowMac* wxpeer,
484 wxWindowMac* parent,
485 wxWindowID id,
486 const wxPoint& pos,
487 const wxSize& size,
488 long style,
489 long extraStyle);
490
491 static wxWidgetImplType* CreateChoice( wxWindowMac* wxpeer,
492 wxWindowMac* parent,
493 wxWindowID id,
494 wxMenu* menu,
495 const wxPoint& pos,
496 const wxSize& size,
497 long style,
498 long extraStyle);
499
500 static wxWidgetImplType* CreateListBox( wxWindowMac* wxpeer,
501 wxWindowMac* parent,
502 wxWindowID id,
503 const wxPoint& pos,
504 const wxSize& size,
505 long style,
506 long extraStyle);
507
508 #if wxOSX_USE_COCOA
509 static wxWidgetImplType* CreateComboBox( wxComboBox* wxpeer,
510 wxWindowMac* parent,
511 wxWindowID id,
512 wxMenu* menu,
513 const wxPoint& pos,
514 const wxSize& size,
515 long style,
516 long extraStyle);
517 #endif
518
519 // converts from Toplevel-Content relative to local
520 static void Convert( wxPoint *pt , wxWidgetImpl *from , wxWidgetImpl *to );
521 protected :
522 bool m_isRootControl;
523 wxWindowMac* m_wxPeer;
524 bool m_needsFocusRect;
525 bool m_needsFrame;
526 bool m_shouldSendEvents;
527
528 DECLARE_ABSTRACT_CLASS(wxWidgetImpl)
529 };
530
531 //
532 // the interface to be implemented eg by a listbox
533 //
534
535 class WXDLLIMPEXP_CORE wxListWidgetColumn
536 {
537 public :
538 virtual ~wxListWidgetColumn() {}
539 } ;
540
541 class WXDLLIMPEXP_CORE wxListWidgetCellValue
542 {
543 public :
544 wxListWidgetCellValue() {}
545 virtual ~wxListWidgetCellValue() {}
546
547 virtual void Set( CFStringRef value ) = 0;
548 virtual void Set( const wxString& value ) = 0;
549 virtual void Set( int value ) = 0;
550 virtual void Check( bool check );
551
552 virtual bool IsChecked() const;
553 virtual int GetIntValue() const = 0;
554 virtual wxString GetStringValue() const = 0;
555 } ;
556
557 class WXDLLIMPEXP_CORE wxListWidgetImpl
558 {
559 public:
560 wxListWidgetImpl() {}
561 virtual ~wxListWidgetImpl() { }
562
563 virtual wxListWidgetColumn* InsertTextColumn( unsigned pos, const wxString& title, bool editable = false,
564 wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) = 0 ;
565 virtual wxListWidgetColumn* InsertCheckColumn( unsigned pos , const wxString& title, bool editable = false,
566 wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) = 0 ;
567
568 // add and remove
569
570 // TODO will be replaced
571 virtual void ListDelete( unsigned int n ) = 0;
572 virtual void ListInsert( unsigned int n ) = 0;
573 virtual void ListClear() = 0;
574
575 // selecting
576
577 virtual void ListDeselectAll() = 0;
578 virtual void ListSetSelection( unsigned int n, bool select, bool multi ) = 0;
579 virtual int ListGetSelection() const = 0;
580 virtual int ListGetSelections( wxArrayInt& aSelections ) const = 0;
581 virtual bool ListIsSelected( unsigned int n ) const = 0;
582
583 // display
584
585 virtual void ListScrollTo( unsigned int n ) = 0;
586 virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) = 0;
587 virtual void UpdateLineToEnd( unsigned int n) = 0;
588
589 // accessing content
590
591 virtual unsigned int ListGetCount() const = 0;
592
593 virtual int DoListHitTest( const wxPoint& inpoint ) const = 0;
594 };
595
596 //
597 // interface to be implemented by a textcontrol
598 //
599
600 class WXDLLIMPEXP_FWD_CORE wxTextAttr;
601 class WXDLLIMPEXP_FWD_CORE wxTextEntry;
602
603 // common interface for all implementations
604 class WXDLLIMPEXP_CORE wxTextWidgetImpl
605
606 {
607 public :
608 // Any widgets implementing this interface must be associated with a
609 // wxTextEntry so instead of requiring the derived classes to implement
610 // another (pure) virtual function, just take the pointer to this entry in
611 // our ctor and implement GetTextEntry() ourselves.
612 wxTextWidgetImpl(wxTextEntry *entry) : m_entry(entry) {}
613
614 virtual ~wxTextWidgetImpl() {}
615
616 wxTextEntry *GetTextEntry() const { return m_entry; }
617
618 virtual bool CanFocus() const { return true; }
619
620 virtual wxString GetStringValue() const = 0 ;
621 virtual void SetStringValue( const wxString &val ) = 0 ;
622 virtual void SetSelection( long from, long to ) = 0 ;
623 virtual void GetSelection( long* from, long* to ) const = 0 ;
624 virtual void WriteText( const wxString& str ) = 0 ;
625
626 virtual bool GetStyle( long position, wxTextAttr& style);
627 virtual void SetStyle( long start, long end, const wxTextAttr& style ) ;
628 virtual void Copy() ;
629 virtual void Cut() ;
630 virtual void Paste() ;
631 virtual bool CanPaste() const ;
632 virtual void SetEditable( bool editable ) ;
633 virtual long GetLastPosition() const ;
634 virtual void Replace( long from, long to, const wxString &str ) ;
635 virtual void Remove( long from, long to ) ;
636
637
638 virtual bool HasOwnContextMenu() const
639 { return false ; }
640
641 virtual bool SetupCursor( const wxPoint& WXUNUSED(pt) )
642 { return false ; }
643
644 virtual void Clear() ;
645 virtual bool CanUndo() const;
646 virtual void Undo() ;
647 virtual bool CanRedo() const;
648 virtual void Redo() ;
649 virtual int GetNumberOfLines() const ;
650 virtual long XYToPosition(long x, long y) const;
651 virtual bool PositionToXY(long pos, long *x, long *y) const ;
652 virtual void ShowPosition(long WXUNUSED(pos)) ;
653 virtual int GetLineLength(long lineNo) const ;
654 virtual wxString GetLineText(long lineNo) const ;
655 virtual void CheckSpelling(bool WXUNUSED(check)) { }
656
657 virtual wxSize GetBestSize() const { return wxDefaultSize; }
658
659 virtual bool SetHint(const wxString& WXUNUSED(hint)) { return false; }
660 private:
661 wxTextEntry * const m_entry;
662
663 wxDECLARE_NO_COPY_CLASS(wxTextWidgetImpl);
664 };
665
666 // common interface for all implementations
667 class WXDLLIMPEXP_CORE wxComboWidgetImpl
668
669 {
670 public :
671 wxComboWidgetImpl() {}
672
673 virtual ~wxComboWidgetImpl() {}
674
675 virtual int GetSelectedItem() const { return -1; };
676 virtual void SetSelectedItem(int WXUNUSED(item)) {};
677
678 virtual int GetNumberOfItems() const { return -1; };
679
680 virtual void InsertItem(int WXUNUSED(pos), const wxString& WXUNUSED(item)) {}
681
682 virtual void RemoveItem(int WXUNUSED(pos)) {}
683
684 virtual void Clear() {}
685
686 virtual wxString GetStringAtIndex(int WXUNUSED(pos)) const { return wxEmptyString; }
687
688 virtual int FindString(const wxString& WXUNUSED(text)) const { return -1; }
689 };
690
691 //
692 // common interface for buttons
693 //
694
695 class wxButtonImpl
696 {
697 public :
698 wxButtonImpl(){}
699 virtual ~wxButtonImpl(){}
700
701 virtual void SetPressedBitmap( const wxBitmap& bitmap ) = 0;
702 } ;
703
704 //
705 // common interface for search controls
706 //
707
708 class wxSearchWidgetImpl
709 {
710 public :
711 wxSearchWidgetImpl(){}
712 virtual ~wxSearchWidgetImpl(){}
713
714 // search field options
715 virtual void ShowSearchButton( bool show ) = 0;
716 virtual bool IsSearchButtonVisible() const = 0;
717
718 virtual void ShowCancelButton( bool show ) = 0;
719 virtual bool IsCancelButtonVisible() const = 0;
720
721 virtual void SetSearchMenu( wxMenu* menu ) = 0;
722
723 virtual void SetDescriptiveText(const wxString& text) = 0;
724 } ;
725
726 //
727 // toplevel window implementation class
728 //
729
730 class wxNonOwnedWindowImpl : public wxObject
731 {
732 public :
733 wxNonOwnedWindowImpl( wxNonOwnedWindow* nonownedwnd) : m_wxPeer(nonownedwnd)
734 {
735 }
736 wxNonOwnedWindowImpl()
737 {
738 }
739 virtual ~wxNonOwnedWindowImpl()
740 {
741 }
742
743 virtual void WillBeDestroyed()
744 {
745 }
746
747 virtual void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
748 long style, long extraStyle, const wxString& name ) = 0;
749
750
751 virtual WXWindow GetWXWindow() const = 0;
752
753 virtual void Raise()
754 {
755 }
756
757 virtual void Lower()
758 {
759 }
760
761 virtual bool Show(bool WXUNUSED(show))
762 {
763 return false;
764 }
765
766 virtual bool ShowWithEffect(bool show, wxShowEffect WXUNUSED(effect), unsigned WXUNUSED(timeout))
767 {
768 return Show(show);
769 }
770
771 virtual void Update()
772 {
773 }
774
775 virtual bool SetTransparent(wxByte WXUNUSED(alpha))
776 {
777 return false;
778 }
779
780 virtual bool SetBackgroundColour(const wxColour& WXUNUSED(col) )
781 {
782 return false;
783 }
784
785 virtual void SetExtraStyle( long WXUNUSED(exStyle) )
786 {
787 }
788
789 virtual void SetWindowStyleFlag( long WXUNUSED(style) )
790 {
791 }
792
793 virtual bool SetBackgroundStyle(wxBackgroundStyle WXUNUSED(style))
794 {
795 return false ;
796 }
797
798 virtual bool CanSetTransparent()
799 {
800 return false;
801 }
802
803 virtual void GetContentArea( int &left , int &top , int &width , int &height ) const = 0;
804 virtual void MoveWindow(int x, int y, int width, int height) = 0;
805 virtual void GetPosition( int &x, int &y ) const = 0;
806 virtual void GetSize( int &width, int &height ) const = 0;
807
808 virtual bool SetShape(const wxRegion& WXUNUSED(region))
809 {
810 return false;
811 }
812
813 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) = 0;
814
815 virtual bool IsMaximized() const = 0;
816
817 virtual bool IsIconized() const= 0;
818
819 virtual void Iconize( bool iconize )= 0;
820
821 virtual void Maximize(bool maximize) = 0;
822
823 virtual bool IsFullScreen() const= 0;
824
825 virtual void ShowWithoutActivating() { Show(true); }
826
827 virtual bool ShowFullScreen(bool show, long style)= 0;
828
829 virtual void RequestUserAttention(int flags) = 0;
830
831 virtual void ScreenToWindow( int *x, int *y ) = 0;
832
833 virtual void WindowToScreen( int *x, int *y ) = 0;
834
835 virtual bool IsActive() = 0;
836
837 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
838
839 static wxNonOwnedWindowImpl*
840 FindFromWXWindow(WXWindow window);
841
842 static void RemoveAssociations( wxNonOwnedWindowImpl* impl);
843
844 static void Associate( WXWindow window, wxNonOwnedWindowImpl *impl );
845
846 // static creation methods, must be implemented by all toolkits
847
848 static wxNonOwnedWindowImpl* CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, WXWindow native) ;
849
850 static wxNonOwnedWindowImpl* CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size,
851 long style, long extraStyle, const wxString& name ) ;
852
853 virtual void SetModified(bool WXUNUSED(modified)) { }
854 virtual bool IsModified() const { return false; }
855
856 protected :
857 wxNonOwnedWindow* m_wxPeer;
858 DECLARE_ABSTRACT_CLASS(wxNonOwnedWindowImpl)
859 };
860
861 #endif // wxUSE_GUI
862
863 //---------------------------------------------------------------------------
864 // cocoa bridging utilities
865 //---------------------------------------------------------------------------
866
867 bool wxMacInitCocoa();
868
869 class WXDLLIMPEXP_CORE wxMacAutoreleasePool
870 {
871 public :
872 wxMacAutoreleasePool();
873 ~wxMacAutoreleasePool();
874 private :
875 void* m_pool;
876 };
877
878 // NSObject
879
880 void wxMacCocoaRelease( void* obj );
881 void wxMacCocoaAutorelease( void* obj );
882 void* wxMacCocoaRetain( void* obj );
883
884
885 #endif
886 // _WX_PRIVATE_CORE_H_