X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6cce68eaab1559c5c21dd0ce544090cc18dc8398..9243700fb212c2508c4d4c80fb8eb968e565e44d:/include/wx/mac/carbon/private.h?ds=sidebyside diff --git a/include/wx/mac/carbon/private.h b/include/wx/mac/carbon/private.h index 7e97116a90..69ac83f076 100644 --- a/include/wx/mac/carbon/private.h +++ b/include/wx/mac/carbon/private.h @@ -15,136 +15,24 @@ #define _WX_PRIVATE_H_ #include "wx/defs.h" -#include "wx/app.h" - -#ifdef __DARWIN__ -# include -#else -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -#endif - -#if UNIVERSAL_INTERFACES_VERSION < 0x0342 - #error "please update to Apple's lastest universal headers from http://developer.apple.com/sdk/" -#endif - -#ifndef MAC_OS_X_VERSION_10_3 - #define MAC_OS_X_VERSION_10_3 1030 -#endif -#ifndef MAC_OS_X_VERSION_10_4 - #define MAC_OS_X_VERSION_10_4 1040 -#endif +#include -#ifdef __WXMAC_CARBON__ #include "wx/mac/corefoundation/cfstring.h" -#endif - -#ifndef FixedToInt -// as macro in FixMath.h for 10.3 -inline Fixed IntToFixed( int inInt ) -{ - return (((SInt32) inInt) << 16); -} +#include "wx/mac/corefoundation/cfdataref.h" -inline int FixedToInt( Fixed inFixed ) -{ - return (((SInt32) inFixed) >> 16); -} +#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/dc.h" -#include "wx/window.h" -#include "wx/toplevel.h" - -class wxMacPortStateHelper -{ - 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; } - -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 ); - ~wxMacPortSaver(); -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; -}; +#include "wx/listbox.h" +#include "wx/mac/carbon/dc.h" +#include "wx/mac/carbon/dcclient.h" +#include "wx/mac/carbon/dcmemory.h" -#if wxMAC_USE_CORE_GRAPHICS class WXDLLEXPORT wxMacCGContextStateSaver { DECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver) @@ -163,45 +51,25 @@ private: CGContextRef m_cg; }; -#endif -/* -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; -}; -*/ - // app.h + +#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 wxString &path , FSSpec *spec ); +WXDLLIMPEXP_BASE wxString wxMacFSSpec2MacFilename( const FSSpec *spec ); +WXDLLIMPEXP_BASE void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec ); // utils.h -WXDLLEXPORT wxString wxMacFindFolderNoSeparator(short vRefNum, - OSType folderType, - Boolean createFolder); -WXDLLEXPORT wxString wxMacFindFolder(short vRefNum, - OSType folderType, - Boolean createFolder); +WXDLLIMPEXP_BASE wxString wxMacFindFolderNoSeparator(short vRefNum, + OSType folderType, + Boolean createFolder); +WXDLLIMPEXP_BASE wxString wxMacFindFolder(short vRefNum, + OSType folderType, + Boolean createFolder); template EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ); return 0; } template<> inline EventParamType wxMacGetEventParamType() { return typeQDRgnHandle; } @@ -216,16 +84,12 @@ template<> inline EventParamType wxMacGetEventParamType() { return typeS template<> inline EventParamType wxMacGetEventParamType() { return typeSInt32; } template<> inline EventParamType wxMacGetEventParamType() { return typeUInt32; } template<> inline EventParamType wxMacGetEventParamType() { return typeRGBColor; } -#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 -#if TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2 ) template<> inline EventParamType wxMacGetEventParamType() { return typeCFDictionaryRef; } -#endif template<> inline EventParamType wxMacGetEventParamType() { return typeCollection; } template<> inline EventParamType wxMacGetEventParamType() { return typeCGContextRef; } /* @@ -236,7 +100,7 @@ template<> inline EventParamType wxMacGetEventParamType() { return template<> EventParamType wxMacGetEventParamType() { return typeGWorldPtr; } */ -class wxMacCarbonEvent +class WXDLLEXPORT wxMacCarbonEvent { public : @@ -360,7 +224,7 @@ protected : template class wxMacUPP { public : - wxMacUPP( procType proc ) + wxMacUPP( procType WXUNUSED(proc) ) { m_upp = NULL; m_upp = (*newUPP)( NULL ); @@ -377,71 +241,51 @@ private : typedef wxMacUPP wxMacNMUPP; -template class wxMacCFRefHolder -{ -public : - wxMacCFRefHolder() - : m_ref(NULL) , m_release(false) - { - } - - wxMacCFRefHolder( refType ref , bool release = true ) - : m_ref(ref) , m_release(release) - { - } +#if wxUSE_GUI - ~wxMacCFRefHolder() - { - Release(); - } +class WXDLLIMPEXP_FWD_CORE wxMacToolTipTimer ; - void Release() - { - if ( m_release && m_ref != NULL ) - CFRelease( m_ref ); - m_ref = NULL; - } +class WXDLLEXPORT wxMacToolTip +{ +public : + wxMacToolTip() ; + ~wxMacToolTip() ; - refType Detach() - { - refType val = m_ref; - m_release = false; - m_ref = NULL; - return val; - } + void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ; + void Draw() ; + void Clear() ; - void Set( refType ref , bool release = true ) - { - Release(); - m_release = release; - m_ref = ref; - } + long GetMark() + { return m_mark ; } - operator refType () const { return m_ref; } + bool IsShown() + { return m_shown ; } private : - refType m_ref; - bool m_release; + 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 ; +} ; - DECLARE_NO_COPY_CLASS( wxMacCFRefHolder ) -}; +// Quartz -#if wxUSE_GUI +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 ); -#include "wx/listbox.h" -/* -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 ); -void wxMacReleaseBitmapButton( ControlButtonContentInfo*info ); - -#define MAC_WXCOLORREF(a) (*((RGBColor*)&(a))) #define MAC_WXHBITMAP(a) (GWorldPtr(a)) #define MAC_WXHMETAFILE(a) (PicHandle(a)) #define MAC_WXHICON(a) (IconRef(a)) @@ -460,38 +304,48 @@ 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 void wxMacRectToNative( const wxRect *wx , Rect *n ); +WXDLLIMPEXP_CORE void wxMacNativeToRect( const Rect *n , wxRect* wx ); +WXDLLIMPEXP_CORE void wxMacPointToNative( const wxPoint* wx , Point *n ); +WXDLLIMPEXP_CORE void wxMacNativeToPoint( const Point *n , wxPoint* wx ); -wxWindow * wxFindControlFromMacControl(ControlRef inControl ); -wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow ); -wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef); +WXDLLIMPEXP_CORE wxWindow * wxFindControlFromMacControl(ControlRef inControl ); +WXDLLIMPEXP_CORE wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow ); +WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef); -int wxMacCommandToId( UInt32 macCommandId ); -UInt32 wxIdToMacCommand( int wxId ); -wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item ); +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; -pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data ); -Rect wxMacGetBoundsForControl( wxWindow* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true ); +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(); -class wxMacControl +// additional optional event defines + +#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +enum { + kEventControlFocusPartChanged = 164 +}; +#endif + +class WXDLLEXPORT 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 GetControlRef() != NULL; } + bool Ok() const { return IsOk(); } + bool IsOk() const { return GetControlRef() != NULL; } void SetReferenceInNativeControl(); static wxMacControl* GetReferenceFromNativeControl(ControlRef control); @@ -499,7 +353,7 @@ public : virtual ControlRef * GetControlRefAddr() { return &m_controlRef; } virtual ControlRef GetControlRef() const { return m_controlRef; } - virtual void SetReference( SInt32 data ); + virtual void SetReference( URefCon data ); /* void operator= (ControlRef c) { m_controlRef = c; } operator ControlRef () { return m_controlRef; } @@ -564,9 +418,10 @@ public : { T value; OSStatus err = GetData( inPartCode , inTag , &value ); - - wxASSERT_MSG(err == noErr, wxString::Format(wxT("GetData Failed for Part [%i] and Tag [%i]"), - inPartCode, inTag)); + + 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 @@ -578,7 +433,7 @@ public : { return GetData( kControlEntireControl , inTag ); } - + // Flash the control for the specified amount of time virtual void Flash( ControlPartCode part , UInt32 ticks = 8 ); @@ -587,7 +442,7 @@ public : virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle ); - virtual void SetBackground( const wxBrush &brush ); + virtual void SetBackgroundColour( const wxColour& col ); virtual ControlPartCode HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers ); void SetActionProc( ControlActionUPP actionProc ); void SetViewSize( SInt32 viewSize ); @@ -602,9 +457,8 @@ public : // invalidates this control and all children virtual void InvalidateWithChildren(); virtual void SetDrawingEnabled( bool enable ); -#ifdef __WXMAC_OSX__ virtual bool GetNeedsDisplay() const; -#endif + // where is in native window relative coordinates virtual void SetNeedsDisplay( RgnHandle where ); // where is in native window relative coordinates @@ -628,10 +482,9 @@ public : virtual void GetFeatures( UInt32 *features ); virtual OSStatus GetRegion( ControlPartCode partCode , RgnHandle region ); virtual OSStatus SetZOrder( bool above , wxMacControl* other ); - - bool IsCompositing() { return m_isCompositing; } + bool IsRootControl() { return m_isRootControl; } - + wxWindow* GetPeer() const { return m_peer; @@ -646,8 +499,8 @@ protected : long m_windowStyle; wxWindow* m_peer; bool m_needsFocusRect; - bool m_isCompositing; bool m_isRootControl; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacControl) }; // ============================================================================ @@ -657,32 +510,35 @@ protected : // basing on DataBrowserItemIDs // -class wxMacDataBrowserControl : public wxMacControl +class WXDLLEXPORT 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, - UInt32 *numItems) const; - + 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 ); @@ -690,7 +546,7 @@ public : const DataBrowserItemID *items, DataBrowserPropertyID preSortProperty, DataBrowserPropertyID propertyID ) const; - + OSStatus AddItems( DataBrowserItemID container, UInt32 numItems, const DataBrowserItemID *items, DataBrowserPropertyID preSortProperty ); @@ -708,46 +564,48 @@ public : const DataBrowserItemID *items, DataBrowserSetOption operation ); - OSStatus GetItemID( DataBrowserTableViewRowIndex row, + OSStatus GetItemID( DataBrowserTableViewRowIndex row, DataBrowserItemID * item ) const; - OSStatus GetItemRow( DataBrowserItemID item, + 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 GetColumnPosition( DataBrowserPropertyID column, UInt32 *position) const; - OSStatus SetColumnPosition( DataBrowserPropertyID column, UInt32 position); - + 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, @@ -773,18 +631,19 @@ protected : 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; + 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 +// Higher-level Databrowser // ============================================================================ // // basing on data item objects @@ -793,28 +652,92 @@ protected : // 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 WXDLLEXPORT 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 -class wxMacDataItem +enum DataItemType { + DataItem_Text +}; + +class WXDLLEXPORT wxMacDataItem { public : wxMacDataItem(); virtual ~wxMacDataItem(); - - virtual bool IsLessThan(wxMacDataItemBrowserControl *owner , - const wxMacDataItem*, + + virtual bool IsLessThan(wxMacDataItemBrowserControl *owner , + const wxMacDataItem*, DataBrowserPropertyID property) const; - + // returns true if access was successful, otherwise false - virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner , + virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner , DataBrowserPropertyID property, DataBrowserItemDataRef itemData, bool changeValue ); - virtual void Notification(wxMacDataItemBrowserControl *owner , + 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 : + 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; @@ -822,43 +745,55 @@ const wxMacDataItemPtr wxMacDataBrowserRootContainer = NULL; WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxMacDataItemPtr, wxArrayMacDataItemPtr, class WXDLLIMPEXP_CORE); -class wxMacDataItemBrowserControl : public wxMacDataBrowserControl +class WXDLLEXPORT 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 , + 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, + + void UpdateItem(const wxMacDataItem *container, const wxMacDataItem *item, DataBrowserPropertyID property) const; - void UpdateItems(const wxMacDataItem *container, wxArrayMacDataItemPtr &items, + 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, + + virtual Boolean CompareItems(const wxMacDataItem* itemOneID, + const wxMacDataItem* itemTwoID, DataBrowserPropertyID sortProperty); virtual OSStatus GetSetItemData(wxMacDataItem* itemID, @@ -870,11 +805,60 @@ public : 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, + + virtual Boolean CompareItems(DataBrowserItemID itemOneID, + DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty); virtual OSStatus GetSetItemData(DataBrowserItemID itemID, @@ -887,23 +871,19 @@ public : 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 ); - + private : bool m_suppressSelection; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataItemBrowserControl) }; -class wxMacDataItemBrowserSelectionSuppressor +class WXDLLEXPORT wxMacDataItemBrowserSelectionSuppressor { public : wxMacDataItemBrowserSelectionSuppressor(wxMacDataItemBrowserControl *browser); ~wxMacDataItemBrowserSelectionSuppressor(); - + private : bool m_former; @@ -913,307 +893,172 @@ private : // ============================================================================ // platform listbox implementation // ============================================================================ -// + // exposed for reuse in wxCheckListBox -class wxMacListBoxItem : public wxMacDataItem +class WXDLLEXPORT wxMacListBoxItem : public wxMacDataItem { public : wxMacListBoxItem(); - - virtual ~wxMacListBoxItem(); - - void SetLabel( const wxString& str); - const wxString& GetLabel() const; - - virtual bool IsLessThan(wxMacDataItemBrowserControl *owner , - const wxMacDataItem* rhs, - DataBrowserPropertyID sortProperty) const; - virtual OSStatus GetSetData( wxMacDataItemBrowserControl *owner , - DataBrowserPropertyID property, - DataBrowserItemDataRef itemData, - bool changeValue ); + virtual ~wxMacListBoxItem(); - virtual void Notification(wxMacDataItemBrowserControl *owner , + virtual void Notification(wxMacDataItemBrowserControl *owner , DataBrowserItemNotification message, DataBrowserItemDataRef itemData ) const; - - void SetOrder( SInt32 order ); - SInt32 GetOrder() const; - - void SetData( void* data); - void* GetData() const; - -private : - wxString m_label; - wxMacCFStringHolder m_cfLabel; - void * m_data; - SInt32 m_order; }; -class wxMacDataBrowserListControl : public wxMacDataItemBrowserControl , public wxMacListControl +class WXDLLEXPORT wxMacDataBrowserListControl : public wxMacDataItemBrowserControl { public: - wxMacDataBrowserListControl( wxListBox *peer, const wxPoint& pos, const wxSize& size, long style ); - ~wxMacDataBrowserListControl(); - - // create a list item (can be a subclass of wxMacListBoxItem) - - virtual wxMacListBoxItem* CreateItem(); - - // add and remove - - void MacDelete( unsigned int n ); - void MacInsert( unsigned int n, const wxString& item ); - void MacInsert( unsigned int n, const wxArrayString& items ); - int MacAppend( const wxString& item ); - void MacClear(); - - // selecting - - void MacDeselectAll(); - void MacSetSelection( unsigned int n, bool select ); - int MacGetSelection() const; - int MacGetSelections( wxArrayInt& aSelections ) const; - bool MacIsSelected( unsigned int n ) const; - - // display - - void MacScrollTo( unsigned int n ); - - // accessing content - - void MacSetString( unsigned int n, const wxString& item ); - void MacSetClientData( unsigned int n, void * data); - wxString MacGetString( unsigned int n) const; - void * MacGetClientData( unsigned int) const; - unsigned int MacGetCount() const; - - // client data + wxMacDataBrowserListControl( wxWindow *peer, const wxPoint& pos, const wxSize& size, long style ); + wxMacDataBrowserListControl() {} + virtual ~wxMacDataBrowserListControl(); - wxClientDataType GetClientDataType() const; - void SetClientDataType(wxClientDataType clientDataItemsType); + virtual wxMacDataItem* CreateItem(); // pointing back - wxListBox * GetPeer() const; -private : - bool m_stringSorted; - wxClientDataType m_clientDataItemsType; + wxWindow * GetPeer() const; + + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserListControl) }; // ============================================================================ // graphics implementation // ============================================================================ -#if wxMAC_USE_CORE_GRAPHICS +// draw the image 'upside down' corrected as HIViewDrawCGImage does -class WXDLLEXPORT wxMacCGPath : public wxGraphicPath -{ - DECLARE_NO_COPY_CLASS(wxMacCGPath) -public : - wxMacCGPath(); - ~wxMacCGPath(); +OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage( + CGContextRef inContext, + const HIRect * inBounds, + CGImageRef inImage) ; - // Starts a new subpath at - void MoveToPoint( wxCoord x1 , wxCoord y1 ); - void AddLineToPoint( wxCoord x1 , wxCoord y1 ); - void AddQuadCurveToPoint( wxCoord cx1, wxCoord cy1, wxCoord x1, wxCoord y1 ); - void AddRectangle( wxCoord x, wxCoord y, wxCoord w, wxCoord h ); - void AddCircle( wxCoord x, wxCoord y , wxCoord r ); +CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ; - // closes the current subpath - void CloseSubpath(); +CGColorSpaceRef WXDLLIMPEXP_CORE wxMacGetGenericRGBColorSpace(void); - CGPathRef GetPath() const; -private : - CGMutablePathRef m_path; -}; +// toplevel.cpp -class WXDLLEXPORT wxMacCGContext : public wxGraphicContext +class WXDLLEXPORT wxMacDeferredWindowDeleter : public wxObject { - DECLARE_NO_COPY_CLASS(wxMacCGContext) - -public: - wxMacCGContext( CGrafPtr port ); - wxMacCGContext( CGContextRef cgcontext ); - wxMacCGContext(); - ~wxMacCGContext(); - - virtual void Clip( const wxRegion ®ion ); - virtual void StrokePath( const wxGraphicPath *p ); - virtual void DrawPath( const wxGraphicPath *p , int fillStyle = wxWINDING_RULE ); - virtual void FillPath( const wxGraphicPath *p , const wxColor &fillColor , int fillStyle = wxWINDING_RULE ); - - virtual wxGraphicPath* CreatePath(); - virtual void SetPen( const wxPen &pen ) ; - virtual void SetBrush( const wxBrush &brush ); - CGContextRef GetNativeContext(); - void SetNativeContext( CGContextRef cg ); - CGPathDrawingMode GetDrawingMode() const { return m_mode; } -private: - CGContextRef m_cgContext; - CGrafPtr m_qdPort; - CGPathDrawingMode m_mode; - wxPen m_pen; - wxBrush m_brush; -}; - -#endif // wxMAC_USE_CORE_GRAPHICS +public : + wxMacDeferredWindowDeleter( WindowRef windowRef ); + virtual ~wxMacDeferredWindowDeleter(); -#ifdef __WXMAC_OSX__ +protected : + WindowRef m_macWindow ; +} ; -CGColorSpaceRef wxMacGetGenericRGBColorSpace(void); -void wxMacMemoryBufferReleaseProc(void *info, const void *data, size_t size); +#endif // wxUSE_GUI -#endif +#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \ +UPP Get##x() \ +{ \ + static UPP sHandler = NULL; \ + if ( sHandler == NULL ) \ + sHandler = New##UPP( x ); \ + return sHandler; \ +} -class WXDLLEXPORT wxBitmapRefData: public wxGDIRefData -{ - DECLARE_NO_COPY_CLASS(wxBitmapRefData) +//--------------------------------------------------------------------------- +// wxMac string conversions +//--------------------------------------------------------------------------- - friend class WXDLLEXPORT wxIcon; - friend class WXDLLEXPORT wxCursor; -public: - wxBitmapRefData(int width , int height , int depth); - wxBitmapRefData(); - ~wxBitmapRefData(); +void wxMacSetupConverters(); +void wxMacCleanupConverters(); - void Free(); - bool Ok() const { return m_ok; } - void SetOk( bool isOk) { m_ok = isOk; } +WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to ); +WXDLLIMPEXP_BASE wxString wxMacMakeStringFromPascal( ConstStringPtr from ); - void SetWidth( int width ) { m_width = width; } - void SetHeight( int height ) { m_height = height; } - void SetDepth( int depth ) { m_depth = depth; } +// filefn.cpp - int GetWidth() const { return m_width; } - int GetHeight() const { return m_height; } - int GetDepth() const { return m_depth; } +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 ); - void *GetRawAccess() const; - void *BeginRawAccess(); - void EndRawAccess(); +#if wxUSE_GUI - bool HasAlpha() const { return m_hasAlpha; } - void UseAlpha( bool useAlpha ); +// deprecating QD -public: -#if wxUSE_PALETTE - wxPalette m_bitmapPalette; -#endif // wxUSE_PALETTE +void wxMacLocalToGlobal( WindowRef window , Point*pt ); +void wxMacGlobalToLocal( WindowRef window , Point*pt ); - wxMask * m_bitmapMask; // Optional mask -#ifdef __WXMAC_OSX__ - CGImageRef CGImageCreate() const; #endif - // returns true if the bitmap has a size that - // can be natively transferred into a true icon - // if no is returned GetIconRef will still produce - // an icon but it will be generated via a PICT and - // rescaled to 16 x 16 - bool HasNativeSize(); - - // caller should increase ref count if needed longer - // than the bitmap exists - IconRef GetIconRef(); +//--------------------------------------------------------------------------- +// cocoa bridging utilities +//--------------------------------------------------------------------------- - // returns a Pict from the bitmap content - PicHandle GetPictHandle(); - GWorldPtr GetHBITMAP(GWorldPtr * mask = NULL ) const; - void UpdateAlphaMask() const; +bool wxMacInitCocoa(); +class WXDLLEXPORT wxMacAutoreleasePool +{ +public : + wxMacAutoreleasePool(); + ~wxMacAutoreleasePool(); private : - bool Create(int width , int height , int depth); - void Init(); - - int m_width; - int m_height; - int m_bytesPerRow; - int m_depth; - bool m_hasAlpha; - wxMemoryBuffer m_memBuf; - int m_rawAccessCount; - bool m_ok; -#ifdef __WXMAC_OSX__ - mutable CGImageRef m_cgImageRef; -#endif - IconRef m_iconRef; - PicHandle m_pictHandle; - GWorldPtr m_hBitmap; - GWorldPtr m_hMaskBitmap; - wxMemoryBuffer m_maskMemBuf; - int m_maskBytesPerRow; + void* m_pool; }; -class WXDLLEXPORT wxIconRefData : public wxGDIRefData -{ -public: - wxIconRefData(); - wxIconRefData( WXHICON ); - virtual ~wxIconRefData() { Free(); } +// NSObject - void Init(); - virtual void Free(); +void wxMacCocoaRelease( void* obj ); +void wxMacCocoaAutorelease( void* obj ); +void wxMacCocoaRetain( void* obj ); - void SetWidth( int width ) { m_width = width; } - void SetHeight( int height ) { m_height = height; } +#if wxMAC_USE_COCOA - int GetWidth() const { return m_width; } - int GetHeight() const { return m_height; } +// NSCursor - WXHICON GetHICON() const { return (WXHICON) m_iconRef; } -private : - IconRef m_iconRef; - int m_width; - int m_height; -}; +WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type ); +WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY ); +void wxMacCocoaSetCursor( WX_NSCursor cursor ); +void wxMacCocoaHideCursor(); +void wxMacCocoaShowCursor(); -// toplevel.cpp +typedef struct tagClassicCursor +{ + wxUint16 bits[16]; + wxUint16 mask[16]; + wxInt16 hotspot[2]; +}ClassicCursor; -ControlRef wxMacFindControlUnderMouse( wxTopLevelWindowMac* toplevelWindow, const Point& location , WindowRef window , ControlPartCode *outPart ); +#else // !wxMAC_USE_COCOA -#ifdef WORDS_BIGENDIAN - inline Rect* wxMacGetPictureBounds( PicHandle pict , Rect* rect ) - { - *rect = (**pict).picFrame; - return rect; - } -#else - inline Rect* wxMacGetPictureBounds( PicHandle pict , Rect* rect ) - { - return QDGetPictureBounds( pict , rect ); - } -#endif +// non Darwin -#endif // wxUSE_GUI +typedef Cursor ClassicCursor; -#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \ -UPP Get##x() \ -{ \ - static UPP sHandler = NULL; \ - if ( sHandler == NULL ) \ - sHandler = New##UPP( x ); \ - return sHandler; \ -} +#endif // wxMAC_USE_COCOA -//--------------------------------------------------------------------------- -// wxMac string conversions -//--------------------------------------------------------------------------- +// ------------- +// Common to all +// ------------- -void wxMacSetupConverters(); -void wxMacCleanupConverters(); +// Cursor support -void wxMacStringToPascal( const wxString&from , StringPtr to ); -wxString wxMacMakeStringFromPascal( ConstStringPtr from ); +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; -// filefn.cpp +// exposing our fallback cursor map -wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ); -OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); -wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); +extern ClassicCursor gMacCursors[]; #endif // _WX_PRIVATE_H_