1 /////////////////////////////////////////////////////////////////////////////
2 // Name: include/mac/carbon/databrow.h
3 // Purpose: Classes and functions for the Carbon data browser
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_DATABROW_H_
13 #define _WX_DATABROW_H_
18 # include <Carbon/Carbon.h>
20 # include <Debugging.h>
21 # include <Appearance.h>
22 # include <Controls.h>
23 # include <ControlDefinitions.h>
26 # include <CoreServices.h>
29 #if UNIVERSAL_INTERFACES_VERSION < 0x0342
30 #error "please update to Apple's latest universal headers from http://developer.apple.com/sdk/"
33 #ifndef MAC_OS_X_VERSION_10_3
34 #define MAC_OS_X_VERSION_10_3 1030
37 #ifndef MAC_OS_X_VERSION_10_4
38 #define MAC_OS_X_VERSION_10_4 1040
41 #ifndef MAC_OS_X_VERSION_10_5
42 #define MAC_OS_X_VERSION_10_5 1050
45 #ifdef __WXMAC_CARBON__
46 # include "wx/mac/corefoundation/cfstring.h"
49 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
50 typedef UInt32 URefCon
;
51 typedef SInt32 SRefCon
;
56 #include "wx/mac/private.h"
58 WX_DEFINE_ARRAY_SIZE_T(size_t,wxArrayDataBrowserItemID
);
60 // ============================================================================
61 // wxMacDataBrowserTableViewControl
62 // ============================================================================
64 // this is a wrapper class for the Mac OS X data browser environment,
65 // it covers all general data brower functionality,
68 // data browser's property IDs have a reserved ID range from 0 - 1023
69 // therefore, the first usable property ID is 'kMinPropertyID'
70 DataBrowserPropertyID
const kMinPropertyID
= 1024;
72 class wxMacDataBrowserTableViewControl
: public wxMacControl
76 // constructors / destructor
78 wxMacDataBrowserTableViewControl(wxWindow
* peer
, const wxPoint
& pos
, const wxSize
& size
, long style
);
79 wxMacDataBrowserTableViewControl(void)
86 OSStatus
SetCallbacks (DataBrowserCallbacks
const* callbacks
);
87 OSStatus
SetCustomCallbacks(DataBrowserCustomCallbacks
const* customCallbacks
);
92 OSStatus
GetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
) const;
94 OSStatus
SetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
);
99 OSStatus
AutoSizeColumns();
101 OSStatus
EnableCellSizeModification(bool enableHeight
=true, bool enableWidth
=true); // enables or disables the column width and row height modification (default: false)
103 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
104 OSStatus
GetAttributes (OptionBits
* attributes
);
106 OSStatus
GetColumnWidth (DataBrowserPropertyID column
, UInt16
*width
) const; // returns the column width in pixels
107 OSStatus
GetDefaultColumnWidth(UInt16
*width
) const; // returns the default column width in pixels
108 OSStatus
GetDefaultRowHeight (UInt16
* height
) const;
109 OSStatus
GetHeaderButtonHeight(UInt16
*height
);
110 OSStatus
GetRowHeight (DataBrowserItemID item
, UInt16
*height
) const;
111 OSStatus
GetScrollPosition (UInt32
* top
, UInt32
*left
) const;
113 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
114 OSStatus
SetAttributes (OptionBits attributes
);
116 OSStatus
SetColumnWidth(DataBrowserPropertyID column
, UInt16 width
); // sets the column width in pixels
117 OSStatus
SetDefaultColumnWidth( UInt16 width
);
118 OSStatus
SetDefaultRowHeight( UInt16 height
);
119 OSStatus
SetHasScrollBars( bool horiz
, bool vert
);
120 OSStatus
SetHeaderButtonHeight( UInt16 height
);
121 OSStatus
SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle
);
122 OSStatus
SetRowHeight( DataBrowserItemID item
, UInt16 height
);
123 OSStatus
SetScrollPosition( UInt32 top
, UInt32 left
);
128 OSStatus
GetColumnCount (UInt32
* numColumns
) const;
129 OSStatus
GetColumnIndex (DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex
* index
) const; // returns for the passed property the corresponding column index
130 OSStatus
GetFreePropertyID(DataBrowserPropertyID
* propertyID
) const; // this method returns a property id that is valid and currently not used; if it cannot be found 'errDataBrowerPropertyNotSupported' is returned
131 OSStatus
GetPropertyFlags (DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags
*flags
) const;
132 OSStatus
GetPropertyID (DataBrowserTableViewColumnIndex index
, DataBrowserTableViewColumnID
* propertyId
); // returns for the passed column index the corresponding property ID
134 OSStatus
IsUsedPropertyID(DataBrowserPropertyID propertyID
) const; // checks if passed property id is used by the control; no error is returned if the id exists
136 OSStatus
RemoveColumn(DataBrowserTableViewColumnIndex index
);
138 OSStatus
SetColumnIndex (DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex index
);
139 OSStatus
SetDisclosureColumn(DataBrowserPropertyID propertyID
, Boolean expandableRows
=true);
140 OSStatus
SetPropertyFlags (DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags flags
);
145 OSStatus
AddItem(DataBrowserItemID container
, DataBrowserItemID
const* itemID
) // adds a single item
147 return this->AddItems(container
,1,itemID
,kDataBrowserItemNoProperty
);
149 OSStatus
AddItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
); // adds items to the data browser
151 OSStatus
GetFreeItemID(DataBrowserItemID
* id
) const; // this method returns an item id that is valid and currently not used; if it cannot be found 'errDataBrowserItemNotAdded' is returned
152 OSStatus
GetItemCount (ItemCount
* numItems
) const
154 return this->GetItemCount(kDataBrowserNoItem
,true,kDataBrowserItemAnyState
,numItems
);
156 OSStatus
GetItemCount (DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, ItemCount
* numItems
) const;
157 OSStatus
GetItemID (DataBrowserTableViewRowIndex row
, DataBrowserItemID
* item
) const;
158 OSStatus
GetItems (DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, Handle items
) const;
159 OSStatus
GetItemRow (DataBrowserItemID item
, DataBrowserTableViewRowIndex
* row
) const;
161 OSStatus
IsUsedItemID(DataBrowserItemID itemID
) const; // checks if the passed id is in use
163 OSStatus
RevealItem(DataBrowserItemID item
, DataBrowserPropertyID propertyID
, DataBrowserRevealOptions options
) const;
165 OSStatus
RemoveItem(DataBrowserItemID container
, DataBrowserItemID
const* itemID
) // removes a single item
167 return this->RemoveItems(container
,1,itemID
,kDataBrowserItemNoProperty
);
169 OSStatus
RemoveItems(void) // removes all items
171 return this->RemoveItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
);
173 OSStatus
RemoveItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
);
175 OSStatus
UpdateItems(void) // updates all items
177 return this->UpdateItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
,kDataBrowserNoItem
);
179 OSStatus
UpdateItems(DataBrowserItemID
const* item
) // updates all columns of item
181 return this->UpdateItems(kDataBrowserNoItem
,1,item
,kDataBrowserItemNoProperty
,kDataBrowserNoItem
);
183 OSStatus
UpdateItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
, DataBrowserPropertyID propertyID
) const;
188 size_t GetSelectedItemIDs(wxArrayDataBrowserItemID
& itemIDs
) const; // returns the number of selected item and the item IDs in the array
189 OSStatus
GetSelectionAnchor(DataBrowserItemID
*first
, DataBrowserItemID
*last
) const;
190 OSStatus
GetSelectionFlags (DataBrowserSelectionFlags
* flags
) const;
192 bool IsItemSelected(DataBrowserItemID item
) const;
194 OSStatus
SetSelectionFlags(DataBrowserSelectionFlags flags
);
195 OSStatus
SetSelectedItems (UInt32 numItems
, DataBrowserItemID
const* itemIDs
, DataBrowserSetOption operation
);
200 OSStatus
GetSortOrder (DataBrowserSortOrder
* order
) const;
201 OSStatus
GetSortProperty(DataBrowserPropertyID
* propertyID
) const;
203 OSStatus
SetSortOrder (DataBrowserSortOrder order
);
204 OSStatus
SetSortProperty(DataBrowserPropertyID propertyID
);
208 // callback functions
210 static pascal Boolean
DataBrowserCompareProc (ControlRef browser
, DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
);
211 static pascal void DataBrowserDrawItemProc (ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
);
212 static pascal OSStatus
DataBrowserGetSetItemDataProc (ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
);
213 static pascal void DataBrowserItemNotificationProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
);
215 virtual Boolean
DataBrowserCompareProc (DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
) = 0;
216 virtual void DataBrowserDrawItemProc (DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
) = 0;
217 virtual OSStatus
DataBrowserGetSetItemDataProc (DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
) = 0;
218 virtual void DataBrowserItemNotificationProc(DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
) = 0;
221 // wxWidget internal stuff
223 DECLARE_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl
)
226 // ============================================================================
227 // wxMacDataBrowserListViewControl
228 // ============================================================================
230 // this class is a wrapper for a list view which incorporates all general
231 // data browser functionality of the inherited table view control class;
232 // the term list view is in this case Mac OS X specific and is not related
233 // to any wxWidget naming conventions
235 class wxMacDataBrowserListViewControl
: public wxMacDataBrowserTableViewControl
239 // constructors / destructor
241 wxMacDataBrowserListViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
) : wxMacDataBrowserTableViewControl(peer
,pos
,size
,style
)
248 OSStatus
AddColumn(DataBrowserListViewColumnDesc
*columnDesc
, DataBrowserTableViewColumnIndex position
);
255 // ============================================================================
256 // wxMacDataViewDataBrowserListViewControl
257 // ============================================================================
259 // internal interface class between wxDataViewCtrl (wxWidget) and the data
260 // browser (Mac OS X)
262 class wxMacDataViewDataBrowserListViewControl
: public wxMacDataBrowserListViewControl
266 // constructors / destructor
268 wxMacDataViewDataBrowserListViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
);
272 // callback functions (inherited from wxMacDataBrowserTableViewControl)
274 virtual Boolean
DataBrowserCompareProc (DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
);
275 virtual void DataBrowserDrawItemProc (DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
);
276 virtual void DataBrowserItemNotificationProc(DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
);
277 virtual OSStatus
DataBrowserGetSetItemDataProc (DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
);
282 typedef wxMacDataViewDataBrowserListViewControl
* wxMacDataViewDataBrowserListViewControlPointer
;
287 #endif // _WX_DATABROW_H_