1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/mac/carbon/databrow.cpp
3 // Purpose: Classes and functions for the Carbon data browser
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef wxUSE_GENERICDATAVIEWCTRL
16 #include "wx/wxprec.h"
19 #include "wx/toplevel.h"
23 #include "wx/dataview.h"
26 #include "wx/mac/carbon/databrow.h"
27 #include "wx/mac/private.h"
28 #include "wx/mac/uma.h"
30 // ============================================================================
31 // wxMacDataBrowserTableViewControl
32 // ============================================================================
34 pascal Boolean
wxMacDataBrowserTableViewControl::DataBrowserCompareProc(ControlRef browser
, DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
)
36 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
39 if (ControlPtr
!= NULL
)
40 return ControlPtr
->DataBrowserCompareProc(itemOneID
,itemTwoID
,sortProperty
);
42 return errDataBrowserPropertyNotSupported
;
43 } /* wxMacDataBrowserTableViewControl::DataBrowserCompareProc(ControlRef, DataBrowserItemID, DataBrowserItemID, DataBrowserPropertyID) */
45 pascal void wxMacDataBrowserTableViewControl::DataBrowserDrawItemProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
)
47 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
50 if (ControlPtr
!= NULL
)
51 ControlPtr
->DataBrowserDrawItemProc(itemID
,property
,state
,rectangle
,bitDepth
,colorDevice
);
52 } /* wxMacDataBrowserTableViewControl::DataBrowserDrawItemProc(ControlRef, DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
54 pascal OSStatus
wxMacDataBrowserTableViewControl::DataBrowserGetSetItemDataProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
)
56 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
59 if (ControlPtr
!= NULL
)
60 return ControlPtr
->DataBrowserGetSetItemDataProc(itemID
,property
,itemData
,getValue
);
62 return errDataBrowserPropertyNotSupported
;
63 } /* wxMacDataBrowserTableViewControl::DataBrowserGetSetItemDataProc(ControlRef, DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemDataRef, Boolean) */
65 pascal void wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
)
67 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
70 if (ControlPtr
!= NULL
)
71 ControlPtr
->DataBrowserItemNotificationProc(itemID
,message
,itemData
);
72 } /* wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc(ControlRef, DataBrowserItemID, DataBrowserItemNotification, DataBrowserItemDataRef) */
74 DataBrowserDrawItemUPP gDataBrowserTableViewDrawItemUPP
= NULL
;
75 DataBrowserItemCompareUPP gDataBrowserTableViewItemCompareUPP
= NULL
;
76 DataBrowserItemDataUPP gDataBrowserTableViewItemDataUPP
= NULL
;
77 DataBrowserItemNotificationUPP gDataBrowserTableViewItemNotificationUPP
= NULL
;
79 wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
)
82 Rect bounds
= wxMacGetBoundsForControl(peer
,pos
,size
);
83 OSStatus err
= ::CreateDataBrowserControl(MAC_WXHWND(peer
->MacGetTopLevelWindowRef()),&bounds
,kDataBrowserListView
,&(this->m_controlRef
));
86 SetReferenceInNativeControl();
88 if (gDataBrowserTableViewDrawItemUPP
== NULL
) gDataBrowserTableViewDrawItemUPP
= NewDataBrowserDrawItemUPP (DataBrowserDrawItemProc
);
89 if (gDataBrowserTableViewItemCompareUPP
== NULL
) gDataBrowserTableViewItemCompareUPP
= NewDataBrowserItemCompareUPP(wxMacDataBrowserTableViewControl::DataBrowserCompareProc
);
90 if (gDataBrowserTableViewItemDataUPP
== NULL
) gDataBrowserTableViewItemDataUPP
= NewDataBrowserItemDataUPP (wxMacDataBrowserTableViewControl::DataBrowserGetSetItemDataProc
);
91 if (gDataBrowserTableViewItemNotificationUPP
== NULL
)
93 gDataBrowserTableViewItemNotificationUPP
=
94 #if TARGET_API_MAC_OSX
95 (DataBrowserItemNotificationUPP
) NewDataBrowserItemNotificationWithItemUPP(wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc
);
97 NewDataBrowserItemNotificationUPP(wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc
);
101 DataBrowserCallbacks callbacks
;
102 DataBrowserCustomCallbacks customCallbacks
;
104 InitializeDataBrowserCallbacks (&callbacks
, kDataBrowserLatestCallbacks
);
105 InitializeDataBrowserCustomCallbacks(&customCallbacks
,kDataBrowserLatestCallbacks
);
107 callbacks
.u
.v1
.itemDataCallback
= gDataBrowserTableViewItemDataUPP
;
108 callbacks
.u
.v1
.itemCompareCallback
= gDataBrowserTableViewItemCompareUPP
;
109 callbacks
.u
.v1
.itemNotificationCallback
= gDataBrowserTableViewItemNotificationUPP
;
110 this->SetCallbacks(&callbacks
);
112 customCallbacks
.u
.v1
.drawItemCallback
= gDataBrowserTableViewDrawItemUPP
;
113 this->SetCustomCallbacks(&customCallbacks
);
116 this->EnableCellSizeModification();
118 DataBrowserSelectionFlags flags
; // variable definition
120 if (this->GetSelectionFlags(&flags
) == noErr
) // get default settings
122 if ((style
& wxDV_MULTIPLE
) != 0)
123 flags
&= ~kDataBrowserSelectOnlyOne
;
125 flags
|= kDataBrowserSelectOnlyOne
;
126 (void) this->SetSelectionFlags(flags
);
129 OptionBits attributes
; // variable definition
131 if (this->GetAttributes(&attributes
) == noErr
) // get default settings
133 if ((style
& wxDV_VERT_RULES
) != 0)
134 attributes
|= kDataBrowserAttributeListViewDrawColumnDividers
;
136 attributes
&= ~kDataBrowserAttributeListViewDrawColumnDividers
;
137 (void) this->SetAttributes(attributes
);
140 if ((style
& wxDV_NO_HEADER
) != 0)
141 this->SetHeaderButtonHeight(0);
142 } /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */
147 OSStatus
wxMacDataBrowserTableViewControl::SetCallbacks(DataBrowserCallbacks
const* callbacks
)
149 return ::SetDataBrowserCallbacks(this->m_controlRef
,callbacks
);
150 } /* wxMacDataBrowserTableViewControl::SetCallbacks(DataBrowserCallbacks const*) */
152 OSStatus
wxMacDataBrowserTableViewControl::SetCustomCallbacks(DataBrowserCustomCallbacks
const* customCallbacks
)
154 return ::SetDataBrowserCustomCallbacks(this->m_controlRef
,customCallbacks
);
155 } /* xMacDataBrowserTableViewControl::SetCustomCallbacks(DataBrowserCustomCallbacks const*) */
160 OSStatus
wxMacDataBrowserTableViewControl::GetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
) const
162 desc
->version
= kDataBrowserListViewLatestHeaderDesc
; // if this statement is missing the next call will fail (NOT DOCUMENTED!!)
163 return ::GetDataBrowserListViewHeaderDesc(this->m_controlRef
,property
,desc
);
166 OSStatus
wxMacDataBrowserTableViewControl::SetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
)
168 return ::SetDataBrowserListViewHeaderDesc(this->m_controlRef
,property
,desc
);
174 OSStatus
wxMacDataBrowserTableViewControl::AutoSizeColumns()
176 return AutoSizeDataBrowserListViewColumns(this->m_controlRef
);
179 OSStatus
wxMacDataBrowserTableViewControl::EnableCellSizeModification(bool enableHeight
, bool enableWidth
)
181 return ::SetDataBrowserTableViewGeometry(this->GetControlRef(),enableWidth
,enableHeight
);
182 } /* wxMacDataBrowserTableViewControl::EnableCellSizeModification(bool, bool) */
184 OSStatus
wxMacDataBrowserTableViewControl::GetAttributes(OptionBits
* attributes
)
186 return ::DataBrowserGetAttributes(this->GetControlRef(),attributes
);
187 } /* wxMacDataBrowserTableViewControl::GetAttributes(OptionBits*) */
189 OSStatus
wxMacDataBrowserTableViewControl::GetColumnWidth(DataBrowserPropertyID propertyID
, UInt16
* width
) const
191 return ::GetDataBrowserTableViewNamedColumnWidth(this->m_controlRef
,propertyID
,width
);
194 OSStatus
wxMacDataBrowserTableViewControl::GetDefaultColumnWidth( UInt16
*width
) const
196 return GetDataBrowserTableViewColumnWidth(this->m_controlRef
, width
);
199 OSStatus
wxMacDataBrowserTableViewControl::GetDefaultRowHeight(UInt16
* height
) const
201 return ::GetDataBrowserTableViewRowHeight(this->m_controlRef
,height
);
204 OSStatus
wxMacDataBrowserTableViewControl::GetHeaderButtonHeight(UInt16
*height
)
206 return ::GetDataBrowserListViewHeaderBtnHeight(this->m_controlRef
,height
);
209 OSStatus
wxMacDataBrowserTableViewControl::GetPartBounds(DataBrowserItemID item
, DataBrowserPropertyID property
, DataBrowserPropertyPart part
, Rect
* bounds
)
211 return ::GetDataBrowserItemPartBounds(this->m_controlRef
,item
,property
,part
,bounds
);
212 } /* wxMacDataBrowserTableViewControl::GetPartBounds(DataBrowserItemID, DataBrowswerPropertyID, DataBrowserPropertyPart, Rect*) */
214 OSStatus
wxMacDataBrowserTableViewControl::GetRowHeight(DataBrowserItemID item
, UInt16
* height
) const
216 return ::GetDataBrowserTableViewItemRowHeight(this->m_controlRef
,item
,height
);
217 } /* wxMacDataBrowserTableViewControl::GetRowHeight(DataBrowserItemID, UInt16*) const */
219 OSStatus
wxMacDataBrowserTableViewControl::GetScrollPosition( UInt32
*top
, UInt32
*left
) const
221 return GetDataBrowserScrollPosition(this->m_controlRef
, top
, left
);
224 OSStatus
wxMacDataBrowserTableViewControl::SetAttributes(OptionBits attributes
)
226 return ::DataBrowserChangeAttributes(this->GetControlRef(),attributes
,~attributes
);
227 } /* wxMacDataBrowserTableViewControl::SetAttributes(OptionBits) */
229 OSStatus
wxMacDataBrowserTableViewControl::SetColumnWidth(DataBrowserPropertyID propertyID
, UInt16 width
)
231 return ::SetDataBrowserTableViewNamedColumnWidth(this->m_controlRef
,propertyID
,width
);
234 OSStatus
wxMacDataBrowserTableViewControl::SetDefaultColumnWidth(UInt16 width
)
236 return ::SetDataBrowserTableViewColumnWidth(this->m_controlRef
,width
);
239 OSStatus
wxMacDataBrowserTableViewControl::SetDefaultRowHeight(UInt16 height
)
241 return ::SetDataBrowserTableViewRowHeight(this->m_controlRef
,height
);
244 OSStatus
wxMacDataBrowserTableViewControl::SetHasScrollBars(bool horiz
, bool vert
)
246 return ::SetDataBrowserHasScrollBars(this->m_controlRef
,horiz
,vert
);
247 } /* wxMacDataBrowserTableViewControl::SetHasScrollBars(bool, bool) */
249 OSStatus
wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16 height
)
251 return ::SetDataBrowserListViewHeaderBtnHeight(this->m_controlRef
,height
);
252 } /* wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16) */
254 OSStatus
wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle
)
256 return ::SetDataBrowserTableViewHiliteStyle(this->m_controlRef
,hiliteStyle
);
257 } /*wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle) */
259 OSStatus
wxMacDataBrowserTableViewControl::SetIndent(float Indent
)
261 return ::DataBrowserSetMetric(this->m_controlRef
,kDataBrowserMetricDisclosureColumnPerDepthGap
,true,Indent
);
262 } /* wxMacDataBrowserTableViewControl::SetIndent(float* Indent) */
264 OSStatus
wxMacDataBrowserTableViewControl::SetRowHeight(DataBrowserItemID item
, UInt16 height
)
266 return ::SetDataBrowserTableViewItemRowHeight(this->m_controlRef
,item
,height
);
269 OSStatus
wxMacDataBrowserTableViewControl::SetScrollPosition(UInt32 top
, UInt32 left
)
271 return ::SetDataBrowserScrollPosition(this->m_controlRef
,top
,left
);
277 OSStatus
wxMacDataBrowserTableViewControl::GetColumnCount(UInt32
* numColumns
) const
279 return ::GetDataBrowserTableViewColumnCount(this->m_controlRef
,numColumns
);
282 OSStatus
wxMacDataBrowserTableViewControl::GetColumnIndex(DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex
* index
) const
284 return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef
,propertyID
,index
);
285 } /* wxMacDataBrowserTableViewControl::GetColumnIndex(DataBrowserPropertyID, DataBrowserTableViewColumnIndex*) const */
287 OSStatus
wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID
* propertyID
) const
289 for (*propertyID
=kMinPropertyID
; *propertyID
<std::numeric_limits
<DataBrowserPropertyID
>::max(); ++(*propertyID
))
290 if (this->IsUsedPropertyID(*propertyID
) == errDataBrowserPropertyNotFound
)
292 return errDataBrowserPropertyNotSupported
;
293 } /* wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID*) const */
295 OSStatus
wxMacDataBrowserTableViewControl::GetPropertyFlags(DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags
*flags
) const
297 return ::GetDataBrowserPropertyFlags(this->m_controlRef
,propertyID
,flags
);
300 OSStatus
wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserItemDataRef itemData
, DataBrowserPropertyID
* propertyID
)
302 return ::GetDataBrowserItemDataProperty(itemData
,propertyID
);
303 } /* wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserItemDataRef, DataBrowserPropertyID*) */
305 OSStatus
wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserTableViewColumnIndex index
, DataBrowserTableViewColumnID
* propertyID
)
307 return ::GetDataBrowserTableViewColumnProperty(this->m_controlRef
,index
,propertyID
);
308 } /* wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserTableViewColumnIndex, DataBrowserTableViewColumnID*) */
310 OSStatus
wxMacDataBrowserTableViewControl::IsUsedPropertyID(DataBrowserPropertyID propertyID
) const
312 // as the Mac interface does not provide a function that checks if the property id is in use or not a function is chosen that should not
313 // lead to a large overhead for the call but returns an error code if the property id does not exist, here we use the function that returns
314 // the column position for the property id:
315 DataBrowserTableViewColumnIndex index
;
317 return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef
,propertyID
,&index
);
318 } /* wxMacDataBrowserTableViewControl::IsUsedPropertyId(DataBrowserPropertyID) const */
320 OSStatus
wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID
)
322 return ::RemoveDataBrowserTableViewColumn(this->m_controlRef
,propertyID
);
323 } /* wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID) */
325 OSStatus
wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex index
)
327 DataBrowserTableViewColumnID propertyID
;
330 this->GetPropertyID(index
,&propertyID
);
331 return ::RemoveDataBrowserTableViewColumn(this->m_controlRef
,propertyID
);
332 } /* wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex) */
334 OSStatus
wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex index
)
336 return ::SetDataBrowserTableViewColumnPosition(this->m_controlRef
,propertyID
,index
);
337 } /* wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID, DataBrowserTableViewColumnIndex) */
339 OSStatus
wxMacDataBrowserTableViewControl::SetDisclosureColumn(DataBrowserPropertyID propertyID
, Boolean expandableRows
)
341 return ::SetDataBrowserListViewDisclosureColumn(this->m_controlRef
,propertyID
,expandableRows
);
344 OSStatus
wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags flags
)
346 return ::SetDataBrowserPropertyFlags(this->m_controlRef
,propertyID
,flags
);
347 } /* wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID, DataBrowserPropertyFlags) */
352 OSStatus
wxMacDataBrowserTableViewControl::AddItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
)
354 return ::AddDataBrowserItems(this->m_controlRef
,container
,numItems
,items
,preSortProperty
);
355 } /* wxMacDataBrowserTableViewControl::AddItems(DataBrowserItemID, UInt32, DataBrowserItemID const*, DataBrowserPropertyID) */
357 OSStatus
wxMacDataBrowserTableViewControl::GetFreeItemID(DataBrowserItemID
* id
) const
362 verify_noerr(this->GetItemCount(&NoOfItems
));
370 // as there might be a lot of items in the data browser and mostly the data is added item by item the largest used ID number is roughly in the order of magnitude
371 // as the number of items; therefore, start from the number of items to look for a new ID:
372 for (*id
=NoOfItems
; *id
<std::numeric_limits
<DataBrowserItemID
>::max(); ++(*id
))
373 if (this->IsUsedItemID(*id
) == errDataBrowserItemNotFound
)
375 // as the first approach was not successful, try from the beginning:
376 for (*id
=0; *id
<NoOfItems
; ++(*id
))
377 if (this->IsUsedItemID(*id
) == errDataBrowserItemNotFound
)
379 // sorry, data browser is full:
380 return errDataBrowserItemNotAdded
;
382 } /* wxMacDataBrowserTableViewControl::GetFreeItemID(DataBrowserItemID*) const */
384 OSStatus
wxMacDataBrowserTableViewControl::GetItemCount(DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, ItemCount
* numItems
) const
386 return GetDataBrowserItemCount(this->m_controlRef
,container
,recurse
,state
,numItems
);
387 } /* wxMacDataBrowserTableViewControl::GetItemCount(DataBrowserItemID, Boolean, DataBrowserItemState, ItemCount*) const */
389 OSStatus
wxMacDataBrowserTableViewControl::GetItemID( DataBrowserTableViewRowIndex row
, DataBrowserItemID
* item
) const
391 return GetDataBrowserTableViewItemID(this->m_controlRef
,row
,item
);
394 OSStatus
wxMacDataBrowserTableViewControl::GetItems(DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, Handle items
) const
396 return GetDataBrowserItems(this->m_controlRef
,container
,recurse
,state
,items
);
397 } /* wxMacDataBrowserTableViewControl::GetItems(DataBrowserItemID, Boolean, DataBrowserItemState, Handle) const */
399 OSStatus
wxMacDataBrowserTableViewControl::GetItemRow(DataBrowserItemID item
, DataBrowserTableViewRowIndex
* row
) const
401 return GetDataBrowserTableViewItemRow(this->m_controlRef
,item
,row
);
404 OSStatus
wxMacDataBrowserTableViewControl::IsUsedItemID(DataBrowserItemID itemID
) const
406 // as the Mac interface does not provide a function that checks if the property id is in use or not a function is chosen that should not
407 // lead to a large overhead for the call but returns an error code if the property id does not exist, here we use the function that returns
408 // the column position for the property id:
409 DataBrowserTableViewColumnIndex index
;
411 return ::GetDataBrowserTableViewItemRow(this->m_controlRef
,itemID
,&index
);
412 } /* wxMacDataBrowserTableViewControl::IsUsedItemID(DataBrowserItemID) const */
414 OSStatus
wxMacDataBrowserTableViewControl::RemoveItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
)
416 return ::RemoveDataBrowserItems(this->m_controlRef
,container
,numItems
,items
,preSortProperty
);
419 OSStatus
wxMacDataBrowserTableViewControl::RevealItem(DataBrowserItemID item
, DataBrowserPropertyID propertyID
, DataBrowserRevealOptions options
) const
421 return ::RevealDataBrowserItem(this->m_controlRef
,item
,propertyID
,options
);
422 } /* wxMacDataBrowserTableViewControl::RevealItem(DataBrowserItemID item, DataBrowserPropertyID propertyID, DataBrowserRevealOptions options) const */
424 OSStatus
wxMacDataBrowserTableViewControl::UpdateItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
,
425 DataBrowserPropertyID propertyID
) const
427 return UpdateDataBrowserItems(this->m_controlRef
,container
,numItems
,items
,preSortProperty
,propertyID
);
433 size_t wxMacDataBrowserTableViewControl::GetSelectedItemIDs(wxArrayDataBrowserItemID
& itemIDs
) const
435 DataBrowserItemID
* itemIDPtr
;
436 Handle
handle(::NewHandle(0));
441 wxCHECK_MSG(this->GetItems(kDataBrowserNoItem
,true,kDataBrowserItemIsSelected
,handle
) == noErr
,0,_("Could not get selected items."));
442 NoOfItems
= static_cast<size_t>(::GetHandleSize(handle
)/sizeof(DataBrowserItemID
));
444 itemIDs
.Alloc(NoOfItems
);
446 itemIDPtr
= (DataBrowserItemID
*) (*handle
);
447 for (size_t i
=0; i
<NoOfItems
; ++i
)
449 itemIDs
.Add(*itemIDPtr
);
453 DisposeHandle(handle
);
455 } /* wxMacDataBrowserTableViewControl::GetSelectedItemIDs(wxArrayDataBrowserItemID&) const*/
457 OSStatus
wxMacDataBrowserTableViewControl::GetSelectionAnchor(DataBrowserItemID
* first
, DataBrowserItemID
* last
) const
459 return ::GetDataBrowserSelectionAnchor(this->m_controlRef
,first
,last
);
460 } /* wxMacDataBrowserTableViewControl::GetSelectionAnchor(DataBrowserItemID*, DataBrowserItemID*) const */
462 OSStatus
wxMacDataBrowserTableViewControl::GetSelectionFlags(DataBrowserSelectionFlags
* flags
) const
464 return ::GetDataBrowserSelectionFlags(this->m_controlRef
,flags
);
465 } /* wxMacDataBrowserTableViewControl::GetSelectionFlags(DataBrowserSelectionFlags*) const */
467 bool wxMacDataBrowserTableViewControl::IsItemSelected(DataBrowserItemID item
) const
469 return ::IsDataBrowserItemSelected(this->m_controlRef
,item
);
470 } /* wxMacDataBrowserTableViewControl::IsItemSelected(DataBrowserItemID) const */
472 OSStatus
wxMacDataBrowserTableViewControl::SetSelectionFlags(DataBrowserSelectionFlags flags
)
474 return ::SetDataBrowserSelectionFlags(this->m_controlRef
,flags
);
475 } /* wxMacDataBrowserTableViewControl::SetSelectionFlags(DataBrowserSelectionFlags) */
477 OSStatus
wxMacDataBrowserTableViewControl::SetSelectedItems(UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserSetOption operation
)
479 return ::SetDataBrowserSelectedItems(this->m_controlRef
, numItems
, items
, operation
);
480 } /* wxMacDataBrowserTableViewControl::SetSelectedItems(UInt32, DataBrowserItemID const*, DataBrowserSetOption) */
482 OSStatus
wxMacDataBrowserTableViewControl::GetSortOrder(DataBrowserSortOrder
* order
) const
484 return ::GetDataBrowserSortOrder(this->m_controlRef
,order
);
487 OSStatus
wxMacDataBrowserTableViewControl::GetSortProperty(DataBrowserPropertyID
* propertyID
) const
489 return ::GetDataBrowserSortProperty(this->m_controlRef
,propertyID
);
492 OSStatus
wxMacDataBrowserTableViewControl::Resort(DataBrowserItemID container
, Boolean sortChildren
)
494 return ::SortDataBrowserContainer(this->m_controlRef
,container
,sortChildren
);
495 } /* wxMacDataBrowserTableViewControl::Resort(DataBrowserItemID, Boolean) */
497 OSStatus
wxMacDataBrowserTableViewControl::SetSortOrder(DataBrowserSortOrder order
)
499 return ::SetDataBrowserSortOrder(this->m_controlRef
,order
);
502 OSStatus
wxMacDataBrowserTableViewControl::SetSortProperty(DataBrowserPropertyID propertyID
)
504 return ::SetDataBrowserSortProperty(this->m_controlRef
,propertyID
);
508 // container handling
510 OSStatus
wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID containerID
)
512 return ::CloseDataBrowserContainer(this->m_controlRef
,containerID
);
513 } /* wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID) */
515 OSStatus
wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID containerID
)
517 return ::OpenDataBrowserContainer(this->m_controlRef
,containerID
);
518 } /* wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID) */
520 IMPLEMENT_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl
,wxMacControl
)
522 // ============================================================================
523 // wxMacDataBrowserListViewControl
524 // ============================================================================
529 OSStatus
wxMacDataBrowserListViewControl::AddColumn(DataBrowserListViewColumnDesc
*columnDesc
, DataBrowserTableViewColumnIndex position
)
531 return AddDataBrowserListViewColumn(this->m_controlRef
,columnDesc
,position
);
532 } /* wxMacDataBrowserListViewControl::AddColumn(DataBrowserListViewColumnDesc*, DataBrowserTableViewColumnIndex) */
534 // ============================================================================
535 // wxMacDataViewDataBrowserListViewControl
536 // ============================================================================
539 // constructors / destructor
541 wxMacDataViewDataBrowserListViewControl::wxMacDataViewDataBrowserListViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
)
542 :wxMacDataBrowserListViewControl(peer
,pos
,size
,style
)
544 } /* wxMacDataViewDataBrowserListViewControl::wxMacDataViewDataBrowserListViewControl(wxWindow* , const wxPoint&, const wxSize&, long) */
547 // callback functions (inherited from wxMacDataBrowserTableViewControl)
549 Boolean
wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
)
551 DataBrowserSortOrder sortOrder
;
553 DataBrowserTableViewColumnIndex columnIndex
;
555 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
558 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
, false,_("Pointer to data view control not set correctly."));
559 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,false,_("Pointer to model not set correctly."));
560 if (sortProperty
>= kMinPropertyID
)
562 wxCHECK_MSG(this->GetColumnIndex(sortProperty
,&columnIndex
) == noErr
,false,_("Could not determine column index."));
566 this->GetSortOrder(&sortOrder
);
567 return static_cast<Boolean
>(dataViewCtrlPtr
->GetModel()->Compare(wxDataViewItem(reinterpret_cast<void*>(itemOneID
)),wxDataViewItem(reinterpret_cast<void*>(itemTwoID
)),
568 columnIndex
,sortOrder
!= kDataBrowserOrderDecreasing
) < 0);
569 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID, DataBrowserItemID, DataBrowserPropertyID) */
571 void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
)
573 DataBrowserTableViewColumnIndex columnIndex
;
575 wxDataViewColumn
* dataViewColumnPtr
;
577 wxDataViewCtrl
* dataViewCtrlPtr
;
579 wxDataViewCustomRenderer
* dataViewCustomRendererPtr
;
581 wxVariant dataToRender
;
584 dataViewCtrlPtr
= dynamic_cast<wxDataViewCtrl
*>(this->GetPeer());
585 wxCHECK_RET(dataViewCtrlPtr
!= NULL
, _("Pointer to data view control not set correctly."));
586 wxCHECK_RET(dataViewCtrlPtr
->GetModel() != NULL
, _("Pointer to model not set correctly."));
587 wxCHECK_RET(this->GetColumnIndex(propertyID
,&columnIndex
) == noErr
,_("Could not determine column index."));
588 dataViewColumnPtr
= dataViewCtrlPtr
->GetColumn(columnIndex
);
589 wxCHECK_RET(dataViewColumnPtr
!= NULL
,_("No column for the specified column index existing."));
590 dataViewCustomRendererPtr
= dynamic_cast<wxDataViewCustomRenderer
*>(dataViewColumnPtr
->GetRenderer());
591 wxCHECK_RET(dataViewCustomRendererPtr
!= NULL
,_("No renderer or invalid renderer type specified for custom data column."));
592 dataViewCtrlPtr
->GetModel()->GetValue(dataToRender
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),columnIndex
);
593 dataViewCustomRendererPtr
->SetValue(dataToRender
);
595 // try to determine the content's size (drawable part):
597 RgnHandle
rgn(NewRgn());
600 if (this->GetRegion(kControlContentMetaPart
,rgn
) == noErr
)
601 GetRegionBounds(rgn
,&content
);
603 this->GetRect(&content
);
605 // space for the header
606 this->GetHeaderButtonHeight(&headerHeight
);
607 content
.top
+= headerHeight
;
608 // extra space for the frame (todo: do not how to determine the space automatically from the control)
613 // extra space for the scrollbars:
614 content
.bottom
-= wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y
);
615 content
.right
-= wxSystemSettings::GetMetric(wxSYS_VSCROLL_X
);
617 // make sure that 'Render' can draw only in the allowed area:
618 dataViewCustomRendererPtr
->GetDC()->SetClippingRegion(content
.left
,content
.top
,content
.right
-content
.left
+1,content
.bottom
-content
.top
+1);
619 (void) (dataViewCustomRendererPtr
->Render(wxRect(static_cast<int>(rectangle
->left
),static_cast<int>(rectangle
->top
),
620 static_cast<int>(1+rectangle
->right
-rectangle
->left
),static_cast<int>(1+rectangle
->bottom
-rectangle
->top
)),
621 dataViewCustomRendererPtr
->GetDC(),((state
== kDataBrowserItemIsSelected
) ? wxDATAVIEW_CELL_SELECTED
: 0)));
622 dataViewCustomRendererPtr
->GetDC()->DestroyClippingRegion(); // probably not necessary
623 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
625 OSStatus
wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemDataRef itemData
, Boolean getValue
)
629 // variable definitions:
630 wxDataViewCtrl
* dataViewCtrlPtr
;
632 dataViewCtrlPtr
= dynamic_cast<wxDataViewCtrl
*>(this->GetPeer());
633 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
634 if (dataViewCtrlPtr
->IsDeleting())
635 return noErr
; // if a delete process is running the data of editable fields cannot be saved because the associated model variable may already have been deleted
638 // variable definitions:
639 DataBrowserTableViewColumnIndex columnIndex
;
640 OSStatus errorStatus
;
641 wxDataViewColumn
* dataViewColumnPtr
;
643 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,errDataBrowserNotConfigured
,_("Pointer to model not set correctly."));
644 errorStatus
= this->GetColumnIndex(propertyID
,&columnIndex
);
645 wxCHECK_MSG(errorStatus
== noErr
,errorStatus
,_("Could not determine column index"));
646 dataViewColumnPtr
= dataViewCtrlPtr
->GetColumn(columnIndex
);
647 wxCHECK_MSG((dataViewColumnPtr
!= NULL
) && (dataViewColumnPtr
->GetRenderer() != NULL
),errDataBrowserNotConfigured
,_("There is no column or renderer for the specified column index."));
648 switch (dataViewColumnPtr
->GetRenderer()->GetPropertyType())
650 case kDataBrowserCheckboxType
:
652 // variable definition:
653 ThemeButtonValue buttonValue
;
655 errorStatus
= ::GetDataBrowserItemDataButtonValue(itemData
,&buttonValue
);
656 if (errorStatus
== noErr
)
658 if (buttonValue
== kThemeButtonOn
)
660 // variable definition and initialization:
661 wxVariant
modifiedData(true);
663 return (dataViewCtrlPtr
->GetModel()->SetValue(modifiedData
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),static_cast<unsigned int>(columnIndex
)) ? OSStatus(noErr
) : OSStatus(errDataBrowserNotConfigured
));
665 else if (buttonValue
== kThemeButtonOff
)
667 // variable definition and initialization:
668 wxVariant
modifiedData(false);
670 return (dataViewCtrlPtr
->GetModel()->SetValue(modifiedData
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),static_cast<unsigned int>(columnIndex
)) ? OSStatus(noErr
) : OSStatus(errDataBrowserNotConfigured
));
673 return errDataBrowserInvalidPropertyData
;
678 case kDataBrowserTextType
:
680 // variable definitions:
681 CFStringRef stringReference
;
683 errorStatus
= ::GetDataBrowserItemDataText(itemData
,&stringReference
);
684 if (errorStatus
== noErr
)
686 // variable definitions and initializations:
687 wxMacCFStringHolder
modifiedString(stringReference
);
688 wxVariant
modifiedData(modifiedString
.AsString());
690 if (dataViewCtrlPtr
->GetModel()->SetValue(modifiedData
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),static_cast<unsigned int>(columnIndex
)))
693 return errDataBrowserNotConfigured
;
699 return errDataBrowserPropertyNotSupported
;
705 if (propertyID
>= kMinPropertyID
) // in case data columns set the data
707 // variable definitions:
709 wxDataViewColumn
* dataViewColumnPtr
;
710 wxDataViewCtrl
* dataViewCtrlPtr
;
712 dataViewCtrlPtr
= dynamic_cast<wxDataViewCtrl
*>(this->GetPeer());
713 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
714 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,errDataBrowserNotConfigured
,_("Pointer to model not set correctly."));
715 dataViewColumnPtr
= dataViewCtrlPtr
->GetColumnPtr(propertyID
);
716 wxCHECK_MSG(dataViewColumnPtr
!= NULL
,errDataBrowserNotConfigured
,_("No column for the specified column position existing."));
717 wxCHECK_MSG(dataViewColumnPtr
->GetRenderer() != NULL
,errDataBrowserNotConfigured
,_("No renderer specified for column."));
718 dataViewCtrlPtr
->GetModel()->GetValue(variant
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),dataViewColumnPtr
->GetModelColumn());
719 if (!(variant
.IsNull()))
721 dataViewColumnPtr
->GetRenderer()->SetDataReference(itemData
);
722 dataViewColumnPtr
->GetRenderer()->SetValue(variant
);
723 wxCHECK_MSG(dataViewColumnPtr
->GetRenderer()->Render(),errDataBrowserNotConfigured
,_("Rendering failed."));
727 else // react on special system requests
731 case kDataBrowserContainerIsClosableProperty
:
733 // variable definitions:
734 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
736 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
737 // initialize wxWidget event:
738 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING
,dataViewCtrlPtr
->GetId()); // variable definition
740 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
741 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
742 // finally send the equivalent wxWidget event:
743 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
744 // opening the container is allowed if not vetoed:
745 return ::SetDataBrowserItemDataBooleanValue(itemData
,dataViewEvent
.IsAllowed());
747 case kDataBrowserContainerIsOpenableProperty
:
749 // variable definitions:
750 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
752 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
753 // initialize wxWidget event:
754 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING
,dataViewCtrlPtr
->GetId()); // variable definition
756 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
757 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
758 // finally send the equivalent wxWidget event:
759 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
760 // opening the container is allowed if not vetoed:
761 return ::SetDataBrowserItemDataBooleanValue(itemData
,dataViewEvent
.IsAllowed());
763 case kDataBrowserItemIsContainerProperty
:
765 // variable definition:
766 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
768 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
769 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,errDataBrowserNotConfigured
,_("Pointer to model not set correctly."));
770 return ::SetDataBrowserItemDataBooleanValue(itemData
,dataViewCtrlPtr
->GetModel()->IsContainer(wxDataViewItem(reinterpret_cast<void*>(itemID
))));
772 case kDataBrowserItemIsEditableProperty
:
773 return ::SetDataBrowserItemDataBooleanValue(itemData
,true);
777 return errDataBrowserPropertyNotSupported
;
778 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemDataRef, Boolean) */
780 void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
)
782 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
785 // check if the data view control pointer still exists because this call back function can still be called when the control has already been deleted:
786 if (dataViewCtrlPtr
!= NULL
)
789 case kDataBrowserContainerClosed
:
791 // initialize wxWidget event:
792 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED
,dataViewCtrlPtr
->GetId()); // variable definition
794 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
795 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
796 // finally send the equivalent wxWidget event:
797 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
800 case kDataBrowserContainerOpened
:
802 // initialize wxWidget event:
803 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED
,dataViewCtrlPtr
->GetId()); // variable definition
805 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
806 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
807 // finally send the equivalent wxWidget event:
808 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
809 // add children to the expanded container:
810 dataViewCtrlPtr
->AddChildrenLevel(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
813 case kDataBrowserEditStarted
:
815 // initialize wxWidget event:
816 DataBrowserPropertyID propertyID
;
817 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED
,dataViewCtrlPtr
->GetId()); // variable definition
819 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
820 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
821 if (this->GetPropertyID(itemData
,&propertyID
) == noErr
)
823 // variable definition and initialization:
824 DataBrowserTableViewColumnIndex columnIndex
;
826 wxCHECK_RET(this->GetColumnIndex(propertyID
,&columnIndex
),_("Column index not found."));
827 dataViewEvent
.SetColumn(columnIndex
);
828 dataViewEvent
.SetDataViewColumn(dataViewCtrlPtr
->GetColumnPtr(propertyID
));
830 // finally send the equivalent wxWidget event:
831 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
834 case kDataBrowserEditStopped
:
836 // initialize wxWidget event:
837 DataBrowserPropertyID propertyID
;
838 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE
,dataViewCtrlPtr
->GetId()); // variable definition
840 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
841 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
842 if (this->GetPropertyID(itemData
,&propertyID
) == noErr
)
844 // variable definition and initialization:
845 DataBrowserTableViewColumnIndex columnIndex
;
847 wxCHECK_RET(this->GetColumnIndex(propertyID
,&columnIndex
),_("Column index not found."));
848 dataViewEvent
.SetColumn(columnIndex
);
849 dataViewEvent
.SetDataViewColumn(dataViewCtrlPtr
->GetColumnPtr(propertyID
));
851 // finally send the equivalent wxWidget event:
852 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
855 case kDataBrowserItemAdded
:
856 break; // not used anymore
857 case kDataBrowserItemDeselected
:
858 break; // not implemented by wxWidgets; see kDataBrowserSelectionSetChanged
859 case kDataBrowserItemDoubleClicked
:
861 // initialize wxWidget event:
862 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED
,dataViewCtrlPtr
->GetId()); // variable definition
864 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
865 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
866 // finally send the equivalent wxWidget event:
867 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
870 case kDataBrowserItemRemoved
:
871 break; // not used anymore
872 case kDataBrowserItemSelected
:
873 break; // not implemented by wxWidgets; see kDataBrowserSelectionSetChanged
874 case kDataBrowserSelectionSetChanged
:
876 // initialize wxWidget event:
877 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED
,dataViewCtrlPtr
->GetId()); // variable definition
879 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
880 dataViewEvent
.SetModel (dataViewCtrlPtr
->GetModel());
881 // finally send the equivalent wxWidget event:
882 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
885 case kDataBrowserUserStateChanged
:
887 // update column widths:
888 for (size_t i
=0; i
<dataViewCtrlPtr
->GetColumnCount(); ++i
)
890 // constant definition for abbreviational purposes:
891 wxDataViewColumn
* const columnPtr
= dataViewCtrlPtr
->GetColumn(i
);
892 // variable definition:
895 wxCHECK_RET(this->GetColumnWidth(columnPtr
->GetPropertyID(),&columnWidth
) == noErr
,_("Column width could not be determined"));
896 columnPtr
->SetWidthVariable(columnWidth
);
898 // update order status:
899 DataBrowserPropertyID propertyID
; // variable definition
901 if ((this->GetSortProperty(&propertyID
) == noErr
) && (propertyID
>= kMinPropertyID
))
903 DataBrowserSortOrder sortOrder
;
904 DataBrowserTableViewColumnIndex columnIndex
;
906 if ((this->GetSortOrder(&sortOrder
) == noErr
) && (this->GetColumnIndex(propertyID
,&columnIndex
) == noErr
))
908 // variable definition and initialization:
909 wxDataViewColumn
* columnPtr
;
910 columnPtr
= dataViewCtrlPtr
->GetColumn(columnIndex
);
911 // check if the sort order has changed:
912 if ( columnPtr
->IsSortOrderAscending() && (sortOrder
== kDataBrowserOrderDecreasing
) ||
913 !(columnPtr
->IsSortOrderAscending()) && (sortOrder
== kDataBrowserOrderIncreasing
))
915 columnPtr
->SetSortOrder(!(columnPtr
->IsSortOrderAscending()));
916 // initialize wxWidget event:
917 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED
,dataViewCtrlPtr
->GetId()); // variable defintion
919 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
920 dataViewEvent
.SetColumn(columnIndex
);
921 dataViewEvent
.SetDataViewColumn(columnPtr
);
922 // finally send the equivalent wxWidget event:
923 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
930 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID, DataBrowserItemNotification, DataBrowserItemDataRef) */
933 #endif // wxUSE_GENERICDATAVIEWCTRL