1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/osx/carbon/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 // Copyright:   (c) Stefan Csomor
10 // Licence:     wxWindows licence
11 /////////////////////////////////////////////////////////////////////////////
12 
13 #ifndef _WX_PRIVATE_H_
14 #define _WX_PRIVATE_H_
15 
16 #if wxUSE_GUI
17 
18 #include "wx/osx/uma.h"
19 
20 #include "wx/listbox.h"
21 #include "wx/osx/dc.h"
22 #include "wx/osx/dcclient.h"
23 #include "wx/osx/dcmemory.h"
24 
25 // app.h
26 
27 #endif // wxUSE_GUI
28 
29 // filefn.h
30 WXDLLIMPEXP_BASE wxString wxMacFSSpec2MacFilename( const FSSpec *spec );
31 WXDLLIMPEXP_BASE void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec );
32 
33 // utils.h
34 WXDLLIMPEXP_BASE wxString wxMacFindFolderNoSeparator(short vRefNum,
35                                                      OSType folderType,
36                                                      Boolean createFolder);
37 WXDLLIMPEXP_BASE wxString wxMacFindFolder(short vRefNum,
38                                           OSType folderType,
39                                           Boolean createFolder);
40 
wxMacGetEventParamType()41 template<typename T> EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ); return 0; }
42 template<> inline EventParamType wxMacGetEventParamType<HIShapeRef>() { return typeHIShapeRef; }
43 template<> inline EventParamType wxMacGetEventParamType<RgnHandle>() { return typeQDRgnHandle; }
44 template<> inline EventParamType wxMacGetEventParamType<ControlRef>() { return typeControlRef; }
45 template<> inline EventParamType wxMacGetEventParamType<WindowRef>() { return typeWindowRef; }
46 template<> inline EventParamType wxMacGetEventParamType<MenuRef>() { return typeMenuRef; }
47 template<> inline EventParamType wxMacGetEventParamType<EventRef>() { return typeEventRef; }
48 template<> inline EventParamType wxMacGetEventParamType<Point>() { return typeQDPoint; }
49 template<> inline EventParamType wxMacGetEventParamType<Rect>() { return typeQDRectangle; }
50 template<> inline EventParamType wxMacGetEventParamType<Boolean>() { return typeBoolean; }
51 template<> inline EventParamType wxMacGetEventParamType<SInt16>() { return typeSInt16; }
52 template<> inline EventParamType wxMacGetEventParamType<SInt32>() { return typeSInt32; }
53 template<> inline EventParamType wxMacGetEventParamType<UInt32>() { return typeUInt32; }
54 template<> inline EventParamType wxMacGetEventParamType<RGBColor>() { return typeRGBColor; }
55 template<> inline EventParamType wxMacGetEventParamType<HICommand>() { return typeHICommand; }
56 template<> inline EventParamType wxMacGetEventParamType<HIPoint>() { return typeHIPoint; }
57 template<> inline EventParamType wxMacGetEventParamType<HISize>() { return typeHISize; }
58 template<> inline EventParamType wxMacGetEventParamType<HIRect>() { return typeHIRect; }
59 template<> inline EventParamType wxMacGetEventParamType<void*>() { return typeVoidPtr; }
60 template<> inline EventParamType wxMacGetEventParamType<CFDictionaryRef>() { return typeCFDictionaryRef; }
61 template<> inline EventParamType wxMacGetEventParamType<Collection>() { return typeCollection; }
62 template<> inline EventParamType wxMacGetEventParamType<CGContextRef>() { return typeCGContextRef; }
63 /*
64  These are ambiguous
65  template<> EventParamType wxMacGetEventParamType<GrafPtr>() { return typeGrafPtr; }
66  template<> EventParamType wxMacGetEventParamType<OSStatus>() { return typeOSStatus; }
67  template<> EventParamType wxMacGetEventParamType<CFIndex>() { return typeCFIndex; }
68  template<> EventParamType wxMacGetEventParamType<GWorldPtr>() { return typeGWorldPtr; }
69  */
70 
71 class WXDLLIMPEXP_CORE wxMacCarbonEvent
72 {
73 
74 public :
wxMacCarbonEvent()75     wxMacCarbonEvent()
76     {
77         m_eventRef = 0;
78         m_release = false;
79     }
80 
81     wxMacCarbonEvent( EventRef event , bool release = false )
82     {
83         m_eventRef = event;
84         m_release = release;
85     }
86 
87     wxMacCarbonEvent(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone)
88     {
89         m_eventRef = NULL;
90         verify_noerr( MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef) );
91         m_release = true;
92     }
93 
~wxMacCarbonEvent()94     ~wxMacCarbonEvent()
95     {
96         if ( m_release )
97             ReleaseEvent( m_eventRef );
98     }
99 
100     OSStatus Create(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone)
101     {
102         verify( (m_eventRef == NULL) || m_release );
103         if ( m_eventRef && m_release )
104         {
105             ReleaseEvent( m_eventRef );
106             m_release = false;
107             m_eventRef = NULL;
108         }
109         OSStatus err = MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef);
110         if ( err == noErr )
111             m_release = true;
112         return err;
113     }
114 
115     OSStatus GetParameter( EventParamName inName, EventParamType inDesiredType, UInt32 inBufferSize, void * outData);
116 
GetParameter(EventParamName inName,EventParamType type,T * data)117     template <typename T> OSStatus GetParameter( EventParamName inName, EventParamType type , T *data )
118     {
119         return GetParameter( inName, type , sizeof( T ) , data );
120     }
GetParameter(EventParamName inName,T * data)121     template <typename T> OSStatus GetParameter( EventParamName inName, T *data )
122     {
123         return GetParameter<T>( inName, wxMacGetEventParamType<T>() , data );
124     }
125 
GetParameter(EventParamName inName)126     template <typename T> T GetParameter( EventParamName inName )
127     {
128         T value;
129         verify_noerr( GetParameter<T>( inName, &value ) );
130         return value;
131     }
GetParameter(EventParamName inName,EventParamType inDesiredType)132     template <typename T> T GetParameter( EventParamName inName, EventParamType inDesiredType )
133     {
134         T value;
135         verify_noerr( GetParameter<T>( inName, inDesiredType , &value ) );
136         return value;
137     }
138 
139     OSStatus SetParameter( EventParamName inName, EventParamType inType, UInt32 inSize, const void * inData);
SetParameter(EventParamName inName,EventParamType inDesiredType,const T * data)140     template <typename T> OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T *data )
141     {
142         return SetParameter( inName, inDesiredType , sizeof( T ) , data );
143     }
SetParameter(EventParamName inName,EventParamType inDesiredType,const T & data)144     template <typename T> OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T& data )
145     {
146         return SetParameter<T>( inName, inDesiredType , &data );
147     }
SetParameter(EventParamName inName,const T * data)148     template <typename T> OSStatus SetParameter( EventParamName inName, const T *data )
149     {
150         return SetParameter<T>( inName, wxMacGetEventParamType<T>() , data );
151     }
SetParameter(EventParamName inName,const T & data)152     template <typename T> OSStatus SetParameter( EventParamName inName, const T& data )
153     {
154         return SetParameter<T>( inName, wxMacGetEventParamType<T>() , &data );
155     }
GetClass()156     UInt32 GetClass()
157     {
158         return ::GetEventClass( m_eventRef );
159     }
GetKind()160     UInt32 GetKind()
161     {
162         return ::GetEventKind( m_eventRef );
163     }
GetTime()164     EventTime GetTime()
165     {
166         return ::GetEventTime( m_eventRef );
167     }
GetTicks()168     UInt32 GetTicks()
169     {
170         return EventTimeToTicks( GetTime() );
171     }
SetCurrentTime()172     OSStatus SetCurrentTime( )
173     {
174         return ::SetEventTime( m_eventRef , GetCurrentEventTime() );
175     }
SetTime(EventTime when)176     OSStatus SetTime( EventTime when )
177     {
178         return ::SetEventTime( m_eventRef , when );
179     }
EventRef()180     operator EventRef () { return m_eventRef; }
181 
IsValid()182     bool IsValid() { return m_eventRef != 0; }
183 protected :
184     EventRef m_eventRef;
185     bool     m_release;
186 };
187 
188 #if wxUSE_GUI
189 
190 class WXDLLIMPEXP_FWD_CORE wxMacToolTipTimer ;
191 
192 class WXDLLIMPEXP_CORE wxMacToolTip
193 {
194 public :
195     wxMacToolTip() ;
196     ~wxMacToolTip() ;
197 
198     void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ;
199     void Draw() ;
200     void Clear() ;
201 
GetMark()202     long GetMark()
203     { return m_mark ; }
204 
IsShown()205     bool IsShown()
206     { return m_shown ; }
207 
208 private :
209     wxString    m_label ;
210     wxPoint m_position ;
211     Rect            m_rect ;
212     WindowRef    m_window ;
213     PicHandle    m_backpict ;
214     bool        m_shown ;
215     long        m_mark ;
216 #if wxUSE_TIMER
217     wxMacToolTipTimer* m_timer ;
218 #endif
219     wxCFStringRef m_helpTextRef ;
220 } ;
221 
222 // Quartz
223 
224 WXDLLIMPEXP_CORE void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 );
225 WXDLLIMPEXP_CORE void wxMacReleaseBitmapButton( ControlButtonContentInfo*info );
226 
227 #define MAC_WXHBITMAP(a) (GWorldPtr(a))
228 #define MAC_WXHMETAFILE(a) (PicHandle(a))
229 #define MAC_WXHICON(a) (IconRef(a))
230 #define MAC_WXHCURSOR(a) (CursHandle(a))
231 #define MAC_WXHRGN(a) (RgnHandle(a))
232 #define MAC_WXHWND(a) (WindowPtr(a))
233 #define MAC_WXRECPTR(a) ((Rect*)a)
234 #define MAC_WXPOINTPTR(a) ((Point*)a)
235 #define MAC_WXHMENU(a) ((MenuHandle)a)
236 
237 struct wxOpaqueWindowRef
238 {
wxOpaqueWindowRefwxOpaqueWindowRef239     wxOpaqueWindowRef( WindowRef ref ) { m_data = ref; }
WindowRefwxOpaqueWindowRef240     operator WindowRef() { return m_data; }
241 private :
242     WindowRef m_data;
243 };
244 
245 WXDLLIMPEXP_CORE void wxMacRectToNative( const wxRect *wx , Rect *n );
246 WXDLLIMPEXP_CORE void wxMacNativeToRect( const Rect *n , wxRect* wx );
247 WXDLLIMPEXP_CORE void wxMacPointToNative( const wxPoint* wx , Point *n );
248 WXDLLIMPEXP_CORE void wxMacNativeToPoint( const Point *n , wxPoint* wx );
249 
250 WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef);
251 
252 WXDLLIMPEXP_CORE int wxMacCommandToId( UInt32 macCommandId );
253 WXDLLIMPEXP_CORE UInt32 wxIdToMacCommand( int wxId );
254 WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item );
255 
256 WXDLLIMPEXP_CORE pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data );
257 WXDLLIMPEXP_CORE Rect wxMacGetBoundsForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true );
258 
259 ControlActionUPP GetwxMacLiveScrollbarActionProc();
260 
261 // additional optional event defines
262 
263 class WXDLLIMPEXP_CORE wxMacControl : public wxWidgetImpl
264 {
265 public :
266     wxMacControl( wxWindowMac* peer , bool isRootControl = false, bool isUserPane = false );
267     wxMacControl() ;
268     virtual ~wxMacControl();
269 
270     void Init();
271 
272     void SetReferenceInNativeControl();
273     static wxMacControl* GetReferenceFromNativeControl(ControlRef control);
274 
GetControlRefAddr()275     virtual ControlRef * GetControlRefAddr() { return &m_controlRef; }
GetControlRef()276     virtual ControlRef GetControlRef() const { return m_controlRef; }
277 
GetWXWidget()278     virtual WXWidget GetWXWidget() const { return (WXWidget) m_controlRef; }
279 
280     virtual bool        IsVisible() const;
281 
282     virtual void        Raise();
283 
284     virtual void        Lower();
285 
286     virtual void        ScrollRect( const wxRect *rect, int dx, int dy );
287 
288     virtual void        GetContentArea( int &left , int &top , int &width , int &height ) const;
289     virtual void        Move(int x, int y, int width, int height);
290     virtual void        GetPosition( int &x, int &y ) const;
291     virtual void        GetSize( int &width, int &height ) const;
292     virtual void        SetControlSize( wxWindowVariant variant ) ;
293 
294     // where is in native window relative coordinates
295     virtual void        SetNeedsDisplay( const wxRect* where = NULL );
296     virtual bool        GetNeedsDisplay() const;
297 
298     virtual bool        CanFocus() const;
299     // return true if successful
300     virtual bool        SetFocus();
301     virtual bool        HasFocus() const;
302 
303     void                RemoveFromParent();
304     void                Embed( wxWidgetImpl *parent );
305 
306     void                SetDefaultButton( bool isDefault );
307     void                PerformClick();
308     void                SetLabel( const wxString& title, wxFontEncoding encoding );
309 
310     void                SetCursor( const wxCursor & cursor );
311     void                CaptureMouse();
312     void                ReleaseMouse();
313 
314     wxInt32             GetValue() const;
315     void                SetValue( wxInt32 v );
316     wxBitmap            GetBitmap() const;
317     void                SetBitmap( const wxBitmap& bitmap );
318     void                SetBitmapPosition( wxDirection dir );
319 
320     void                GetBestRect( wxRect *r ) const;
321     bool                IsEnabled() const;
322     void                Enable( bool enable );
ButtonClickDidStateChange()323     bool                ButtonClickDidStateChange() { return false ;}
324     void                SetMinimum( wxInt32 v );
325     void                SetMaximum( wxInt32 v );
326     void                PulseGauge() ;
327     void                SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
328 
329     // temp convenience methods
330 
331     void                GetBestRect( Rect *r ) const;
332     /*
333     void operator= (ControlRef c) { m_controlRef = c; }
334     operator ControlRef () { return m_controlRef; }
335     operator ControlRef * () { return &m_controlRef; }
336     */
337     // accessing data and values
338 
339     virtual OSStatus SetData( ControlPartCode inPartCode , ResType inTag , Size inSize , const void * inData );
340     virtual OSStatus GetData( ControlPartCode inPartCode , ResType inTag , Size inBufferSize , void * inOutBuffer , Size * outActualSize ) const;
341     virtual OSStatus GetDataSize( ControlPartCode inPartCode , ResType inTag , Size * outActualSize ) const;
342     virtual OSStatus SendEvent(  EventRef ref , OptionBits inOptions = 0 );
343     virtual OSStatus SendHICommand( HICommand &command , OptionBits inOptions = 0 );
344 
345     virtual OSStatus SendHICommand( UInt32 commandID , OptionBits inOptions = 0 );
346 
347     virtual wxInt32 GetMaximum() const;
348     virtual wxInt32 GetMinimum() const;
349 
350     virtual void SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum );
351     virtual void SetRange( SInt32 minimum , SInt32 maximum );
352 
353     // templated helpers
354 
GetDataSize(ControlPartCode inPartCode,ResType inTag)355     Size GetDataSize( ControlPartCode inPartCode , ResType inTag ) const
356     {
357         Size sz;
358         verify_noerr( GetDataSize( inPartCode , inTag , &sz ) );
359         return sz;
360     }
SetData(ControlPartCode inPartCode,ResType inTag,const T * data)361     template <typename T> OSStatus SetData( ControlPartCode inPartCode , ResType inTag , const T *data )
362     {
363         return SetData( inPartCode , inTag , sizeof( T ) , data );
364     }
SetData(ControlPartCode inPartCode,ResType inTag,const T & data)365     template <typename T> OSStatus SetData( ControlPartCode inPartCode , ResType inTag , const T& data )
366     {
367         return SetData( inPartCode , inTag , sizeof( T ) , &data );
368     }
SetData(ResType inTag,const T * data)369     template <typename T> OSStatus SetData( ResType inTag , const T *data )
370     {
371         return SetData( kControlEntireControl , inTag , sizeof( T ) , data );
372     }
SetData(ResType inTag,const T & data)373     template <typename T> OSStatus SetData( ResType inTag , const T& data )
374     {
375         return SetData( kControlEntireControl , inTag , sizeof( T ) , &data );
376     }
GetData(ControlPartCode inPartCode,ResType inTag,T * data)377     template <typename T> OSStatus GetData( ControlPartCode inPartCode , ResType inTag , T *data ) const
378     {
379         Size dummy;
380         return GetData( inPartCode , inTag , sizeof( T ) , data , &dummy );
381     }
GetData(ControlPartCode inPartCode,ResType inTag)382     template <typename T> T GetData( ControlPartCode inPartCode , ResType inTag ) const
383     {
384         T value;
385         OSStatus err = GetData<T>( inPartCode , inTag , &value );
386 
387         if ( err != noErr )
388         {
389             wxFAIL_MSG( wxString::Format(wxT("GetData Failed for Part [%i] and Tag [%i]"),
390                                         inPartCode, (int)inTag) );
391         }
392 
393         return value;
394     }
GetData(ResType inTag,T * data)395     template <typename T> OSStatus GetData( ResType inTag , T *data ) const
396     {
397         Size dummy;
398         return GetData( kControlEntireControl , inTag , sizeof( T ) , data , &dummy );
399     }
GetData(ResType inTag)400     template <typename T> T GetData( ResType inTag ) const
401     {
402         return GetData<T>( kControlEntireControl , inTag );
403     }
404 
405     // Flash the control for the specified amount of time
406 
407     virtual void VisibilityChanged( bool shown );
408     virtual void SuperChangedPosition();
409 
410 
411     virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
412     virtual void SetBackgroundColour( const wxColour& col );
413     virtual bool SetBackgroundStyle(wxBackgroundStyle style);
414     virtual ControlPartCode HandleKey(  SInt16 keyCode,  SInt16 charCode, EventModifiers modifiers );
415     void SetActionProc( ControlActionUPP   actionProc );
416     SInt32 GetViewSize() const;
417 
418     virtual void SetVisibility( bool visible );
419 
420     virtual bool IsActive() const;
421 
422     // invalidates this control and all children
423     virtual void InvalidateWithChildren();
424     virtual void SetDrawingEnabled( bool enable );
425 
426     // in native parent window relative coordinates
427 
428     virtual void GetRectInWindowCoords( Rect *r );
429 
430 
431     virtual void GetFeatures( UInt32 *features );
432 
433     // to be moved into a tab control class
434 
435     virtual OSStatus SetTabEnabled( SInt16 tabNo , bool enable );
436 
437     virtual void InstallEventHandler( WXWidget control = NULL );
438 protected :
439     WXEVENTHANDLERREF    m_macControlEventHandler ;
440     ControlRef  m_controlRef;
441     wxFont      m_font;
442     long        m_windowStyle;
443     DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacControl)
444 };
445 
446 // ============================================================================
447 // DataBrowser Wrapper
448 // ============================================================================
449 //
450 // basing on DataBrowserItemIDs
451 //
452 
453 class WXDLLIMPEXP_CORE wxMacDataBrowserControl : public wxMacControl
454 {
455 public :
456     wxMacDataBrowserControl( wxWindow* peer, const wxPoint& pos, const wxSize& size, long style);
wxMacDataBrowserControl()457     wxMacDataBrowserControl() {}
458 
459     OSStatus SetCallbacks( const DataBrowserCallbacks *callbacks );
460 
461     OSStatus GetItemCount( DataBrowserItemID container,
462             Boolean recurse,
463             DataBrowserItemState state,
464             ItemCount *numItems) const;
465 
466     OSStatus GetItems( DataBrowserItemID container,
467             Boolean recurse,
468             DataBrowserItemState state,
469             Handle items) const;
470 
471 
472     OSStatus AddColumn( DataBrowserListViewColumnDesc *columnDesc,
473         DataBrowserTableViewColumnIndex position );
474 
475     OSStatus RemoveColumn( DataBrowserTableViewColumnIndex position );
476 
477     OSStatus AutoSizeColumns();
478 
479     OSStatus SetHasScrollBars( bool horiz, bool vert );
480     OSStatus SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle );
481 
482     OSStatus SetHeaderButtonHeight( UInt16 height );
483     OSStatus GetHeaderButtonHeight( UInt16 *height );
484 
485     OSStatus UpdateItems( DataBrowserItemID container, UInt32 numItems,
486             const DataBrowserItemID *items,
487             DataBrowserPropertyID preSortProperty,
488             DataBrowserPropertyID propertyID ) const;
489 
490     OSStatus AddItems( DataBrowserItemID container, UInt32 numItems,
491             const DataBrowserItemID *items,
492             DataBrowserPropertyID preSortProperty );
493     OSStatus RemoveItems( DataBrowserItemID container, UInt32 numItems,
494             const DataBrowserItemID *items,
495             DataBrowserPropertyID preSortProperty );
496     OSStatus RevealItem( DataBrowserItemID item,
497             DataBrowserPropertyID propertyID,
498             DataBrowserRevealOptions options ) const;
499 
500     OSStatus SetSelectionFlags( DataBrowserSelectionFlags );
501     OSStatus GetSelectionAnchor( DataBrowserItemID *first, DataBrowserItemID *last ) const;
502     bool IsItemSelected( DataBrowserItemID item ) const;
503     OSStatus SetSelectedItems( UInt32 numItems,
504             const DataBrowserItemID *items,
505             DataBrowserSetOption operation );
506 
507     OSStatus GetItemID( DataBrowserTableViewRowIndex row,
508             DataBrowserItemID * item ) const;
509     OSStatus GetItemRow( DataBrowserItemID item,
510             DataBrowserTableViewRowIndex * row ) const;
511 
512     OSStatus SetDefaultRowHeight( UInt16 height );
513     OSStatus GetDefaultRowHeight( UInt16 * height ) const;
514 
515     OSStatus SetRowHeight( DataBrowserItemID item , UInt16 height);
516     OSStatus GetRowHeight( DataBrowserItemID item , UInt16 *height) const;
517 
518     OSStatus GetColumnWidth( DataBrowserPropertyID column , UInt16 *width ) const;
519     OSStatus SetColumnWidth( DataBrowserPropertyID column , UInt16 width );
520 
521     OSStatus GetDefaultColumnWidth( UInt16 *width ) const;
522     OSStatus SetDefaultColumnWidth( UInt16 width );
523 
524     OSStatus GetColumnCount( UInt32* numColumns) const;
525 
526     OSStatus GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id );
527 
528     OSStatus GetColumnPosition( DataBrowserPropertyID column, DataBrowserTableViewColumnIndex *position) const;
529     OSStatus SetColumnPosition( DataBrowserPropertyID column, DataBrowserTableViewColumnIndex position);
530 
531     OSStatus GetScrollPosition( UInt32 *top , UInt32 *left ) const;
532     OSStatus SetScrollPosition( UInt32 top , UInt32 left );
533 
534     OSStatus GetSortProperty( DataBrowserPropertyID *column ) const;
535     OSStatus SetSortProperty( DataBrowserPropertyID column );
536 
537     OSStatus GetSortOrder( DataBrowserSortOrder *order ) const;
538     OSStatus SetSortOrder( DataBrowserSortOrder order );
539 
540     OSStatus GetPropertyFlags( DataBrowserPropertyID property, DataBrowserPropertyFlags *flags ) const;
541     OSStatus SetPropertyFlags( DataBrowserPropertyID property, DataBrowserPropertyFlags flags );
542 
543     OSStatus GetHeaderDesc( DataBrowserPropertyID property, DataBrowserListViewHeaderDesc *desc ) const;
544     OSStatus SetHeaderDesc( DataBrowserPropertyID property, DataBrowserListViewHeaderDesc *desc );
545 
546     OSStatus SetDisclosureColumn( DataBrowserPropertyID property , Boolean expandableRows );
547 
548     OSStatus GetItemPartBounds( DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserPropertyPart part, Rect * bounds );
549 protected :
550 
551     static pascal void DataBrowserItemNotificationProc(
552         ControlRef browser,
553         DataBrowserItemID itemID,
554         DataBrowserItemNotification message,
555         DataBrowserItemDataRef itemData );
556 
557     virtual void ItemNotification(
558         DataBrowserItemID itemID,
559         DataBrowserItemNotification message,
560         DataBrowserItemDataRef itemData) = 0;
561 
562     static pascal OSStatus DataBrowserGetSetItemDataProc(
563         ControlRef browser,
564         DataBrowserItemID itemID,
565         DataBrowserPropertyID property,
566         DataBrowserItemDataRef itemData,
567         Boolean changeValue );
568 
569     virtual OSStatus GetSetItemData(
570         DataBrowserItemID itemID,
571         DataBrowserPropertyID property,
572         DataBrowserItemDataRef itemData,
573         Boolean changeValue ) = 0;
574 
575     static pascal Boolean DataBrowserCompareProc(
576         ControlRef browser,
577         DataBrowserItemID itemOneID,
578         DataBrowserItemID itemTwoID,
579         DataBrowserPropertyID sortProperty);
580 
581     virtual Boolean CompareItems(DataBrowserItemID itemOneID,
582         DataBrowserItemID itemTwoID,
583         DataBrowserPropertyID sortProperty) = 0;
584     DECLARE_ABSTRACT_CLASS(wxMacDataBrowserControl)
585 };
586 
587 // ============================================================================
588 // Higher-level Databrowser
589 // ============================================================================
590 //
591 // basing on data item objects
592 //
593 
594 // forward decl
595 
596 class wxMacDataItemBrowserControl;
597 class wxMacListBoxItem;
598 
599 const DataBrowserPropertyID kTextColumnId = 1024;
600 const DataBrowserPropertyID kNumericOrderColumnId = 1025;
601 
602 // for multi-column controls, we will use this + the column ID to identify the
603 // column. We don't use kTextColumnId there, and ideally the two should merge.
604 const DataBrowserPropertyID kMinColumnId = 1050;
605 
606 // base API for high-level databrowser operations
607 
608 // base class for databrowser items
609 
610 enum DataItemType {
611     DataItem_Text
612 };
613 
614 /*
615 class WXDLLIMPEXP_CORE wxMacDataItem
616 {
617 public :
618     wxMacDataItem();
619     virtual ~wxMacDataItem();
620 } ;
621 */
622 
623 class WXDLLIMPEXP_CORE wxMacDataItem
624 {
625 public :
626     wxMacDataItem();
627     virtual ~wxMacDataItem();
628 
629     virtual bool IsLessThan(wxMacDataItemBrowserControl *owner ,
630         const wxMacDataItem*,
631         DataBrowserPropertyID property) const;
632 
633     // returns true if access was successful, otherwise false
634     virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner ,
635         DataBrowserPropertyID property,
636         DataBrowserItemDataRef itemData,
637         bool changeValue );
638 
639     virtual void Notification(wxMacDataItemBrowserControl *owner ,
640         DataBrowserItemNotification message,
641         DataBrowserItemDataRef itemData ) const;
642 
643     void SetOrder( SInt32 order );
644     SInt32 GetOrder() const;
645 
646 protected :
647     SInt32      m_order;
648 
649 };
650 
651 enum ListSortOrder {
652     SortOrder_None,
653     SortOrder_Text_Ascending,
654     SortOrder_Text_Descending
655 };
656 
657 typedef wxMacDataItem* wxMacDataItemPtr;
658 const wxMacDataItemPtr wxMacDataBrowserRootContainer = NULL;
659 typedef void * wxListColumnId ;
660 
661 WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxMacDataItemPtr, wxArrayMacDataItemPtr, class WXDLLIMPEXP_CORE);
662 
663 class WXDLLIMPEXP_CORE wxMacDataItemBrowserControl : public wxMacDataBrowserControl
664 {
665 public :
666     wxMacDataItemBrowserControl( wxWindow* peer , const wxPoint& pos, const wxSize& size, long style);
wxMacDataItemBrowserControl()667     wxMacDataItemBrowserControl() {}
668     // create a list item (can be a subclass of wxMacListBoxItem)
669 
670     unsigned int    GetItemCount(const wxMacDataItem* container, bool recurse , DataBrowserItemState state) const;
671     void            GetItems(const wxMacDataItem* container, bool recurse ,
672                         DataBrowserItemState state, wxArrayMacDataItemPtr &items ) const;
673 
674     unsigned int    GetSelectedItemCount( const wxMacDataItem* container, bool recurse ) const;
675 
676     unsigned int    GetLineFromItem(const wxMacDataItem *item) const;
677     wxMacDataItem * GetItemFromLine(unsigned int n) const;
678 
679     void            UpdateItem(const wxMacDataItem *container, const wxMacDataItem *item,
680                         DataBrowserPropertyID property) const;
681     void            UpdateItems(const wxMacDataItem *container, wxArrayMacDataItemPtr &items,
682                         DataBrowserPropertyID property) const;
683 
684     void            InsertColumn(int colId, DataBrowserPropertyType colType,
685                             const wxString& title, SInt16 just = teFlushDefault, int defaultWidth = -1);
686 
687     int             GetColumnWidth(int colId);
688     void            SetColumnWidth(int colId, int width);
689 
690     void            AddItem(wxMacDataItem *container, wxMacDataItem *item);
691     void            AddItems(wxMacDataItem *container, wxArrayMacDataItemPtr &items );
692 
693     void            RemoveAllItems(wxMacDataItem *container);
694     void            RemoveItem(wxMacDataItem *container, wxMacDataItem* item);
695     void            RemoveItems(wxMacDataItem *container, wxArrayMacDataItemPtr &items);
696 
697     void            SetSelectedItem( wxMacDataItem* item , DataBrowserSetOption option);
698     void            SetSelectedItems( wxArrayMacDataItemPtr &items , DataBrowserSetOption option);
699     void            SetSelectedAllItems( DataBrowserSetOption option);
700     Boolean         IsItemSelected( const wxMacDataItem* item) const;
701 
702     void            RevealItem( wxMacDataItem* item, DataBrowserRevealOptions options);
703 
704     void            GetSelectionAnchor( wxMacDataItemPtr* first , wxMacDataItemPtr* last) const;
705 
706     // add and remove
707 
708     virtual void            MacDelete( unsigned int n );
709     virtual void            MacInsert( unsigned int n, wxMacDataItem* item);
710     virtual void            MacClear();
711 
712     // accessing content
713 
714     virtual unsigned int    MacGetCount() const;
715 
716 public :
717 
718     // as we are getting the same events for human and API selection we have to suppress
719     // events in the latter case, since this will be used from many subclasses we keep it here
720 
IsSelectionSuppressed()721     bool            IsSelectionSuppressed() const { return m_suppressSelection; }
722     bool            SuppressSelection( bool suppress );
723 
724     // client data
725 
726     virtual wxClientDataType GetClientDataType() const;
727     virtual void            SetClientDataType(wxClientDataType clientDataItemsType);
728     //virtual ListSortOrder   GetSortOrder() const;
729     //virtual void            SetSortOrder(const ListSortOrder sort);
730 
731 
732 
733 protected:
734 
735     ListSortOrder m_sortOrder;
736     wxClientDataType m_clientDataItemsType;
737 
738     // ID aware base methods, should be 'final' ie not changed in subclasses
739 
740     virtual Boolean CompareItems(DataBrowserItemID itemOneID,
741                         DataBrowserItemID itemTwoID,
742                         DataBrowserPropertyID sortProperty);
743 
744     virtual OSStatus GetSetItemData(DataBrowserItemID itemID,
745                         DataBrowserPropertyID property,
746                         DataBrowserItemDataRef itemData,
747                         Boolean changeValue );
748 
749     virtual void    ItemNotification(
750                         DataBrowserItemID itemID,
751                         DataBrowserItemNotification message,
752                         DataBrowserItemDataRef itemData);
753 
754 
755 private :
756 
757     bool m_suppressSelection;
758     DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataItemBrowserControl)
759 };
760 
761 class WXDLLIMPEXP_CORE wxMacDataItemBrowserSelectionSuppressor
762 {
763 public :
764     wxMacDataItemBrowserSelectionSuppressor(wxMacDataItemBrowserControl *browser);
765     ~wxMacDataItemBrowserSelectionSuppressor();
766 
767 private :
768 
769     bool m_former;
770     wxMacDataItemBrowserControl* m_browser;
771 };
772 
773 // ============================================================================
774 // platform listbox implementation
775 // ============================================================================
776 
777 // exposed for reuse in wxCheckListBox
778 
779 class WXDLLIMPEXP_CORE wxMacListBoxItem : public wxMacDataItem
780 {
781 public :
782     wxMacListBoxItem();
783 
784     virtual ~wxMacListBoxItem();
785 
786     virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner ,
787         DataBrowserPropertyID property,
788         DataBrowserItemDataRef itemData,
789         bool changeValue );
790 
791     virtual void Notification(wxMacDataItemBrowserControl *owner ,
792         DataBrowserItemNotification message,
793         DataBrowserItemDataRef itemData ) const;
794 protected :
795 };
796 
797 class WXDLLIMPEXP_CORE wxMacDataBrowserColumn : public wxListWidgetColumn
798 {
799 public :
wxMacDataBrowserColumn(DataBrowserPropertyID propertyId,DataBrowserPropertyType colType,bool editable)800     wxMacDataBrowserColumn( DataBrowserPropertyID propertyId, DataBrowserPropertyType colType, bool editable )
801         : m_property(propertyId), m_editable(editable), m_type( colType )
802     {
803     }
~wxMacDataBrowserColumn()804     ~wxMacDataBrowserColumn()
805     {
806     }
GetProperty()807     DataBrowserPropertyID GetProperty() const { return m_property ; }
808 
IsEditable()809     bool IsEditable() const { return m_editable; }
810 
GetType()811     DataBrowserPropertyType GetType() const { return m_type; }
812 
813 protected :
814     DataBrowserPropertyID m_property;
815     bool m_editable;
816     DataBrowserPropertyType m_type;
817 } ;
818 
819 WX_DEFINE_ARRAY_PTR(wxMacDataBrowserColumn *, wxArrayMacDataBrowserColumns);
820 
821 
822 class WXDLLIMPEXP_CORE wxMacDataBrowserCellValue : public wxListWidgetCellValue
823 {
824 public :
wxMacDataBrowserCellValue(DataBrowserItemDataRef data)825     wxMacDataBrowserCellValue(DataBrowserItemDataRef data) : m_data(data) {}
~wxMacDataBrowserCellValue()826     virtual ~wxMacDataBrowserCellValue() {}
827 
828     virtual void Set( CFStringRef value );
829     virtual void Set( const wxString& value );
830     virtual void Set( int value ) ;
831     virtual void Check( bool check );
832 
833     virtual int GetIntValue() const ;
834     virtual wxString GetStringValue() const ;
835 protected :
836     DataBrowserItemDataRef m_data;
837 } ;
838 
839 
840 class WXDLLIMPEXP_CORE wxMacDataBrowserListControl : public wxMacDataItemBrowserControl, public wxListWidgetImpl
841 {
842 public:
843     wxMacDataBrowserListControl( wxWindow *peer, const wxPoint& pos, const wxSize& size, long style );
wxMacDataBrowserListControl()844     wxMacDataBrowserListControl() {}
845     virtual ~wxMacDataBrowserListControl();
846 
847     // wxListWidgetImpl Methods
848 
849     wxListWidgetColumn*     InsertTextColumn( unsigned int pos, const wxString& title, bool editable = false,
850                                 wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) ;
851     wxListWidgetColumn*     InsertCheckColumn( unsigned int pos , const wxString& title, bool editable = false,
852                                 wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) ;
853 
854     wxMacDataBrowserColumn* DoInsertColumn( unsigned int pos, DataBrowserPropertyID property,
855                                 const wxString& title, bool editable,
856                                 DataBrowserPropertyType colType, SInt16 just, int width );
857     // add and remove
858 
859     virtual void            ListDelete( unsigned int n );
860     virtual void            ListInsert( unsigned int n );
861     virtual void            ListClear();
862 
863     // selecting
864 
865     virtual void            ListDeselectAll();
866     virtual void            ListSetSelection( unsigned int n, bool select, bool multi = false );
867     virtual int             ListGetSelection() const;
868     virtual int             ListGetSelections( wxArrayInt& aSelections ) const;
869     virtual bool            ListIsSelected( unsigned int n ) const;
870 
871     // display
872 
873     virtual void            ListScrollTo( unsigned int n );
874 
875     // accessing content
876 
877     virtual unsigned int    ListGetCount() const;
878     virtual int             DoListHitTest( const wxPoint& inpoint ) const;
879 
880     virtual void            UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL );
881     virtual void            UpdateLineToEnd( unsigned int n) ;
882 
883     // pointing back
884 
885     wxMacDataBrowserColumn*     GetColumnFromProperty( DataBrowserPropertyID );
886 
887 protected:
888     virtual void            ItemNotification(
889                                 DataBrowserItemID itemID,
890                                 DataBrowserItemNotification message,
891                                 DataBrowserItemDataRef itemData);
892 
893 private:
894     wxArrayMacDataBrowserColumns m_columns;
895     int m_nextColumnId ;
896 
897     DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserListControl)
898 };
899 
900 // ============================================================================
901 // graphics implementation
902 // ============================================================================
903 
904 // draw the image 'upside down' corrected as HIViewDrawCGImage does
905 
906 OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
907                                CGContextRef    inContext,
908                                const HIRect *  inBounds,
909                                CGImageRef      inImage) ;
910 
911 CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
912 
913 #endif // wxUSE_GUI
914 
915 #define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \
916 UPP Get##x()                                \
917 {                                           \
918     static UPP sHandler = NULL;             \
919     if ( sHandler == NULL )                 \
920         sHandler = New##UPP( x );           \
921     return sHandler;                        \
922 }
923 
924 //---------------------------------------------------------------------------
925 // cocoa bridging utilities
926 //---------------------------------------------------------------------------
927 
928 bool wxMacInitCocoa();
929 
930 typedef Cursor ClassicCursor;
931 
932 // -------------
933 // Common to all
934 // -------------
935 
936 // Cursor support
937 
938 const short kwxCursorBullseye = 0;
939 const short kwxCursorBlank = 1;
940 const short kwxCursorPencil = 2;
941 const short kwxCursorMagnifier = 3;
942 const short kwxCursorNoEntry = 4;
943 const short kwxCursorPaintBrush = 5;
944 const short kwxCursorPointRight = 6;
945 const short kwxCursorPointLeft = 7;
946 const short kwxCursorQuestionArrow = 8;
947 const short kwxCursorRightArrow = 9;
948 const short kwxCursorSizeNS = 10;
949 const short kwxCursorSize = 11;
950 const short kwxCursorSizeNESW = 12;
951 const short kwxCursorSizeNWSE = 13;
952 const short kwxCursorRoller = 14;
953 const short kwxCursorWatch = 15;
954 const short kwxCursorLast = kwxCursorWatch;
955 
956 // exposing our fallback cursor map
957 
958 extern ClassicCursor gMacCursors[];
959 
960 //
961 //
962 //
963 
964 #if wxUSE_GUI
965 
966 class wxNonOwnedWindowCarbonImpl : public wxNonOwnedWindowImpl
967 {
968 public :
969     wxNonOwnedWindowCarbonImpl( wxNonOwnedWindow* nonownedwnd) ;
970 
971     wxNonOwnedWindowCarbonImpl();
972     virtual ~wxNonOwnedWindowCarbonImpl();
973 
974     virtual void WillBeDestroyed() ;
975     void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
976     long style, long extraStyle, const wxString& name ) ;
977     void Create( wxWindow* parent, WXWindow nativeWindow );
978 
979     WXWindow GetWXWindow() const;
980     void Raise();
981     void Lower();
982     bool Show(bool show);
983     bool ShowWithEffect(bool show, wxShowEffect effect, unsigned timeout);
984 
985 
986     void Update();
987     bool SetTransparent(wxByte alpha);
988     bool SetBackgroundColour(const wxColour& col );
989     void SetExtraStyle( long exStyle );
990     bool SetBackgroundStyle(wxBackgroundStyle style);
991     bool CanSetTransparent();
992     void MoveWindow(int x, int y, int width, int height);
993     void GetPosition( int &x, int &y ) const;
994     void GetSize( int &width, int &height ) const;
995     void GetContentArea( int &left , int &top , int &width , int &height ) const;
996 
997     bool SetShape(const wxRegion& region);
998 
999     virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
1000 
1001     virtual bool IsMaximized() const;
1002 
1003     virtual bool IsIconized() const;
1004 
1005     virtual void Iconize( bool iconize );
1006 
1007     virtual void Maximize(bool maximize);
1008 
1009     virtual bool IsFullScreen() const;
1010 
1011     virtual bool ShowFullScreen(bool show, long style);
1012 
1013     virtual void ShowWithoutActivating();
1014 
1015     virtual void RequestUserAttention(int flags);
1016 
1017     virtual void ScreenToWindow( int *x, int *y );
1018 
1019     virtual void WindowToScreen( int *x, int *y );
1020     virtual bool IsActive();
1021 
1022 
1023     bool MacGetUnifiedAppearance() const ;
1024     void MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear ) ;
1025     wxUint32 MacGetWindowAttributes() const ;
1026     void MacSetMetalAppearance( bool set ) ;
1027     bool MacGetMetalAppearance() const ;
1028     void MacSetUnifiedAppearance( bool set );
1029 
MacGetEventHandler()1030     WXEVENTHANDLERREF    MacGetEventHandler() { return m_macEventHandler ; }
1031 
GetWXPeer()1032     wxNonOwnedWindow*   GetWXPeer() { return m_wxPeer; }
1033 protected :
1034     void                MacInstallTopLevelWindowEventHandler();
1035 
1036     WXEVENTHANDLERREF   m_macEventHandler ;
1037     WindowRef           m_macWindow;
1038     void *              m_macFullScreenData ;
1039     DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCarbonImpl)
1040 };
1041 
1042 #endif // wxUSE_GUI
1043 
1044 #endif
1045     // _WX_PRIVATE_H_
1046