X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6d4c54a7680f240153033f44e233c20b53ec6043..d6906a06a24cf6dd081f1bc955c3255765a0b845:/include/wx/mac/carbon/private.h diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index 111d868f19..11605d0727 100644 --- a/include/wx/mac/carbon/private.h +++ b/include/wx/mac/carbon/private.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: private.h +// Name: wx/mac/carbon/private.h // Purpose: Private declarations: as this header is only included by // wxWidgets itself, it may contain identifiers which don't start // with "wx". @@ -15,479 +15,1050 @@ #define _WX_PRIVATE_H_ #include "wx/defs.h" -#include "wx/app.h" - -#ifdef __DARWIN__ -# include -#else -# include -# include -# include -# include -# include -# include -# include -# include -#endif -#if UNIVERSAL_INTERFACES_VERSION < 0x0340 - #error "please update to Apple's lastest universal headers from http://developer.apple.com/sdk/" -#endif +#include + +#include "wx/mac/corefoundation/cfstring.h" +#include "wx/mac/corefoundation/cfdataref.h" -#ifndef MAC_OS_X_VERSION_10_3 - #define MAC_OS_X_VERSION_10_3 1030 +#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +typedef UInt32 URefCon; +typedef SInt32 SRefCon; #endif #if wxUSE_GUI -#include "wx/window.h" +#include "wx/listbox.h" +#include "wx/mac/carbon/dc.h" +#include "wx/mac/carbon/dcclient.h" +#include "wx/mac/carbon/dcmemory.h" -class wxMacPortStateHelper +class WXDLLEXPORT wxMacCGContextStateSaver { - DECLARE_NO_COPY_CLASS(wxMacPortStateHelper) - -public: - wxMacPortStateHelper( GrafPtr newport) ; - wxMacPortStateHelper() ; - ~wxMacPortStateHelper() ; - - void Setup( GrafPtr newport ) ; - void Clear() ; - bool IsCleared() { return m_clip == NULL ; } - GrafPtr GetCurrentPort() { return m_currentPort ; } + DECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver) -private: - GrafPtr m_currentPort ; - GrafPtr m_oldPort ; - RgnHandle m_clip ; - ThemeDrawingState m_drawingState ; - short m_textFont ; - short m_textSize ; - short m_textStyle ; - short m_textMode ; -} ; - -class WXDLLEXPORT wxMacPortSaver -{ - DECLARE_NO_COPY_CLASS(wxMacPortSaver) - public: - wxMacPortSaver( GrafPtr port ) + wxMacCGContextStateSaver( CGContextRef cg ) { - ::GetPort( &m_port ) ; - ::SetPort( port ) ; + m_cg = cg; + CGContextSaveGState( cg ); } - ~wxMacPortSaver() + ~wxMacCGContextStateSaver() { - ::SetPort( m_port ) ; + CGContextRestoreGState( m_cg ); } -private : - GrafPtr m_port ; -} ; - -class WXDLLEXPORT wxMacPortSetter -{ - DECLARE_NO_COPY_CLASS(wxMacPortSetter) - -public: - wxMacPortSetter( const wxDC* dc ) ; - ~wxMacPortSetter() ; private: - wxMacPortStateHelper m_ph ; - const wxDC* m_dc ; -} ; - -/* - Clips to the visible region of a control within the current port - */ - -class WXDLLEXPORT wxMacWindowClipper : public wxMacPortSaver -{ - DECLARE_NO_COPY_CLASS(wxMacWindowClipper) - -public: - wxMacWindowClipper( const wxWindow* win ) ; - ~wxMacWindowClipper() ; -private: - GrafPtr m_newPort ; - RgnHandle m_formerClip ; - RgnHandle m_newClip ; -} ; - -class WXDLLEXPORT wxMacWindowStateSaver : public wxMacWindowClipper -{ - DECLARE_NO_COPY_CLASS(wxMacWindowStateSaver) - -public: - wxMacWindowStateSaver( const wxWindow* win ) ; - ~wxMacWindowStateSaver() ; -private: - GrafPtr m_newPort ; - ThemeDrawingState m_themeDrawingState ; -} ; - -/* -class wxMacDrawingHelper -{ - DECLARE_NO_COPY_CLASS(wxMacDrawingHelper) - -public: - wxMacDrawingHelper( wxWindowMac * theWindow , bool clientArea = false ) ; - ~wxMacDrawingHelper() ; - bool Ok() { return m_ok ; } - void LocalToWindow( Rect *rect) { OffsetRect( rect , m_origin.h , m_origin.v ) ; } - void LocalToWindow( Point *pt ) { AddPt( m_origin , pt ) ; } - void LocalToWindow( RgnHandle rgn ) { OffsetRgn( rgn , m_origin.h , m_origin.v ) ; } - const Point& GetOrigin() { return m_origin ; } -private: - Point m_origin ; - GrafPtr m_formerPort ; - GrafPtr m_currentPort ; - PenState m_savedPenState ; - bool m_ok ; -} ; -*/ + CGContextRef m_cg; +}; // app.h -bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec) ; + +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 +bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec); +#endif #endif // wxUSE_GUI // filefn.h -WXDLLEXPORT wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) ; -WXDLLEXPORT void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) ; -WXDLLEXPORT void wxMacFilename2FSSpec( const wxChar *path , FSSpec *spec ) ; -# ifndef __DARWIN__ -// Mac file names are POSIX (Unix style) under Darwin, so these are not needed -WXDLLEXPORT wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) ; -WXDLLEXPORT void wxUnixFilename2FSSpec( const char *path , FSSpec *spec ) ; -WXDLLEXPORT wxString wxMac2UnixFilename( const char *s) ; -WXDLLEXPORT wxString wxUnix2MacFilename( const char *s); -# endif +WXDLLIMPEXP_BASE wxString wxMacFSSpec2MacFilename( const FSSpec *spec ); +WXDLLIMPEXP_BASE void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec ); // utils.h -WXDLLEXPORT wxString wxMacFindFolder(short vRefNum, - OSType folderType, - Boolean createFolder); - -#if wxUSE_GUI - -GWorldPtr wxMacCreateGWorld( int width , int height , int depth ) ; -void wxMacDestroyGWorld( GWorldPtr gw ) ; -PicHandle wxMacCreatePict( GWorldPtr gw , GWorldPtr mask = NULL ) ; -CIconHandle wxMacCreateCIcon(GWorldPtr image , GWorldPtr mask , short dstDepth , short iconSize ) ; -void wxMacSetColorTableEntry( CTabHandle newColors , int index , int red , int green , int blue ) ; -CTabHandle wxMacCreateColorTable( int numColors ) ; -void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 ) ; - -#define MAC_WXCOLORREF(a) (*((RGBColor*)&(a))) -#define MAC_WXHBITMAP(a) (GWorldPtr(a)) -#define MAC_WXHMETAFILE(a) (PicHandle(a)) -#define MAC_WXHICON(a) (CIconHandle(a)) -#define MAC_WXHCURSOR(a) (CursHandle(a)) -#define MAC_WXHRGN(a) (RgnHandle(a)) -#define MAC_WXHWND(a) (WindowPtr(a)) -#define MAC_WXRECPTR(a) ((Rect*)a) -#define MAC_WXPOINTPTR(a) ((Point*)a) -#define MAC_WXHMENU(a) ((MenuHandle)a) +WXDLLIMPEXP_BASE wxString wxMacFindFolderNoSeparator(short vRefNum, + OSType folderType, + Boolean createFolder); +WXDLLIMPEXP_BASE wxString wxMacFindFolder(short vRefNum, + OSType folderType, + Boolean createFolder); -struct wxOpaqueWindowRef -{ - wxOpaqueWindowRef( WindowRef ref ) { m_data = ref ; } - operator WindowRef() { return m_data ; } -private : - WindowRef m_data ; -} ; - -wxWindow * wxFindControlFromMacControl(ControlRef inControl ) ; -wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow ) ; -wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef) ; - -extern wxWindow* g_MacLastWindow ; -pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) ; -Rect wxMacGetBoundsForControl( wxWindow* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true ) ; - -template EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ) ; return 0 ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeQDRgnHandle ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeControlRef ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeWindowRef ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeMenuRef ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeEventRef ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeQDPoint ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeQDRectangle ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeBoolean ; } -#if TARGET_API_MAC_OSX -template<> inline EventParamType wxMacGetEventParamType() { return typeHICommand ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeHIPoint ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeHISize ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeHIRect ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeVoidPtr ; } -#endif -template<> inline EventParamType wxMacGetEventParamType() { return typeCollection ; } -template<> inline EventParamType wxMacGetEventParamType() { return typeCGContextRef ; } +template EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ); return 0; } +template<> inline EventParamType wxMacGetEventParamType() { return typeQDRgnHandle; } +template<> inline EventParamType wxMacGetEventParamType() { return typeControlRef; } +template<> inline EventParamType wxMacGetEventParamType() { return typeWindowRef; } +template<> inline EventParamType wxMacGetEventParamType() { return typeMenuRef; } +template<> inline EventParamType wxMacGetEventParamType() { return typeEventRef; } +template<> inline EventParamType wxMacGetEventParamType() { return typeQDPoint; } +template<> inline EventParamType wxMacGetEventParamType() { return typeQDRectangle; } +template<> inline EventParamType wxMacGetEventParamType() { return typeBoolean; } +template<> inline EventParamType wxMacGetEventParamType() { return typeSInt16; } +template<> inline EventParamType wxMacGetEventParamType() { return typeSInt32; } +template<> inline EventParamType wxMacGetEventParamType() { return typeUInt32; } +template<> inline EventParamType wxMacGetEventParamType() { return typeRGBColor; } +template<> inline EventParamType wxMacGetEventParamType() { return typeHICommand; } +template<> inline EventParamType wxMacGetEventParamType() { return typeHIPoint; } +template<> inline EventParamType wxMacGetEventParamType() { return typeHISize; } +template<> inline EventParamType wxMacGetEventParamType() { return typeHIRect; } +template<> inline EventParamType wxMacGetEventParamType() { return typeVoidPtr; } +template<> inline EventParamType wxMacGetEventParamType() { return typeCFDictionaryRef; } +template<> inline EventParamType wxMacGetEventParamType() { return typeCollection; } +template<> inline EventParamType wxMacGetEventParamType() { return typeCGContextRef; } /* -These are ambiguous -template<> EventParamType wxMacGetEventParamType() { return typeGrafPtr ; } -template<> EventParamType wxMacGetEventParamType() { return typeOSStatus ; } -template<> EventParamType wxMacGetEventParamType() { return typeCFIndex ; } -template<> EventParamType wxMacGetEventParamType() { return typeGWorldPtr ; } -*/ + These are ambiguous + template<> EventParamType wxMacGetEventParamType() { return typeGrafPtr; } + template<> EventParamType wxMacGetEventParamType() { return typeOSStatus; } + template<> EventParamType wxMacGetEventParamType() { return typeCFIndex; } + template<> EventParamType wxMacGetEventParamType() { return typeGWorldPtr; } + */ class wxMacCarbonEvent { - + public : - wxMacCarbonEvent( EventRef event , bool release = false ) + wxMacCarbonEvent() + { + m_eventRef = 0; + m_release = false; + } + + wxMacCarbonEvent( EventRef event , bool release = false ) { - m_eventRef = event ; - m_release = release ; + m_eventRef = event; + m_release = release; } - wxMacCarbonEvent(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) + + wxMacCarbonEvent(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) { - m_eventRef = NULL ; - verify_noerr( MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef) ) ; - m_release = true ; + m_eventRef = NULL; + verify_noerr( MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef) ); + m_release = true; } + ~wxMacCarbonEvent() { if ( m_release ) - ReleaseEvent( m_eventRef ) ; + ReleaseEvent( m_eventRef ); } - - OSStatus GetParameter( EventParamName inName, EventParamType inDesiredType, UInt32 inBufferSize, void * outData) ; - + + OSStatus Create(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone) + { + verify( (m_eventRef == NULL) || m_release ); + if ( m_eventRef && m_release ) + { + ReleaseEvent( m_eventRef ); + m_release = false; + m_eventRef = NULL; + } + OSStatus err = MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef); + if ( err == noErr ) + m_release = true; + return err; + } + + OSStatus GetParameter( EventParamName inName, EventParamType inDesiredType, UInt32 inBufferSize, void * outData); + template OSStatus GetParameter( EventParamName inName, EventParamType type , T *data ) { - return GetParameter( inName, type , sizeof( T ) , data ) ; + return GetParameter( inName, type , sizeof( T ) , data ); } template OSStatus GetParameter( EventParamName inName, T *data ) { - return GetParameter( inName, wxMacGetEventParamType() , data ) ; + return GetParameter( inName, wxMacGetEventParamType() , data ); } - + template T GetParameter( EventParamName inName ) { - T value ; - verify_noerr( GetParameter( inName, &value ) ) ; - return value ; + T value; + verify_noerr( GetParameter( inName, &value ) ); + return value; } template T GetParameter( EventParamName inName, EventParamType inDesiredType ) { - T value ; - verify_noerr( GetParameter( inName, inDesiredType , &value ) ) ; - return value ; + T value; + verify_noerr( GetParameter( inName, inDesiredType , &value ) ); + return value; } - OSStatus SetParameter( EventParamName inName, EventParamType inType, UInt32 inSize, const void * inData) ; + OSStatus SetParameter( EventParamName inName, EventParamType inType, UInt32 inSize, const void * inData); template OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T *data ) { - return SetParameter( inName, inDesiredType , sizeof( T ) , data ) ; + return SetParameter( inName, inDesiredType , sizeof( T ) , data ); } template OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T& data ) { - return SetParameter( inName, inDesiredType , &data ) ; + return SetParameter( inName, inDesiredType , &data ); } template OSStatus SetParameter( EventParamName inName, const T *data ) { - return SetParameter( inName, wxMacGetEventParamType() , data ) ; + return SetParameter( inName, wxMacGetEventParamType() , data ); } template OSStatus SetParameter( EventParamName inName, const T& data ) { - return SetParameter( inName, wxMacGetEventParamType() , &data ) ; + return SetParameter( inName, wxMacGetEventParamType() , &data ); } UInt32 GetClass() { - return ::GetEventClass( m_eventRef ) ; + return ::GetEventClass( m_eventRef ); } UInt32 GetKind() { - return ::GetEventKind( m_eventRef ) ; + return ::GetEventKind( m_eventRef ); } EventTime GetTime() { - return ::GetEventTime( m_eventRef ) ; + return ::GetEventTime( m_eventRef ); } UInt32 GetTicks() { - return EventTimeToTicks( GetTime() ) ; + return EventTimeToTicks( GetTime() ); } - operator EventRef () { return m_eventRef; } + OSStatus SetCurrentTime( ) + { + return ::SetEventTime( m_eventRef , GetCurrentEventTime() ); + } + OSStatus SetTime( EventTime when ) + { + return ::SetEventTime( m_eventRef , when ); + } + operator EventRef () { return m_eventRef; } + + bool IsValid() { return m_eventRef != 0; } protected : - EventRef m_eventRef ; - bool m_release ; -} ; + EventRef m_eventRef; + bool m_release; +}; + +// +// helper class for allocating and deallocating Universal Proc Ptrs +// -class wxMacControl +template class wxMacUPP { public : - wxMacControl() + wxMacUPP( procType WXUNUSED(proc) ) { - m_controlRef = NULL ; + m_upp = NULL; + m_upp = (*newUPP)( NULL ); } - - wxMacControl( ControlRef control ) + ~wxMacUPP() { - m_controlRef = control ; + if ( m_upp ) + disposeUPP( m_upp ); } - wxMacControl( WXWidget control ) - { - m_controlRef = (ControlRef) control ; - } - - bool Ok() const { return m_controlRef != NULL ; } - - OSStatus SetData( ControlPartCode inPartCode , ResType inTag , Size inSize , const void * inData ) ; - OSStatus GetData( ControlPartCode inPartCode , ResType inTag , Size inBufferSize , void * inOutBuffer , Size * outActualSize ) ; - OSStatus GetDataSize( ControlPartCode inPartCode , ResType inTag , Size * outActualSize ) ; - Size GetDataSize( ControlPartCode inPartCode , ResType inTag ) + operator uppType() { return m_upp; } +private : + uppType m_upp; +}; + +typedef wxMacUPP wxMacNMUPP; + +#if wxUSE_GUI + +class wxMacToolTipTimer ; + +class wxMacToolTip +{ +public : + wxMacToolTip() ; + ~wxMacToolTip() ; + + void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ; + void Draw() ; + void Clear() ; + + long GetMark() + { return m_mark ; } + + bool IsShown() + { return m_shown ; } + +private : + wxString m_label ; + wxPoint m_position ; + Rect m_rect ; + WindowRef m_window ; + PicHandle m_backpict ; + bool m_shown ; + long m_mark ; +#if wxUSE_TIMER + wxMacToolTipTimer* m_timer ; +#endif + wxCFStringRef m_helpTextRef ; +} ; + +// Quartz + +WXDLLIMPEXP_CORE void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 ); +WXDLLIMPEXP_CORE void wxMacReleaseBitmapButton( ControlButtonContentInfo*info ); +WXDLLIMPEXP_CORE CGImageRef wxMacCreateCGImageFromBitmap( const wxBitmap& bitmap ); + +WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithCFData( CFDataRef data ); +WXDLLIMPEXP_CORE CGDataConsumerRef wxMacCGDataConsumerCreateWithCFData( CFMutableDataRef data ); +WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithMemoryBuffer( const wxMemoryBuffer& buf ); + + +#define MAC_WXHBITMAP(a) (GWorldPtr(a)) +#define MAC_WXHMETAFILE(a) (PicHandle(a)) +#define MAC_WXHICON(a) (IconRef(a)) +#define MAC_WXHCURSOR(a) (CursHandle(a)) +#define MAC_WXHRGN(a) (RgnHandle(a)) +#define MAC_WXHWND(a) (WindowPtr(a)) +#define MAC_WXRECPTR(a) ((Rect*)a) +#define MAC_WXPOINTPTR(a) ((Point*)a) +#define MAC_WXHMENU(a) ((MenuHandle)a) + +struct wxOpaqueWindowRef +{ + wxOpaqueWindowRef( WindowRef ref ) { m_data = ref; } + operator WindowRef() { return m_data; } +private : + WindowRef m_data; +}; + +void wxMacRectToNative( const wxRect *wx , Rect *n ); +void wxMacNativeToRect( const Rect *n , wxRect* wx ); +void wxMacPointToNative( const wxPoint* wx , Point *n ); +void wxMacNativeToPoint( const Point *n , wxPoint* wx ); + +WXDLLIMPEXP_CORE wxWindow * wxFindControlFromMacControl(ControlRef inControl ); +WXDLLIMPEXP_CORE wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow ); +WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef); + +WXDLLIMPEXP_CORE int wxMacCommandToId( UInt32 macCommandId ); +WXDLLIMPEXP_CORE UInt32 wxIdToMacCommand( int wxId ); +WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item ); + +extern wxWindow* g_MacLastWindow; +WXDLLIMPEXP_CORE pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data ); +WXDLLIMPEXP_CORE Rect wxMacGetBoundsForControl( wxWindow* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true ); + +ControlActionUPP GetwxMacLiveScrollbarActionProc(); + +// additional optional event defines + +#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +enum { + kEventControlFocusPartChanged = 164 +}; +#endif + +class wxMacControl : public wxObject +{ +public : + wxMacControl( wxWindow* peer , bool isRootControl = false ); + wxMacControl( wxWindow* peer , ControlRef control ); + wxMacControl( wxWindow* peer , WXWidget control ); + wxMacControl() ; + virtual ~wxMacControl(); + + void Init(); + + virtual void Dispose(); + + bool Ok() const { return IsOk(); } + bool IsOk() const { return GetControlRef() != NULL; } + + void SetReferenceInNativeControl(); + static wxMacControl* GetReferenceFromNativeControl(ControlRef control); + + virtual ControlRef * GetControlRefAddr() { return &m_controlRef; } + virtual ControlRef GetControlRef() const { return m_controlRef; } + + virtual void SetReference( URefCon data ); + /* + void operator= (ControlRef c) { m_controlRef = c; } + operator ControlRef () { return m_controlRef; } + operator ControlRef * () { return &m_controlRef; } + */ + // accessing data and values + + virtual OSStatus SetData( ControlPartCode inPartCode , ResType inTag , Size inSize , const void * inData ); + virtual OSStatus GetData( ControlPartCode inPartCode , ResType inTag , Size inBufferSize , void * inOutBuffer , Size * outActualSize ) const; + virtual OSStatus GetDataSize( ControlPartCode inPartCode , ResType inTag , Size * outActualSize ) const; + virtual OSStatus SendEvent( EventRef ref , OptionBits inOptions = 0 ); + virtual OSStatus SendHICommand( HICommand &command , OptionBits inOptions = 0 ); + + virtual OSStatus SendHICommand( UInt32 commandID , OptionBits inOptions = 0 ); + + virtual SInt32 GetValue() const; + virtual SInt32 GetMaximum() const; + virtual SInt32 GetMinimum() const; + + virtual void SetValue( SInt32 v ); + virtual void SetMinimum( SInt32 v ); + virtual void SetMaximum( SInt32 v ); + + virtual void SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum ); + virtual void SetRange( SInt32 minimum , SInt32 maximum ); + + virtual OSStatus SetFocus( ControlFocusPart focusPart ); + virtual bool HasFocus() const; + virtual bool NeedsFocusRect() const; + virtual void SetNeedsFocusRect( bool needs ); + + // templated helpers + + Size GetDataSize( ControlPartCode inPartCode , ResType inTag ) const { - Size sz ; - verify_noerr( GetDataSize( inPartCode , inTag , &sz ) ) ; - return sz ; + Size sz; + verify_noerr( GetDataSize( inPartCode , inTag , &sz ) ); + return sz; } template OSStatus SetData( ControlPartCode inPartCode , ResType inTag , const T *data ) { - return SetData( inPartCode , inTag , sizeof( T ) , data ) ; + return SetData( inPartCode , inTag , sizeof( T ) , data ); } template OSStatus SetData( ControlPartCode inPartCode , ResType inTag , const T& data ) { - return SetData( inPartCode , inTag , sizeof( T ) , &data ) ; + return SetData( inPartCode , inTag , sizeof( T ) , &data ); } - template OSStatus GetData( ControlPartCode inPartCode , ResType inTag , T *data ) + template OSStatus SetData( ResType inTag , const T *data ) { - Size dummy ; - return GetData( inPartCode , inTag , sizeof( T ) , data , &dummy ) ; + return SetData( kControlEntireControl , inTag , sizeof( T ) , data ); } - template T GetData( ControlPartCode inPartCode , ResType inTag ) + template OSStatus SetData( ResType inTag , const T& data ) { - T value ; - verify_noerr( GetData( inPartCode , inTag , &value ) ) ; - return value ; + return SetData( kControlEntireControl , inTag , sizeof( T ) , &data ); } - - OSStatus SendEvent( EventRef ref , OptionBits inOptions = 0 ) ; - OSStatus SendHICommand( HICommand &command , OptionBits inOptions = 0 ) ; - OSStatus SendHICommand( UInt32 commandID , OptionBits inOptions = 0 ) ; - - // Flash the control for the specified amount of time - void Flash( ControlPartCode part , UInt32 ticks = 8 ) ; - - SInt32 GetValue() { return ::GetControl32BitValue( m_controlRef ) ; } - SInt32 GetMaximum() { return ::GetControl32BitMaximum( m_controlRef ) ; } - SInt32 GetMinimum() { return ::GetControl32BitMinimum( m_controlRef ) ; } - - void SetValue( SInt32 v ) { ::SetControl32BitValue( m_controlRef , v ) ; } - void SetMinimum( SInt32 v ) { ::SetControl32BitMinimum( m_controlRef , v ) ; } - void SetMaximum( SInt32 v ) { ::SetControl32BitMaximum( m_controlRef , v ) ; } + template OSStatus GetData( ControlPartCode inPartCode , ResType inTag , T *data ) const + { + Size dummy; + return GetData( inPartCode , inTag , sizeof( T ) , data , &dummy ); + } + template T GetData( ControlPartCode inPartCode , ResType inTag ) const + { + T value; + OSStatus err = GetData( inPartCode , inTag , &value ); - void SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum ) + wxASSERT_MSG( err == noErr, + wxString::Format(wxT("GetData Failed for Part [%i] and Tag [%i]"), + inPartCode, (int)inTag) ); + return value; + } + template OSStatus GetData( ResType inTag , T *data ) const + { + Size dummy; + return GetData( kControlEntireControl , inTag , sizeof( T ) , data , &dummy ); + } + template T GetData( ResType inTag ) const { - ::SetControl32BitMinimum( m_controlRef , minimum ) ; - ::SetControl32BitMaximum( m_controlRef , maximum ) ; - ::SetControl32BitValue( m_controlRef , value ) ; + return GetData( kControlEntireControl , inTag ); } - - void SetRange( SInt32 minimum , SInt32 maximum ) + + // Flash the control for the specified amount of time + virtual void Flash( ControlPartCode part , UInt32 ticks = 8 ); + + virtual void VisibilityChanged( bool shown ); + virtual void SuperChangedPosition(); + + + virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle ); + virtual void SetBackgroundColour( const wxColour& col ); + virtual ControlPartCode HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers ); + void SetActionProc( ControlActionUPP actionProc ); + void SetViewSize( SInt32 viewSize ); + SInt32 GetViewSize() const; + + virtual bool IsVisible() const; + virtual void SetVisibility( bool visible , bool redraw ); + virtual bool IsEnabled() const; + virtual bool IsActive() const; + virtual void Enable( bool enable ); + + // invalidates this control and all children + virtual void InvalidateWithChildren(); + virtual void SetDrawingEnabled( bool enable ); + virtual bool GetNeedsDisplay() const; + + // where is in native window relative coordinates + virtual void SetNeedsDisplay( RgnHandle where ); + // where is in native window relative coordinates + virtual void SetNeedsDisplay( Rect* where = NULL ); + + // if rect = NULL, entire view + virtual void ScrollRect( wxRect *rect , int dx , int dy ); + + // in native parent window relative coordinates + virtual void GetRect( Rect *r ); + + // in native parent window relative coordinates + virtual void SetRect( Rect *r ); + + virtual void GetRectInWindowCoords( Rect *r ); + virtual void GetBestRect( Rect *r ); + virtual void SetLabel( const wxString &title ); + // converts from Toplevel-Content relative to local + static void Convert( wxPoint *pt , wxMacControl *convert , wxMacControl *to ); + + virtual void GetFeatures( UInt32 *features ); + virtual OSStatus GetRegion( ControlPartCode partCode , RgnHandle region ); + virtual OSStatus SetZOrder( bool above , wxMacControl* other ); + + bool IsRootControl() { return m_isRootControl; } + + wxWindow* GetPeer() const { - ::SetControl32BitMinimum( m_controlRef , minimum ) ; - ::SetControl32BitMaximum( m_controlRef , maximum ) ; + return m_peer; } - void operator= (ControlRef c) { m_controlRef = c ; } - operator ControlRef () { return m_controlRef; } - operator ControlRef * () { return &m_controlRef; } + // to be moved into a tab control class + + virtual OSStatus SetTabEnabled( SInt16 tabNo , bool enable ); +protected : + ControlRef m_controlRef; + wxFont m_font; + long m_windowStyle; + wxWindow* m_peer; + bool m_needsFocusRect; + bool m_isRootControl; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacControl) +}; + +// ============================================================================ +// DataBrowser Wrapper +// ============================================================================ +// +// basing on DataBrowserItemIDs +// + +class wxMacDataBrowserControl : public wxMacControl +{ +public : + wxMacDataBrowserControl( wxWindow* peer, const wxPoint& pos, const wxSize& size, long style); + wxMacDataBrowserControl() {} + + OSStatus SetCallbacks( const DataBrowserCallbacks *callbacks ); + + OSStatus GetItemCount( DataBrowserItemID container, + Boolean recurse, + DataBrowserItemState state, + ItemCount *numItems) const; + + OSStatus GetItems( DataBrowserItemID container, + Boolean recurse, + DataBrowserItemState state, + Handle items) const; + + + OSStatus AddColumn( DataBrowserListViewColumnDesc *columnDesc, + DataBrowserTableViewColumnIndex position ); + + OSStatus RemoveColumn( DataBrowserTableViewColumnIndex position ); + + OSStatus AutoSizeColumns(); + + OSStatus SetHasScrollBars( bool horiz, bool vert ); + OSStatus SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle ); + + OSStatus SetHeaderButtonHeight( UInt16 height ); + OSStatus GetHeaderButtonHeight( UInt16 *height ); + + OSStatus UpdateItems( DataBrowserItemID container, UInt32 numItems, + const DataBrowserItemID *items, + DataBrowserPropertyID preSortProperty, + DataBrowserPropertyID propertyID ) const; + + OSStatus AddItems( DataBrowserItemID container, UInt32 numItems, + const DataBrowserItemID *items, + DataBrowserPropertyID preSortProperty ); + OSStatus RemoveItems( DataBrowserItemID container, UInt32 numItems, + const DataBrowserItemID *items, + DataBrowserPropertyID preSortProperty ); + OSStatus RevealItem( DataBrowserItemID item, + DataBrowserPropertyID propertyID, + DataBrowserRevealOptions options ) const; + + OSStatus SetSelectionFlags( DataBrowserSelectionFlags ); + OSStatus GetSelectionAnchor( DataBrowserItemID *first, DataBrowserItemID *last ) const; + bool IsItemSelected( DataBrowserItemID item ) const; + OSStatus SetSelectedItems( UInt32 numItems, + const DataBrowserItemID *items, + DataBrowserSetOption operation ); + + OSStatus GetItemID( DataBrowserTableViewRowIndex row, + DataBrowserItemID * item ) const; + OSStatus GetItemRow( DataBrowserItemID item, + DataBrowserTableViewRowIndex * row ) const; + + OSStatus SetDefaultRowHeight( UInt16 height ); + OSStatus GetDefaultRowHeight( UInt16 * height ) const; + + OSStatus SetRowHeight( DataBrowserItemID item , UInt16 height); + OSStatus GetRowHeight( DataBrowserItemID item , UInt16 *height) const; + + OSStatus GetColumnWidth( DataBrowserPropertyID column , UInt16 *width ) const; + OSStatus SetColumnWidth( DataBrowserPropertyID column , UInt16 width ); + + OSStatus GetDefaultColumnWidth( UInt16 *width ) const; + OSStatus SetDefaultColumnWidth( UInt16 width ); + + OSStatus GetColumnCount( UInt32* numColumns) const; + + OSStatus GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id ); + + OSStatus GetColumnPosition( DataBrowserPropertyID column, DataBrowserTableViewColumnIndex *position) const; + OSStatus SetColumnPosition( DataBrowserPropertyID column, DataBrowserTableViewColumnIndex position); + + OSStatus GetScrollPosition( UInt32 *top , UInt32 *left ) const; + OSStatus SetScrollPosition( UInt32 top , UInt32 left ); + + OSStatus GetSortProperty( DataBrowserPropertyID *column ) const; + OSStatus SetSortProperty( DataBrowserPropertyID column ); + + OSStatus GetSortOrder( DataBrowserSortOrder *order ) const; + OSStatus SetSortOrder( DataBrowserSortOrder order ); + + OSStatus GetPropertyFlags( DataBrowserPropertyID property, DataBrowserPropertyFlags *flags ) const; + OSStatus SetPropertyFlags( DataBrowserPropertyID property, DataBrowserPropertyFlags flags ); + + OSStatus GetHeaderDesc( DataBrowserPropertyID property, DataBrowserListViewHeaderDesc *desc ) const; + OSStatus SetHeaderDesc( DataBrowserPropertyID property, DataBrowserListViewHeaderDesc *desc ); + + OSStatus SetDisclosureColumn( DataBrowserPropertyID property , Boolean expandableRows ); +protected : + + static pascal void DataBrowserItemNotificationProc( + ControlRef browser, + DataBrowserItemID itemID, + DataBrowserItemNotification message, + DataBrowserItemDataRef itemData ); + + virtual void ItemNotification( + DataBrowserItemID itemID, + DataBrowserItemNotification message, + DataBrowserItemDataRef itemData) = 0; + + static pascal OSStatus DataBrowserGetSetItemDataProc( + ControlRef browser, + DataBrowserItemID itemID, + DataBrowserPropertyID property, + DataBrowserItemDataRef itemData, + Boolean changeValue ); + + virtual OSStatus GetSetItemData( + DataBrowserItemID itemID, + DataBrowserPropertyID property, + DataBrowserItemDataRef itemData, + Boolean changeValue ) = 0; + + static pascal Boolean DataBrowserCompareProc( + ControlRef browser, + DataBrowserItemID itemOneID, + DataBrowserItemID itemTwoID, + DataBrowserPropertyID sortProperty); + + virtual Boolean CompareItems(DataBrowserItemID itemOneID, + DataBrowserItemID itemTwoID, + DataBrowserPropertyID sortProperty) = 0; + DECLARE_ABSTRACT_CLASS(wxMacDataBrowserControl) +}; + +// ============================================================================ +// Higher-level Databrowser +// ============================================================================ +// +// basing on data item objects +// + +// forward decl + +class wxMacDataItemBrowserControl; +class wxMacListBoxItem; + +const DataBrowserPropertyID kTextColumnId = 1024; +const DataBrowserPropertyID kNumericOrderColumnId = 1025; + +// for multi-column controls, we will use this + the column ID to identify the +// column. We don't use kTextColumnId there, and ideally the two should merge. +const DataBrowserPropertyID kMinColumnId = 1050; + +// base API for high-level databrowser operations + +class wxMacListControl +{ +public: + virtual void MacDelete( unsigned int n ) = 0; + virtual void MacInsert( unsigned int n, const wxArrayStringsAdapter& items, int column = -1 ) = 0; + // returns index of newly created line + virtual int MacAppend( const wxString& item ) = 0; + virtual void MacSetString( unsigned int n, const wxString& item ) = 0; + virtual void MacClear() = 0; + virtual void MacDeselectAll() = 0; + virtual void MacSetSelection( unsigned int n, bool select, bool multi ) = 0; + virtual int MacGetSelection() const = 0; + virtual int MacGetSelections( wxArrayInt& aSelections ) const = 0; + virtual bool MacIsSelected( unsigned int n ) const = 0; + virtual void MacScrollTo( unsigned int n ) = 0; + virtual wxString MacGetString( unsigned int n) const = 0; + virtual unsigned int MacGetCount() const = 0; + + virtual void MacSetClientData( unsigned int n, void * data) = 0; + virtual void * MacGetClientData( unsigned int) const = 0; + + virtual ~wxMacListControl() { } +}; + +// base class for databrowser items + +enum DataItemType { + DataItem_Text +}; + +class wxMacDataItem +{ +public : + wxMacDataItem(); + virtual ~wxMacDataItem(); + + virtual bool IsLessThan(wxMacDataItemBrowserControl *owner , + const wxMacDataItem*, + DataBrowserPropertyID property) const; + + // returns true if access was successful, otherwise false + virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner , + DataBrowserPropertyID property, + DataBrowserItemDataRef itemData, + bool changeValue ); + + virtual void Notification(wxMacDataItemBrowserControl *owner , + DataBrowserItemNotification message, + DataBrowserItemDataRef itemData ) const; + + void SetLabel( const wxString& str); + const wxString& GetLabel() const; + + void SetOrder( SInt32 order ); + SInt32 GetOrder() const; + + void SetData( void* data); + void* GetData() const; + + void SetColumn( short col ); + short GetColumn(); + protected : - ControlRef m_controlRef ; + wxString m_label; + wxCFStringRef m_cfLabel; + void * m_data; + SInt32 m_order; + DataBrowserPropertyID m_colId; + +}; + +enum ListSortOrder { + SortOrder_None, + SortOrder_Text_Ascending, + SortOrder_Text_Descending +}; + +typedef wxMacDataItem* wxMacDataItemPtr; +const wxMacDataItemPtr wxMacDataBrowserRootContainer = NULL; + +WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxMacDataItemPtr, wxArrayMacDataItemPtr, class WXDLLIMPEXP_CORE); + +class wxMacDataItemBrowserControl : public wxMacDataBrowserControl, public wxMacListControl +{ +public : + wxMacDataItemBrowserControl( wxWindow* peer , const wxPoint& pos, const wxSize& size, long style); + wxMacDataItemBrowserControl() {} + // create a list item (can be a subclass of wxMacListBoxItem) + + virtual wxMacDataItem* CreateItem(); + + unsigned int GetItemCount(const wxMacDataItem* container, bool recurse , DataBrowserItemState state) const; + void GetItems(const wxMacDataItem* container, bool recurse , + DataBrowserItemState state, wxArrayMacDataItemPtr &items ) const; + + unsigned int GetSelectedItemCount( const wxMacDataItem* container, bool recurse ) const; + + unsigned int GetLineFromItem(const wxMacDataItem *item) const; + wxMacDataItem * GetItemFromLine(unsigned int n) const; + + void UpdateItem(const wxMacDataItem *container, const wxMacDataItem *item, + DataBrowserPropertyID property) const; + void UpdateItems(const wxMacDataItem *container, wxArrayMacDataItemPtr &items, + DataBrowserPropertyID property) const; + + void InsertColumn(int colId, DataBrowserPropertyType colType, + const wxString& title, SInt16 just = teFlushDefault, int defaultWidth = -1); + + int GetColumnWidth(int colId); + void SetColumnWidth(int colId, int width); + + void AddItem(wxMacDataItem *container, wxMacDataItem *item); + void AddItems(wxMacDataItem *container, wxArrayMacDataItemPtr &items ); + + void RemoveAllItems(wxMacDataItem *container); + void RemoveItem(wxMacDataItem *container, wxMacDataItem* item); + void RemoveItems(wxMacDataItem *container, wxArrayMacDataItemPtr &items); + + void SetSelectedItem( wxMacDataItem* item , DataBrowserSetOption option); + void SetSelectedItems( wxArrayMacDataItemPtr &items , DataBrowserSetOption option); + void SetSelectedAllItems( DataBrowserSetOption option); + Boolean IsItemSelected( const wxMacDataItem* item) const; + + void RevealItem( wxMacDataItem* item, DataBrowserRevealOptions options); + + void GetSelectionAnchor( wxMacDataItemPtr* first , wxMacDataItemPtr* last) const; + + // item aware methods, to be used in subclasses + + virtual Boolean CompareItems(const wxMacDataItem* itemOneID, + const wxMacDataItem* itemTwoID, + DataBrowserPropertyID sortProperty); + + virtual OSStatus GetSetItemData(wxMacDataItem* itemID, + DataBrowserPropertyID property, + DataBrowserItemDataRef itemData, + Boolean changeValue ); + + virtual void ItemNotification( + const wxMacDataItem* itemID, + DataBrowserItemNotification message, + DataBrowserItemDataRef itemData); + + // as we are getting the same events for human and API selection we have to suppress + // events in the latter case, since this will be used from many subclasses we keep it here + + bool IsSelectionSuppressed() const { return m_suppressSelection; } + bool SuppressSelection( bool suppress ); + + + // wxMacListControl Methods + // add and remove + + virtual void MacDelete( unsigned int n ); + virtual void MacInsert( unsigned int n, const wxArrayStringsAdapter& items, int column = -1 ); + virtual int MacAppend( const wxString& item ); + virtual void MacClear(); + + // selecting + + virtual void MacDeselectAll(); + virtual void MacSetSelection( unsigned int n, bool select, bool multi = false ); + virtual int MacGetSelection() const; + virtual int MacGetSelections( wxArrayInt& aSelections ) const; + virtual bool MacIsSelected( unsigned int n ) const; + + // display + + virtual void MacScrollTo( unsigned int n ); + + // accessing content + + virtual void MacSetString( unsigned int n, const wxString& item ); + virtual void MacSetClientData( unsigned int n, void * data); + virtual wxString MacGetString( unsigned int n) const; + virtual void * MacGetClientData( unsigned int) const; + virtual unsigned int MacGetCount() const; + + // client data + + virtual wxClientDataType GetClientDataType() const; + virtual void SetClientDataType(wxClientDataType clientDataItemsType); + //virtual ListSortOrder GetSortOrder() const; + //virtual void SetSortOrder(const ListSortOrder sort); + + + +protected: + + ListSortOrder m_sortOrder; + wxClientDataType m_clientDataItemsType; + + // ID aware base methods, should be 'final' ie not changed in subclasses + + virtual Boolean CompareItems(DataBrowserItemID itemOneID, + DataBrowserItemID itemTwoID, + DataBrowserPropertyID sortProperty); + + virtual OSStatus GetSetItemData(DataBrowserItemID itemID, + DataBrowserPropertyID property, + DataBrowserItemDataRef itemData, + Boolean changeValue ); + + virtual void ItemNotification( + DataBrowserItemID itemID, + DataBrowserItemNotification message, + DataBrowserItemDataRef itemData); + + +private : + + bool m_suppressSelection; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataItemBrowserControl) +}; + +class wxMacDataItemBrowserSelectionSuppressor +{ +public : + wxMacDataItemBrowserSelectionSuppressor(wxMacDataItemBrowserControl *browser); + ~wxMacDataItemBrowserSelectionSuppressor(); + +private : + + bool m_former; + wxMacDataItemBrowserControl* m_browser; +}; + +// ============================================================================ +// platform listbox implementation +// ============================================================================ + +// exposed for reuse in wxCheckListBox + +class wxMacListBoxItem : public wxMacDataItem +{ +public : + wxMacListBoxItem(); + + virtual ~wxMacListBoxItem(); + + virtual void Notification(wxMacDataItemBrowserControl *owner , + DataBrowserItemNotification message, + DataBrowserItemDataRef itemData ) const; +}; + +class wxMacDataBrowserListControl : public wxMacDataItemBrowserControl +{ +public: + wxMacDataBrowserListControl( wxWindow *peer, const wxPoint& pos, const wxSize& size, long style ); + wxMacDataBrowserListControl() {} + virtual ~wxMacDataBrowserListControl(); + + virtual wxMacDataItem* CreateItem(); + + // pointing back + + wxWindow * GetPeer() const; + + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserListControl) +}; + +// ============================================================================ +// graphics implementation +// ============================================================================ + +// draw the image 'upside down' corrected as HIViewDrawCGImage does + +OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage( + CGContextRef inContext, + const HIRect * inBounds, + CGImageRef inImage) ; + +CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ; + +CGColorSpaceRef WXDLLIMPEXP_CORE wxMacGetGenericRGBColorSpace(void); + +// toplevel.cpp + +class wxMacDeferredWindowDeleter : public wxObject +{ +public : + wxMacDeferredWindowDeleter( WindowRef windowRef ); + virtual ~wxMacDeferredWindowDeleter(); + +protected : + WindowRef m_macWindow ; } ; #endif // wxUSE_GUI +#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \ +UPP Get##x() \ +{ \ + static UPP sHandler = NULL; \ + if ( sHandler == NULL ) \ + sHandler = New##UPP( x ); \ + return sHandler; \ +} + //--------------------------------------------------------------------------- // wxMac string conversions //--------------------------------------------------------------------------- -void wxMacSetupConverters() ; -void wxMacCleanupConverters() ; +void wxMacSetupConverters(); +void wxMacCleanupConverters(); -void wxMacStringToPascal( const wxString&from , StringPtr to ) ; -wxString wxMacMakeStringFromPascal( ConstStringPtr from ) ; +WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to ); +WXDLLIMPEXP_BASE wxString wxMacMakeStringFromPascal( ConstStringPtr from ); -void wxMacConvertNewlines13To10( char * data ) ; -void wxMacConvertNewlines10To13( char * data ) ; -void wxMacConvertNewlines13To10( wxString *data ) ; -void wxMacConvertNewlines10To13( wxString *data ) ; +// filefn.cpp -#if wxUSE_UNICODE -void wxMacConvertNewlines13To10( wxChar * data ) ; -void wxMacConvertNewlines10To13( wxChar * data ) ; -#endif +WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ); +WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); +WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); -#if TARGET_CARBON - -class wxMacCFStringHolder -{ -public: - wxMacCFStringHolder() - { - m_cfs = NULL ; - m_release = false ; - } - - wxMacCFStringHolder(const wxString &str , wxFontEncoding encoding ) - { - m_cfs = NULL ; - m_release = false ; - Assign( str , encoding ) ; - } - - wxMacCFStringHolder(CFStringRef ref , bool release = true ) - { - m_cfs = ref ; - m_release = release ; - } - - ~wxMacCFStringHolder() - { - Release() ; - } - - CFStringRef Detach() - { - CFStringRef retval = m_cfs ; - m_release = false ; - m_cfs = NULL ; - return retval ; - } - - void Release() - { - if ( m_release && m_cfs) - CFRelease( m_cfs ) ; - m_cfs = NULL ; - } - - void Assign( const wxString &str , wxFontEncoding encoding ) ; - - operator CFStringRef () { return m_cfs; } - wxString AsString( wxFontEncoding encoding = wxFONTENCODING_DEFAULT ) ; - -private: - - CFStringRef m_cfs; - bool m_release ; -} ; +#if wxUSE_GUI + +// deprecating QD + +void wxMacLocalToGlobal( WindowRef window , Point*pt ); +void wxMacGlobalToLocal( WindowRef window , Point*pt ); #endif -// utils.cpp +//--------------------------------------------------------------------------- +// cocoa bridging utilities +//--------------------------------------------------------------------------- + +bool wxMacInitCocoa(); + +class wxMacAutoreleasePool +{ +public : + wxMacAutoreleasePool(); + ~wxMacAutoreleasePool(); +private : + void* m_pool; +}; + +// NSObject -wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding) ; -wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding) ; -void wxMacWakeUp() ; +void wxMacCocoaRelease( void* obj ); +void wxMacCocoaAutorelease( void* obj ); +void wxMacCocoaRetain( void* obj ); -// toplevel.cpp +#if wxMAC_USE_COCOA + +// NSCursor + +WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type ); +WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY ); +void wxMacCocoaSetCursor( WX_NSCursor cursor ); +void wxMacCocoaHideCursor(); +void wxMacCocoaShowCursor(); + +typedef struct tagClassicCursor +{ + wxUint16 bits[16]; + wxUint16 mask[16]; + wxInt16 hotspot[2]; +}ClassicCursor; + +#else // !wxMAC_USE_COCOA + +// non Darwin + +typedef Cursor ClassicCursor; + +#endif // wxMAC_USE_COCOA + +// ------------- +// Common to all +// ------------- + +// Cursor support + +const short kwxCursorBullseye = 0; +const short kwxCursorBlank = 1; +const short kwxCursorPencil = 2; +const short kwxCursorMagnifier = 3; +const short kwxCursorNoEntry = 4; +const short kwxCursorPaintBrush = 5; +const short kwxCursorPointRight = 6; +const short kwxCursorPointLeft = 7; +const short kwxCursorQuestionArrow = 8; +const short kwxCursorRightArrow = 9; +const short kwxCursorSizeNS = 10; +const short kwxCursorSize = 11; +const short kwxCursorSizeNESW = 12; +const short kwxCursorSizeNWSE = 13; +const short kwxCursorRoller = 14; +const short kwxCursorLast = kwxCursorRoller; + +// exposing our fallback cursor map -ControlRef wxMacFindControlUnderMouse( Point location , WindowRef window , ControlPartCode *outPart ) ; +extern ClassicCursor gMacCursors[]; #endif // _WX_PRIVATE_H_