1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/osx/carbon/dataview.h
3 // Purpose: wxDataViewCtrl native implementation header for carbon
5 // Id: $Id: dataview.h 57374 2009-01-27
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_DATAVIEWCTRL_CARBON_H_
11 #define _WX_DATAVIEWCTRL_CARBON_H_
17 #include <carbon/carbon.h>
19 #include "wx/osx/core/dataview.h"
20 #include "wx/osx/private.h"
22 // ============================================================================
23 // wxDataViewColumnNativeData
24 // ============================================================================
25 class wxDataViewColumnNativeData
29 // constructors / destructor
31 wxDataViewColumnNativeData(void)
34 wxDataViewColumnNativeData(DataBrowserPropertyID initPropertyID
)
35 :m_PropertyID(initPropertyID
)
40 // data access methods
42 DataBrowserPropertyID
GetPropertyID(void) const
44 return this->m_PropertyID
;
47 void SetPropertyID(DataBrowserPropertyID newPropertyID
)
49 this->m_PropertyID
= newPropertyID
;
57 DataBrowserPropertyID m_PropertyID
; // each column is identified by its unique property ID (NOT by the column's index)
60 // ============================================================================
61 // wxDataViewRendererNativeData
62 // ============================================================================
63 class wxDataViewRendererNativeData
67 // constructors / destructor
69 wxDataViewRendererNativeData(void)
72 wxDataViewRendererNativeData(DataBrowserPropertyType initPropertyType
, DataBrowserItemDataRef initItemDataRef
=NULL
)
73 :m_ItemDataRef(initItemDataRef
), m_PropertyType(initPropertyType
)
78 // data access methods
80 DataBrowserItemDataRef
GetItemDataRef(void) const
82 return this->m_ItemDataRef
;
84 DataBrowserPropertyType
GetPropertyType(void) const
86 return this->m_PropertyType
;
89 void SetItemDataRef(DataBrowserItemDataRef newItemDataRef
)
91 this->m_ItemDataRef
= newItemDataRef
;
93 void SetPropertyType(DataBrowserPropertyType newPropertyType
)
95 this->m_PropertyType
= newPropertyType
;
103 DataBrowserItemDataRef m_ItemDataRef
;
105 DataBrowserPropertyType m_PropertyType
;
108 // ============================================================================
109 // wxMacDataBrowserTableViewControl
110 // ============================================================================
112 // This is a wrapper class for the Mac OS X data browser environment.
113 // It covers all data brower functionality for the native browser's list
117 // data browser's property IDs have a reserved ID range from 0 - 1023
118 // therefore, the first usable property ID is 'kMinPropertyID'
119 DataBrowserPropertyID
const kMinPropertyID
= 1024;
121 // array of data browser item IDs
122 WX_DEFINE_ARRAY_SIZE_T(size_t,wxArrayDataBrowserItemID
);
124 class wxMacDataBrowserTableViewControl
: public wxMacControl
128 // constructors / destructor
130 wxMacDataBrowserTableViewControl(wxWindow
* peer
, const wxPoint
& pos
, const wxSize
& size
, long style
);
131 wxMacDataBrowserTableViewControl(void)
138 OSStatus
SetCallbacks (DataBrowserCallbacks
const* callbacks
);
139 OSStatus
SetCustomCallbacks(DataBrowserCustomCallbacks
const* customCallbacks
);
144 OSStatus
EnableAutomaticDragTracking(bool enable
=true);
149 OSStatus
GetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
) const;
151 OSStatus
SetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
);
156 OSStatus
AutoSizeColumns();
158 OSStatus
EnableCellSizeModification(bool enableHeight
=true, bool enableWidth
=true); // enables or disables the column width and row height modification (default: false)
160 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
161 OSStatus
GetAttributes (OptionBits
* attributes
);
163 OSStatus
GetColumnWidth (DataBrowserPropertyID column
, UInt16
*width
) const; // returns the column width in pixels
164 OSStatus
GetDefaultColumnWidth(UInt16
*width
) const; // returns the default column width in pixels
165 OSStatus
GetDefaultRowHeight (UInt16
* height
) const;
166 OSStatus
GetHeaderButtonHeight(UInt16
*height
);
167 OSStatus
GetPartBounds (DataBrowserItemID item
, DataBrowserPropertyID property
, DataBrowserPropertyPart part
, Rect
* bounds
);
168 OSStatus
GetRowHeight (DataBrowserItemID item
, UInt16
*height
) const;
169 OSStatus
GetScrollPosition (UInt32
* top
, UInt32
*left
) const;
171 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
172 OSStatus
SetAttributes (OptionBits attributes
);
174 OSStatus
SetColumnWidth(DataBrowserPropertyID column
, UInt16 width
); // sets the column width in pixels
175 OSStatus
SetDefaultColumnWidth( UInt16 width
);
176 OSStatus
SetDefaultRowHeight( UInt16 height
);
177 OSStatus
SetHasScrollBars( bool horiz
, bool vert
);
178 OSStatus
SetHeaderButtonHeight( UInt16 height
);
179 OSStatus
SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle
);
180 OSStatus
SetIndent(float Indent
);
181 OSStatus
SetItemRowHeight( DataBrowserItemID item
, UInt16 height
);
182 OSStatus
SetScrollPosition( UInt32 top
, UInt32 left
);
187 OSStatus
GetColumnCount (UInt32
* numColumns
) const;
188 OSStatus
GetColumnIndex (DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex
* index
) const; // returns for the passed property the corresponding column index
189 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
190 OSStatus
GetPropertyFlags (DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags
*flags
) const;
191 OSStatus
GetPropertyID (DataBrowserItemDataRef itemData
, DataBrowserPropertyID
* propertyID
) const; // returns for the passed item data reference the corresponding property ID
192 OSStatus
GetPropertyID (DataBrowserTableViewColumnIndex index
, DataBrowserPropertyID
* propertyID
) const; // returns for the passed column index the corresponding property ID
194 OSStatus
IsUsedPropertyID(DataBrowserPropertyID propertyID
) const; // checks if passed property id is used by the control; no error is returned if the id exists
196 OSStatus
RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID
);
197 OSStatus
RemoveColumnByIndex (DataBrowserTableViewColumnIndex index
);
199 OSStatus
SetColumnIndex (DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex index
);
200 OSStatus
SetDisclosureColumn(DataBrowserPropertyID propertyID
, Boolean expandableRows
=false);
201 OSStatus
SetPropertyFlags (DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags flags
);
206 OSStatus
AddItem(DataBrowserItemID container
, DataBrowserItemID
const* itemID
) // adds a single item
208 return this->AddItems(container
,1,itemID
,kDataBrowserItemNoProperty
);
210 OSStatus
AddItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
); // adds items to the data browser
212 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
213 OSStatus
GetItemCount (ItemCount
* numItems
) const
215 return this->GetItemCount(kDataBrowserNoItem
,true,kDataBrowserItemAnyState
,numItems
);
217 OSStatus
GetItemCount (DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, ItemCount
* numItems
) const;
218 OSStatus
GetItemID (DataBrowserTableViewRowIndex row
, DataBrowserItemID
* item
) const;
219 OSStatus
GetItems (DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, Handle items
) const;
220 OSStatus
GetItemRow (DataBrowserItemID item
, DataBrowserTableViewRowIndex
* row
) const;
221 OSStatus
GetItemState (DataBrowserItemID item
, DataBrowserItemState
* state
) const;
223 OSStatus
IsUsedItemID(DataBrowserItemID itemID
) const; // checks if the passed id is in use
225 OSStatus
RevealItem(DataBrowserItemID item
, DataBrowserPropertyID propertyID
, DataBrowserRevealOptions options
) const;
227 OSStatus
RemoveItem(DataBrowserItemID container
, DataBrowserItemID
const* itemID
) // removes a single item
229 return this->RemoveItems(container
,1,itemID
,kDataBrowserItemNoProperty
);
231 OSStatus
RemoveItems(void) // removes all items
233 return this->RemoveItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
);
235 OSStatus
RemoveItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
);
237 OSStatus
UpdateItem(DataBrowserItemID container
, DataBrowserItemID
const* item
) // updates all columns of the passed item
239 return this->UpdateItems(container
,1,item
,kDataBrowserItemNoProperty
,kDataBrowserItemNoProperty
);
241 OSStatus
UpdateItems(void) // updates all items
243 return this->UpdateItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
,kDataBrowserItemNoProperty
);
245 OSStatus
UpdateItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
, DataBrowserPropertyID propertyID
) const;
250 size_t GetSelectedItemIDs(wxArrayDataBrowserItemID
& itemIDs
) const; // returns the number of selected item and the item IDs in the array
251 OSStatus
GetSelectionAnchor(DataBrowserItemID
*first
, DataBrowserItemID
*last
) const;
252 OSStatus
GetSelectionFlags (DataBrowserSelectionFlags
* flags
) const;
254 bool IsItemSelected(DataBrowserItemID item
) const;
256 OSStatus
SetSelectionFlags(DataBrowserSelectionFlags flags
);
257 OSStatus
SetSelectedItems (UInt32 numItems
, DataBrowserItemID
const* itemIDs
, DataBrowserSetOption operation
);
262 OSStatus
GetSortOrder (DataBrowserSortOrder
* order
) const;
263 OSStatus
GetSortProperty(DataBrowserPropertyID
* propertyID
) const;
265 OSStatus
Resort(DataBrowserItemID container
=kDataBrowserNoItem
, Boolean sortChildren
=true);
267 OSStatus
SetSortOrder (DataBrowserSortOrder order
);
268 OSStatus
SetSortProperty(DataBrowserPropertyID propertyID
);
271 // container handling
273 OSStatus
CloseContainer(DataBrowserItemID containerID
);
275 OSStatus
OpenContainer(DataBrowserItemID containerID
);
279 // standard callback functions
281 static pascal Boolean
DataBrowserCompareProc (ControlRef browser
, DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
);
282 static pascal void DataBrowserGetContextualMenuProc(ControlRef browser
, MenuRef
* menu
, UInt32
* helpType
, CFStringRef
* helpItemString
, AEDesc
* selection
);
283 static pascal OSStatus
DataBrowserGetSetItemDataProc (ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
);
284 static pascal void DataBrowserItemNotificationProc (ControlRef browser
, DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
);
286 virtual Boolean
DataBrowserCompareProc (DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
) = 0;
287 virtual void DataBrowserGetContextualMenuProc(MenuRef
* menu
, UInt32
* helpType
, CFStringRef
* helpItemString
, AEDesc
* selection
) = 0;
288 virtual OSStatus
DataBrowserGetSetItemDataProc (DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
) = 0;
289 virtual void DataBrowserItemNotificationProc (DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
) = 0;
292 // callback functions for customized types
294 static pascal void DataBrowserDrawItemProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
);
295 static pascal Boolean
DataBrowserEditItemProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, CFStringRef theString
, Rect
* maxEditTextRect
, Boolean
* shrinkToFit
);
296 static pascal Boolean
DataBrowserHitTestProc (ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, Rect
const* theRect
, Rect
const* mouseRect
);
297 static pascal DataBrowserTrackingResult
DataBrowserTrackingProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, Rect
const* theRect
, Point startPt
, EventModifiers modifiers
);
299 virtual void DataBrowserDrawItemProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
) = 0;
300 virtual Boolean
DataBrowserEditItemProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, CFStringRef theString
, Rect
* maxEditTextRect
, Boolean
* shrinkToFit
) = 0;
301 virtual Boolean
DataBrowserHitTestProc (DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, Rect
const* theRect
, Rect
const* mouseRect
) = 0;
302 virtual DataBrowserTrackingResult
DataBrowserTrackingProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, Rect
const* theRect
, Point startPt
, EventModifiers modifiers
) = 0;
305 // callback functions for drag & drop
307 static pascal Boolean
DataBrowserAcceptDragProc (ControlRef browser
, DragReference dragRef
, DataBrowserItemID itemID
);
308 static pascal Boolean
DataBrowserAddDragItemProc(ControlRef browser
, DragReference dragRef
, DataBrowserItemID itemID
, ItemReference
* itemRef
);
309 static pascal Boolean
DataBrowserReceiveDragProc(ControlRef browser
, DragReference dragRef
, DataBrowserItemID itemID
);
311 virtual Boolean
DataBrowserAcceptDragProc (DragReference dragRef
, DataBrowserItemID itemID
) = 0;
312 virtual Boolean
DataBrowserAddDragItemProc(DragReference dragRef
, DataBrowserItemID itemID
, ItemReference
* itemRef
) = 0;
313 virtual Boolean
DataBrowserReceiveDragProc(DragReference dragRef
, DataBrowserItemID itemID
) = 0;
317 // wxWidget internal stuff
319 DECLARE_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl
)
322 // ============================================================================
323 // wxMacDataBrowserListViewControl
324 // ============================================================================
326 // This class is a wrapper for the native browser's list view style. It expands
327 // the inherited functionality of the table view control class.
328 // The term list view is in this case Mac OS X specific and is not related
329 // to any wxWidget naming conventions.
331 class wxMacDataBrowserListViewControl
: public wxMacDataBrowserTableViewControl
335 // constructors / destructor
337 wxMacDataBrowserListViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
) : wxMacDataBrowserTableViewControl(peer
,pos
,size
,style
)
344 OSStatus
AddColumn(DataBrowserListViewColumnDesc
*columnDesc
, DataBrowserTableViewColumnIndex position
);
351 // ============================================================================
352 // wxMacDataViewDataBrowserListViewControl
353 // ============================================================================
355 // This is the internal interface class between wxDataViewCtrl (wxWidget) and
356 // the native data browser (Mac OS X carbon).
358 class wxMacDataViewDataBrowserListViewControl
: public wxMacDataBrowserListViewControl
, public wxDataViewWidgetImpl
362 // constructors / destructor
364 wxMacDataViewDataBrowserListViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
);
367 // column related methods (inherited from wxDataViewWidgetImpl)
369 virtual bool ClearColumns (void);
370 virtual bool DeleteColumn (wxDataViewColumn
* columnPtr
);
371 virtual void DoSetExpanderColumn(wxDataViewColumn
const* columnPtr
);
372 virtual wxDataViewColumn
* GetColumn (unsigned int pos
) const;
373 virtual int GetColumnPosition (wxDataViewColumn
const* columnPtr
) const;
374 virtual bool InsertColumn (unsigned int pos
, wxDataViewColumn
* columnPtr
);
377 // item related methods (inherited from wxDataViewWidgetImpl)
379 virtual bool Add (wxDataViewItem
const& parent
, wxDataViewItem
const& item
);
380 virtual bool Add (wxDataViewItem
const& parent
, wxDataViewItemArray
const& items
);
381 virtual void Collapse (wxDataViewItem
const& item
);
382 virtual void EnsureVisible(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
);
383 virtual void Expand (wxDataViewItem
const& item
);
384 virtual unsigned int GetCount (void) const;
385 virtual wxRect
GetRectangle (wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
);
386 virtual bool IsExpanded (wxDataViewItem
const& item
) const;
387 virtual bool Reload (void);
388 virtual bool Remove (wxDataViewItem
const& parent
, wxDataViewItem
const& item
);
389 virtual bool Remove (wxDataViewItem
const& parent
, wxDataViewItemArray
const& item
);
390 virtual bool Update (wxDataViewColumn
const* columnPtr
);
391 virtual bool Update (wxDataViewItem
const& parent
, wxDataViewItem
const& item
);
392 virtual bool Update (wxDataViewItem
const& parent
, wxDataViewItemArray
const& items
);
395 // model related methods
397 virtual bool AssociateModel(wxDataViewModel
* model
);
400 // selection related methods (inherited from wxDataViewWidgetImpl)
402 virtual int GetSelections(wxDataViewItemArray
& sel
) const;
403 virtual bool IsSelected (wxDataViewItem
const& item
) const;
404 virtual void Select (wxDataViewItem
const& item
);
405 virtual void SelectAll (void);
406 virtual void Unselect (wxDataViewItem
const& item
);
407 virtual void UnselectAll (void);
410 // sorting related methods
412 virtual wxDataViewColumn
* GetSortingColumn (void) const;
413 virtual void Resort (void);
416 // other methods (inherited from wxDataViewWidgetImpl)
418 virtual void DoSetIndent (int indent
);
419 virtual void HitTest (wxPoint
const& point
, wxDataViewItem
& item
, wxDataViewColumn
*& columnPtr
) const;
420 virtual void SetRowHeight(wxDataViewItem
const& item
, unsigned int height
);
421 virtual void OnSize (void);
426 wxDataViewCtrl
* GetDataViewCtrl(void) const
428 return dynamic_cast<wxDataViewCtrl
*>(this->GetWXPeer());
433 // standard callback functions (inherited from wxMacDataBrowserTableViewControl)
435 virtual Boolean
DataBrowserCompareProc (DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
);
436 virtual void DataBrowserItemNotificationProc (DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
);
437 virtual void DataBrowserGetContextualMenuProc(MenuRef
* menu
, UInt32
* helpType
, CFStringRef
* helpItemString
, AEDesc
* selection
);
438 virtual OSStatus
DataBrowserGetSetItemDataProc (DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemDataRef itemData
, Boolean getValue
);
441 // callback functions for customized types (inherited from wxMacDataBrowserTableViewControl)
443 virtual void DataBrowserDrawItemProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
);
444 virtual Boolean
DataBrowserEditItemProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, CFStringRef theString
, Rect
* maxEditTextRect
, Boolean
* shrinkToFit
);
445 virtual Boolean
DataBrowserHitTestProc (DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, Rect
const* theRect
, Rect
const* mouseRect
);
446 virtual DataBrowserTrackingResult
DataBrowserTrackingProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, Rect
const* theRect
, Point startPt
, EventModifiers modifiers
);
449 // callback functions for drag & drop (inherited from wxMacDataBrowserTableViewControl)
451 virtual Boolean
DataBrowserAcceptDragProc (DragReference dragRef
, DataBrowserItemID itemID
);
452 virtual Boolean
DataBrowserAddDragItemProc(DragReference dragRef
, DataBrowserItemID itemID
, ItemReference
* itemRef
);
453 virtual Boolean
DataBrowserReceiveDragProc(DragReference dragRef
, DataBrowserItemID itemID
);
456 // drag & drop helper methods
458 wxDataFormat
GetDnDDataFormat(wxDataObjectComposite
* dataObjects
);
459 wxDataObjectComposite
* GetDnDDataObjects(DragReference dragRef
, ItemReference itemRef
) const; // create the data objects from the native dragged object
464 wxDataViewColumn
* GetColumnPtr(DataBrowserPropertyID propertyID
) const; // returns for the passed property the corresponding pointer to a column; NULL is returned if not found
469 typedef wxMacDataViewDataBrowserListViewControl
* wxMacDataViewDataBrowserListViewControlPointer
;
472 #endif // _WX_MACCARBONDATAVIEWCTRL_H_