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
21 #include "wx/wxprec.h"
27 #include "wx/toplevel.h"
31 #include "wx/apptrait.h"
33 #include "wx/mac/uma.h"
37 #include <Carbon/Carbon.h>
39 #include <ATSUnicode.h>
40 #include <TextCommon.h>
41 #include <TextEncodingConverter.h>
44 #include "wx/mac/private.h"
46 #if defined(__MWERKS__) && wxUSE_UNICODE
47 #if __MWERKS__ < 0x4100 || !defined(__DARWIN__)
54 #include "wx/mac/carbon/databrow.h"
56 #include "wx/dataview.h"
58 // ============================================================================
59 // wxMacDataBrowserTableViewControl
60 // ============================================================================
62 pascal Boolean
wxMacDataBrowserTableViewControl::DataBrowserCompareProc(ControlRef browser
, DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
)
64 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
67 if (ControlPtr
!= NULL
)
68 return ControlPtr
->DataBrowserCompareProc(itemOneID
,itemTwoID
,sortProperty
);
70 return errDataBrowserPropertyNotSupported
;
71 } /* wxMacDataBrowserTableViewControl::DataBrowserCompareProc(ControlRef, DataBrowserItemID, DataBrowserItemID, DataBrowserPropertyID) */
73 pascal void wxMacDataBrowserTableViewControl::DataBrowserDrawItemProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
)
75 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
78 if (ControlPtr
!= NULL
)
79 ControlPtr
->DataBrowserDrawItemProc(itemID
,property
,state
,rectangle
,bitDepth
,colorDevice
);
80 } /* wxMacDataBrowserTableViewControl::DataBrowserDrawItemProc(ControlRef, DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
82 pascal OSStatus
wxMacDataBrowserTableViewControl::DataBrowserGetSetItemDataProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserPropertyID property
, DataBrowserItemDataRef itemData
, Boolean getValue
)
84 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
87 if (ControlPtr
!= NULL
)
88 return ControlPtr
->DataBrowserGetSetItemDataProc(itemID
,property
,itemData
,getValue
);
90 return errDataBrowserPropertyNotSupported
;
91 } /* wxMacDataBrowserTableViewControl::DataBrowserGetSetItemDataProc(ControlRef, DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemDataRef, Boolean) */
93 pascal void wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc(ControlRef browser
, DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
)
95 wxMacDataBrowserTableViewControl
* ControlPtr(dynamic_cast<wxMacDataBrowserTableViewControl
*>(wxMacControl::GetReferenceFromNativeControl(browser
)));
98 if (ControlPtr
!= NULL
)
99 ControlPtr
->DataBrowserItemNotificationProc(itemID
,message
,itemData
);
100 } /* wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc(ControlRef, DataBrowserItemID, DataBrowserItemNotification, DataBrowserItemDataRef) */
102 DataBrowserDrawItemUPP gDataBrowserTableViewDrawItemUPP
= NULL
;
103 DataBrowserItemCompareUPP gDataBrowserTableViewItemCompareUPP
= NULL
;
104 DataBrowserItemDataUPP gDataBrowserTableViewItemDataUPP
= NULL
;
105 DataBrowserItemNotificationUPP gDataBrowserTableViewItemNotificationUPP
= NULL
;
107 wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
)
110 Rect bounds
= wxMacGetBoundsForControl(peer
,pos
,size
);
111 OSStatus err
= ::CreateDataBrowserControl(MAC_WXHWND(peer
->MacGetTopLevelWindowRef()),&bounds
,kDataBrowserListView
,&(this->m_controlRef
));
114 SetReferenceInNativeControl();
116 if (gDataBrowserTableViewDrawItemUPP
== NULL
) gDataBrowserTableViewDrawItemUPP
= NewDataBrowserDrawItemUPP (DataBrowserDrawItemProc
);
117 if (gDataBrowserTableViewItemCompareUPP
== NULL
) gDataBrowserTableViewItemCompareUPP
= NewDataBrowserItemCompareUPP(wxMacDataBrowserTableViewControl::DataBrowserCompareProc
);
118 if (gDataBrowserTableViewItemDataUPP
== NULL
) gDataBrowserTableViewItemDataUPP
= NewDataBrowserItemDataUPP (wxMacDataBrowserTableViewControl::DataBrowserGetSetItemDataProc
);
119 if (gDataBrowserTableViewItemNotificationUPP
== NULL
)
121 gDataBrowserTableViewItemNotificationUPP
=
122 #if TARGET_API_MAC_OSX
123 (DataBrowserItemNotificationUPP
) NewDataBrowserItemNotificationWithItemUPP(wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc
);
125 NewDataBrowserItemNotificationUPP(wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc
);
129 DataBrowserCallbacks callbacks
;
130 DataBrowserCustomCallbacks customCallbacks
;
132 InitializeDataBrowserCallbacks (&callbacks
, kDataBrowserLatestCallbacks
);
133 InitializeDataBrowserCustomCallbacks(&customCallbacks
,kDataBrowserLatestCallbacks
);
135 callbacks
.u
.v1
.itemDataCallback
= gDataBrowserTableViewItemDataUPP
;
136 callbacks
.u
.v1
.itemCompareCallback
= gDataBrowserTableViewItemCompareUPP
;
137 callbacks
.u
.v1
.itemNotificationCallback
= gDataBrowserTableViewItemNotificationUPP
;
138 this->SetCallbacks(&callbacks
);
140 customCallbacks
.u
.v1
.drawItemCallback
= gDataBrowserTableViewDrawItemUPP
;
141 this->SetCustomCallbacks(&customCallbacks
);
144 this->EnableCellSizeModification();
146 DataBrowserSelectionFlags flags
; // variable definition
148 if (this->GetSelectionFlags(&flags
) == noErr
) // get default settings
150 if ((style
& wxDV_MULTIPLE
) != 0)
151 flags
&= ~kDataBrowserSelectOnlyOne
;
153 flags
|= kDataBrowserSelectOnlyOne
;
154 (void) this->SetSelectionFlags(flags
);
156 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
157 OptionBits attributes
; // variable definition
159 if (this->GetAttributes(&attributes
) == noErr
) // get default settings
161 if ((style
& wxDV_VERT_RULES
) != 0)
162 attributes
|= kDataBrowserAttributeListViewDrawColumnDividers
;
164 attributes
&= ~kDataBrowserAttributeListViewDrawColumnDividers
;
165 (void) this->SetAttributes(attributes
);
168 if ((style
& wxDV_NO_HEADER
) != 0)
169 this->SetHeaderButtonHeight(0);
170 } /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */
175 OSStatus
wxMacDataBrowserTableViewControl::SetCallbacks(DataBrowserCallbacks
const* callbacks
)
177 return ::SetDataBrowserCallbacks(this->m_controlRef
,callbacks
);
178 } /* wxMacDataBrowserTableViewControl::SetCallbacks(DataBrowserCallbacks const*) */
180 OSStatus
wxMacDataBrowserTableViewControl::SetCustomCallbacks(DataBrowserCustomCallbacks
const* customCallbacks
)
182 return ::SetDataBrowserCustomCallbacks(this->m_controlRef
,customCallbacks
);
183 } /* xMacDataBrowserTableViewControl::SetCustomCallbacks(DataBrowserCustomCallbacks const*) */
188 OSStatus
wxMacDataBrowserTableViewControl::GetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
) const
190 desc
->version
= kDataBrowserListViewLatestHeaderDesc
; // if this statement is missing the next call will fail (NOT DOCUMENTED!!)
191 return ::GetDataBrowserListViewHeaderDesc(this->m_controlRef
,property
,desc
);
194 OSStatus
wxMacDataBrowserTableViewControl::SetHeaderDesc(DataBrowserPropertyID property
, DataBrowserListViewHeaderDesc
* desc
)
196 return ::SetDataBrowserListViewHeaderDesc(this->m_controlRef
,property
,desc
);
202 OSStatus
wxMacDataBrowserTableViewControl::AutoSizeColumns()
204 return AutoSizeDataBrowserListViewColumns(this->m_controlRef
);
207 OSStatus
wxMacDataBrowserTableViewControl::EnableCellSizeModification(bool enableHeight
, bool enableWidth
)
209 return ::SetDataBrowserTableViewGeometry(this->GetControlRef(),enableWidth
,enableHeight
);
210 } /* wxMacDataBrowserTableViewControl::EnableCellSizeModification(bool, bool) */
212 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
213 OSStatus
wxMacDataBrowserTableViewControl::GetAttributes(OptionBits
* attributes
)
215 return ::DataBrowserGetAttributes(this->GetControlRef(),attributes
);
216 } /* wxMacDataBrowserTableViewControl::GetAttributes(OptionBits*) */
219 OSStatus
wxMacDataBrowserTableViewControl::GetColumnWidth(DataBrowserPropertyID propertyID
, UInt16
* width
) const
221 return ::GetDataBrowserTableViewNamedColumnWidth(this->m_controlRef
,propertyID
,width
);
224 OSStatus
wxMacDataBrowserTableViewControl::GetDefaultColumnWidth( UInt16
*width
) const
226 return GetDataBrowserTableViewColumnWidth(this->m_controlRef
, width
);
229 OSStatus
wxMacDataBrowserTableViewControl::GetDefaultRowHeight(UInt16
* height
) const
231 return ::GetDataBrowserTableViewRowHeight(this->m_controlRef
,height
);
234 OSStatus
wxMacDataBrowserTableViewControl::GetHeaderButtonHeight(UInt16
*height
)
236 return ::GetDataBrowserListViewHeaderBtnHeight(this->m_controlRef
,height
);
239 OSStatus
wxMacDataBrowserTableViewControl::GetPartBounds(DataBrowserItemID item
, DataBrowserPropertyID property
, DataBrowserPropertyPart part
, Rect
* bounds
)
241 return ::GetDataBrowserItemPartBounds(this->m_controlRef
,item
,property
,part
,bounds
);
242 } /* wxMacDataBrowserTableViewControl::GetPartBounds(DataBrowserItemID, DataBrowswerPropertyID, DataBrowserPropertyPart, Rect*) */
244 OSStatus
wxMacDataBrowserTableViewControl::GetRowHeight(DataBrowserItemID item
, UInt16
* height
) const
246 return ::GetDataBrowserTableViewItemRowHeight(this->m_controlRef
,item
,height
);
247 } /* wxMacDataBrowserTableViewControl::GetRowHeight(DataBrowserItemID, UInt16*) const */
249 OSStatus
wxMacDataBrowserTableViewControl::GetScrollPosition( UInt32
*top
, UInt32
*left
) const
251 return GetDataBrowserScrollPosition(this->m_controlRef
, top
, left
);
254 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
255 OSStatus
wxMacDataBrowserTableViewControl::SetAttributes(OptionBits attributes
)
257 return ::DataBrowserChangeAttributes(this->GetControlRef(),attributes
,~attributes
);
258 } /* wxMacDataBrowserTableViewControl::SetAttributes(OptionBits) */
261 OSStatus
wxMacDataBrowserTableViewControl::SetColumnWidth(DataBrowserPropertyID propertyID
, UInt16 width
)
263 return ::SetDataBrowserTableViewNamedColumnWidth(this->m_controlRef
,propertyID
,width
);
266 OSStatus
wxMacDataBrowserTableViewControl::SetDefaultColumnWidth(UInt16 width
)
268 return ::SetDataBrowserTableViewColumnWidth(this->m_controlRef
,width
);
271 OSStatus
wxMacDataBrowserTableViewControl::SetDefaultRowHeight(UInt16 height
)
273 return ::SetDataBrowserTableViewRowHeight(this->m_controlRef
,height
);
276 OSStatus
wxMacDataBrowserTableViewControl::SetHasScrollBars(bool horiz
, bool vert
)
278 return ::SetDataBrowserHasScrollBars(this->m_controlRef
,horiz
,vert
);
279 } /* wxMacDataBrowserTableViewControl::SetHasScrollBars(bool, bool) */
281 OSStatus
wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16 height
)
283 return ::SetDataBrowserListViewHeaderBtnHeight(this->m_controlRef
,height
);
284 } /* wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16) */
286 OSStatus
wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle
)
288 return ::SetDataBrowserTableViewHiliteStyle(this->m_controlRef
,hiliteStyle
);
289 } /*wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle) */
291 OSStatus
wxMacDataBrowserTableViewControl::SetIndent(float Indent
)
293 return ::DataBrowserSetMetric(this->m_controlRef
,kDataBrowserMetricDisclosureColumnPerDepthGap
,true,Indent
);
294 } /* wxMacDataBrowserTableViewControl::SetIndent(float* Indent) */
296 OSStatus
wxMacDataBrowserTableViewControl::SetRowHeight(DataBrowserItemID item
, UInt16 height
)
298 return ::SetDataBrowserTableViewItemRowHeight(this->m_controlRef
,item
,height
);
301 OSStatus
wxMacDataBrowserTableViewControl::SetScrollPosition(UInt32 top
, UInt32 left
)
303 return ::SetDataBrowserScrollPosition(this->m_controlRef
,top
,left
);
309 OSStatus
wxMacDataBrowserTableViewControl::GetColumnCount(UInt32
* numColumns
) const
311 return ::GetDataBrowserTableViewColumnCount(this->m_controlRef
,numColumns
);
314 OSStatus
wxMacDataBrowserTableViewControl::GetColumnIndex(DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex
* index
) const
316 return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef
,propertyID
,index
);
317 } /* wxMacDataBrowserTableViewControl::GetColumnIndex(DataBrowserPropertyID, DataBrowserTableViewColumnIndex*) const */
319 OSStatus
wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID
* propertyID
) const
321 for (*propertyID
=kMinPropertyID
; *propertyID
<std::numeric_limits
<DataBrowserPropertyID
>::max(); ++(*propertyID
))
322 if (this->IsUsedPropertyID(*propertyID
) == errDataBrowserPropertyNotFound
)
324 return errDataBrowserPropertyNotSupported
;
325 } /* wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID*) const */
327 OSStatus
wxMacDataBrowserTableViewControl::GetPropertyFlags(DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags
*flags
) const
329 return ::GetDataBrowserPropertyFlags(this->m_controlRef
,propertyID
,flags
);
332 OSStatus
wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserItemDataRef itemData
, DataBrowserPropertyID
* propertyID
)
334 return ::GetDataBrowserItemDataProperty(itemData
,propertyID
);
335 } /* wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserItemDataRef, DataBrowserPropertyID*) */
337 OSStatus
wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserTableViewColumnIndex index
, DataBrowserTableViewColumnID
* propertyID
)
339 return ::GetDataBrowserTableViewColumnProperty(this->m_controlRef
,index
,propertyID
);
340 } /* wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserTableViewColumnIndex, DataBrowserTableViewColumnID*) */
342 OSStatus
wxMacDataBrowserTableViewControl::IsUsedPropertyID(DataBrowserPropertyID propertyID
) const
344 // 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
345 // 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
346 // the column position for the property id:
347 DataBrowserTableViewColumnIndex index
;
349 return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef
,propertyID
,&index
);
350 } /* wxMacDataBrowserTableViewControl::IsUsedPropertyId(DataBrowserPropertyID) const */
352 OSStatus
wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID
)
354 return ::RemoveDataBrowserTableViewColumn(this->m_controlRef
,propertyID
);
355 } /* wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID) */
357 OSStatus
wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex index
)
359 DataBrowserTableViewColumnID propertyID
;
362 this->GetPropertyID(index
,&propertyID
);
363 return ::RemoveDataBrowserTableViewColumn(this->m_controlRef
,propertyID
);
364 } /* wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex) */
366 OSStatus
wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID propertyID
, DataBrowserTableViewColumnIndex index
)
368 return ::SetDataBrowserTableViewColumnPosition(this->m_controlRef
,propertyID
,index
);
369 } /* wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID, DataBrowserTableViewColumnIndex) */
371 OSStatus
wxMacDataBrowserTableViewControl::SetDisclosureColumn(DataBrowserPropertyID propertyID
, Boolean expandableRows
)
373 return ::SetDataBrowserListViewDisclosureColumn(this->m_controlRef
,propertyID
,expandableRows
);
376 OSStatus
wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID propertyID
, DataBrowserPropertyFlags flags
)
378 return ::SetDataBrowserPropertyFlags(this->m_controlRef
,propertyID
,flags
);
379 } /* wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID, DataBrowserPropertyFlags) */
384 OSStatus
wxMacDataBrowserTableViewControl::AddItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
)
386 return ::AddDataBrowserItems(this->m_controlRef
,container
,numItems
,items
,preSortProperty
);
387 } /* wxMacDataBrowserTableViewControl::AddItems(DataBrowserItemID, UInt32, DataBrowserItemID const*, DataBrowserPropertyID) */
389 OSStatus
wxMacDataBrowserTableViewControl::GetFreeItemID(DataBrowserItemID
* id
) const
394 verify_noerr(this->GetItemCount(&NoOfItems
));
402 // 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
403 // as the number of items; therefore, start from the number of items to look for a new ID:
404 for (*id
=NoOfItems
; *id
<std::numeric_limits
<DataBrowserItemID
>::max(); ++(*id
))
405 if (this->IsUsedItemID(*id
) == errDataBrowserItemNotFound
)
407 // as the first approach was not successful, try from the beginning:
408 for (*id
=0; *id
<NoOfItems
; ++(*id
))
409 if (this->IsUsedItemID(*id
) == errDataBrowserItemNotFound
)
411 // sorry, data browser is full:
412 return errDataBrowserItemNotAdded
;
414 } /* wxMacDataBrowserTableViewControl::GetFreeItemID(DataBrowserItemID*) const */
416 OSStatus
wxMacDataBrowserTableViewControl::GetItemCount(DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, ItemCount
* numItems
) const
418 return GetDataBrowserItemCount(this->m_controlRef
,container
,recurse
,state
,numItems
);
419 } /* wxMacDataBrowserTableViewControl::GetItemCount(DataBrowserItemID, Boolean, DataBrowserItemState, ItemCount*) const */
421 OSStatus
wxMacDataBrowserTableViewControl::GetItemID( DataBrowserTableViewRowIndex row
, DataBrowserItemID
* item
) const
423 return GetDataBrowserTableViewItemID(this->m_controlRef
,row
,item
);
426 OSStatus
wxMacDataBrowserTableViewControl::GetItems(DataBrowserItemID container
, Boolean recurse
, DataBrowserItemState state
, Handle items
) const
428 return GetDataBrowserItems(this->m_controlRef
,container
,recurse
,state
,items
);
429 } /* wxMacDataBrowserTableViewControl::GetItems(DataBrowserItemID, Boolean, DataBrowserItemState, Handle) const */
431 OSStatus
wxMacDataBrowserTableViewControl::GetItemRow(DataBrowserItemID item
, DataBrowserTableViewRowIndex
* row
) const
433 return GetDataBrowserTableViewItemRow(this->m_controlRef
,item
,row
);
436 OSStatus
wxMacDataBrowserTableViewControl::IsUsedItemID(DataBrowserItemID itemID
) const
438 // 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
439 // 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
440 // the column position for the property id:
441 DataBrowserTableViewColumnIndex index
;
443 return ::GetDataBrowserTableViewItemRow(this->m_controlRef
,itemID
,&index
);
444 } /* wxMacDataBrowserTableViewControl::IsUsedItemID(DataBrowserItemID) const */
446 OSStatus
wxMacDataBrowserTableViewControl::RemoveItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
)
448 return ::RemoveDataBrowserItems(this->m_controlRef
,container
,numItems
,items
,preSortProperty
);
451 OSStatus
wxMacDataBrowserTableViewControl::RevealItem(DataBrowserItemID item
, DataBrowserPropertyID propertyID
, DataBrowserRevealOptions options
) const
453 return ::RevealDataBrowserItem(this->m_controlRef
,item
,propertyID
,options
);
454 } /* wxMacDataBrowserTableViewControl::RevealItem(DataBrowserItemID item, DataBrowserPropertyID propertyID, DataBrowserRevealOptions options) const */
456 OSStatus
wxMacDataBrowserTableViewControl::UpdateItems(DataBrowserItemID container
, UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserPropertyID preSortProperty
,
457 DataBrowserPropertyID propertyID
) const
459 return UpdateDataBrowserItems(this->m_controlRef
,container
,numItems
,items
,preSortProperty
,propertyID
);
465 size_t wxMacDataBrowserTableViewControl::GetSelectedItemIDs(wxArrayDataBrowserItemID
& itemIDs
) const
467 DataBrowserItemID
* itemIDPtr
;
468 Handle
handle(::NewHandle(0));
473 wxCHECK_MSG(this->GetItems(kDataBrowserNoItem
,true,kDataBrowserItemIsSelected
,handle
) == noErr
,0,_("Could not get selected items."));
474 NoOfItems
= static_cast<size_t>(::GetHandleSize(handle
)/sizeof(DataBrowserItemID
));
476 itemIDs
.Alloc(NoOfItems
);
478 itemIDPtr
= (DataBrowserItemID
*) (*handle
);
479 for (size_t i
=0; i
<NoOfItems
; ++i
)
481 itemIDs
.Add(*itemIDPtr
);
485 DisposeHandle(handle
);
487 } /* wxMacDataBrowserTableViewControl::GetSelectedItemIDs(wxArrayDataBrowserItemID&) const*/
489 OSStatus
wxMacDataBrowserTableViewControl::GetSelectionAnchor(DataBrowserItemID
* first
, DataBrowserItemID
* last
) const
491 return ::GetDataBrowserSelectionAnchor(this->m_controlRef
,first
,last
);
492 } /* wxMacDataBrowserTableViewControl::GetSelectionAnchor(DataBrowserItemID*, DataBrowserItemID*) const */
494 OSStatus
wxMacDataBrowserTableViewControl::GetSelectionFlags(DataBrowserSelectionFlags
* flags
) const
496 return ::GetDataBrowserSelectionFlags(this->m_controlRef
,flags
);
497 } /* wxMacDataBrowserTableViewControl::GetSelectionFlags(DataBrowserSelectionFlags*) const */
499 bool wxMacDataBrowserTableViewControl::IsItemSelected(DataBrowserItemID item
) const
501 return ::IsDataBrowserItemSelected(this->m_controlRef
,item
);
502 } /* wxMacDataBrowserTableViewControl::IsItemSelected(DataBrowserItemID) const */
504 OSStatus
wxMacDataBrowserTableViewControl::SetSelectionFlags(DataBrowserSelectionFlags flags
)
506 return ::SetDataBrowserSelectionFlags(this->m_controlRef
,flags
);
507 } /* wxMacDataBrowserTableViewControl::SetSelectionFlags(DataBrowserSelectionFlags) */
509 OSStatus
wxMacDataBrowserTableViewControl::SetSelectedItems(UInt32 numItems
, DataBrowserItemID
const* items
, DataBrowserSetOption operation
)
511 return ::SetDataBrowserSelectedItems(this->m_controlRef
, numItems
, items
, operation
);
512 } /* wxMacDataBrowserTableViewControl::SetSelectedItems(UInt32, DataBrowserItemID const*, DataBrowserSetOption) */
514 OSStatus
wxMacDataBrowserTableViewControl::GetSortOrder(DataBrowserSortOrder
* order
) const
516 return ::GetDataBrowserSortOrder(this->m_controlRef
,order
);
519 OSStatus
wxMacDataBrowserTableViewControl::GetSortProperty(DataBrowserPropertyID
* propertyID
) const
521 return ::GetDataBrowserSortProperty(this->m_controlRef
,propertyID
);
524 OSStatus
wxMacDataBrowserTableViewControl::Resort(DataBrowserItemID container
, Boolean sortChildren
)
526 return ::SortDataBrowserContainer(this->m_controlRef
,container
,sortChildren
);
527 } /* wxMacDataBrowserTableViewControl::Resort(DataBrowserItemID, Boolean) */
529 OSStatus
wxMacDataBrowserTableViewControl::SetSortOrder(DataBrowserSortOrder order
)
531 return ::SetDataBrowserSortOrder(this->m_controlRef
,order
);
534 OSStatus
wxMacDataBrowserTableViewControl::SetSortProperty(DataBrowserPropertyID propertyID
)
536 return ::SetDataBrowserSortProperty(this->m_controlRef
,propertyID
);
540 // container handling
542 OSStatus
wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID containerID
)
544 return ::CloseDataBrowserContainer(this->m_controlRef
,containerID
);
545 } /* wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID) */
547 OSStatus
wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID containerID
)
549 return ::OpenDataBrowserContainer(this->m_controlRef
,containerID
);
550 } /* wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID) */
552 IMPLEMENT_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl
,wxMacControl
)
554 // ============================================================================
555 // wxMacDataBrowserListViewControl
556 // ============================================================================
561 OSStatus
wxMacDataBrowserListViewControl::AddColumn(DataBrowserListViewColumnDesc
*columnDesc
, DataBrowserTableViewColumnIndex position
)
563 return AddDataBrowserListViewColumn(this->m_controlRef
,columnDesc
,position
);
564 } /* wxMacDataBrowserListViewControl::AddColumn(DataBrowserListViewColumnDesc*, DataBrowserTableViewColumnIndex) */
566 // ============================================================================
567 // wxMacDataViewDataBrowserListViewControl
568 // ============================================================================
571 // constructors / destructor
573 wxMacDataViewDataBrowserListViewControl::wxMacDataViewDataBrowserListViewControl(wxWindow
* peer
, wxPoint
const& pos
, wxSize
const& size
, long style
)
574 :wxMacDataBrowserListViewControl(peer
,pos
,size
,style
)
576 } /* wxMacDataViewDataBrowserListViewControl::wxMacDataViewDataBrowserListViewControl(wxWindow* , const wxPoint&, const wxSize&, long) */
579 // callback functions (inherited from wxMacDataBrowserTableViewControl)
581 Boolean
wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID itemOneID
, DataBrowserItemID itemTwoID
, DataBrowserPropertyID sortProperty
)
583 DataBrowserSortOrder sortOrder
;
585 DataBrowserTableViewColumnIndex columnIndex
;
587 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
590 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
, false,_("Pointer to data view control not set correctly."));
591 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,false,_("Pointer to model not set correctly."));
592 if (sortProperty
>= kMinPropertyID
)
594 wxCHECK_MSG(this->GetColumnIndex(sortProperty
,&columnIndex
) == noErr
,false,_("Could not determine column index."));
598 this->GetSortOrder(&sortOrder
);
599 return static_cast<Boolean
>(dataViewCtrlPtr
->GetModel()->Compare(wxDataViewItem(reinterpret_cast<void*>(itemOneID
)),wxDataViewItem(reinterpret_cast<void*>(itemTwoID
)),
600 columnIndex
,sortOrder
!= kDataBrowserOrderDecreasing
) < 0);
601 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID, DataBrowserItemID, DataBrowserPropertyID) */
603 void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemState state
, Rect
const* rectangle
, SInt16 bitDepth
, Boolean colorDevice
)
605 DataBrowserTableViewColumnIndex columnIndex
;
607 wxDataViewColumn
* dataViewColumnPtr
;
609 wxDataViewCtrl
* dataViewCtrlPtr
;
611 wxDataViewCustomRenderer
* dataViewCustomRendererPtr
;
613 wxVariant dataToRender
;
616 dataViewCtrlPtr
= dynamic_cast<wxDataViewCtrl
*>(this->GetPeer());
617 wxCHECK_RET(dataViewCtrlPtr
!= NULL
, _("Pointer to data view control not set correctly."));
618 wxCHECK_RET(dataViewCtrlPtr
->GetModel() != NULL
, _("Pointer to model not set correctly."));
619 wxCHECK_RET(this->GetColumnIndex(propertyID
,&columnIndex
) == noErr
,_("Could not determine column index."));
620 dataViewColumnPtr
= dataViewCtrlPtr
->GetColumn(columnIndex
);
621 wxCHECK_RET(dataViewColumnPtr
!= NULL
,_("No column for the specified column index existing."));
622 dataViewCustomRendererPtr
= dynamic_cast<wxDataViewCustomRenderer
*>(dataViewColumnPtr
->GetRenderer());
623 wxCHECK_RET(dataViewCustomRendererPtr
!= NULL
,_("No renderer or invalid renderer type specified for custom data column."));
624 dataViewCtrlPtr
->GetModel()->GetValue(dataToRender
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),columnIndex
);
625 dataViewCustomRendererPtr
->SetValue(dataToRender
);
627 // try to determine the content's size (drawable part):
629 RgnHandle
rgn(NewRgn());
632 if (this->GetRegion(kControlContentMetaPart
,rgn
) == noErr
)
633 GetRegionBounds(rgn
,&content
);
635 this->GetRect(&content
);
637 // space for the header
638 this->GetHeaderButtonHeight(&headerHeight
);
639 content
.top
+= headerHeight
;
640 // extra space for the frame (todo: do not how to determine the space automatically from the control)
645 // extra space for the scrollbars:
646 content
.bottom
-= wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y
);
647 content
.right
-= wxSystemSettings::GetMetric(wxSYS_VSCROLL_X
);
649 // make sure that 'Render' can draw only in the allowed area:
650 dataViewCustomRendererPtr
->GetDC()->SetClippingRegion(content
.left
,content
.top
,content
.right
-content
.left
+1,content
.bottom
-content
.top
+1);
651 (void) (dataViewCustomRendererPtr
->Render(wxRect(static_cast<int>(rectangle
->left
),static_cast<int>(rectangle
->top
),
652 static_cast<int>(1+rectangle
->right
-rectangle
->left
),static_cast<int>(1+rectangle
->bottom
-rectangle
->top
)),
653 dataViewCustomRendererPtr
->GetDC(),((state
== kDataBrowserItemIsSelected
) ? wxDATAVIEW_CELL_SELECTED
: 0)));
654 dataViewCustomRendererPtr
->GetDC()->DestroyClippingRegion(); // probably not necessary
655 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
657 OSStatus
wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID itemID
, DataBrowserPropertyID propertyID
, DataBrowserItemDataRef itemData
, Boolean getValue
)
661 // variable definitions:
662 wxDataViewCtrl
* dataViewCtrlPtr
;
664 dataViewCtrlPtr
= dynamic_cast<wxDataViewCtrl
*>(this->GetPeer());
665 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
666 if (dataViewCtrlPtr
->IsDeleting())
667 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
670 // variable definitions:
671 DataBrowserTableViewColumnIndex columnIndex
;
672 OSStatus errorStatus
;
673 wxDataViewColumn
* dataViewColumnPtr
;
675 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,errDataBrowserNotConfigured
,_("Pointer to model not set correctly."));
676 errorStatus
= this->GetColumnIndex(propertyID
,&columnIndex
);
677 wxCHECK_MSG(errorStatus
== noErr
,errorStatus
,_("Could not determine column index"));
678 dataViewColumnPtr
= dataViewCtrlPtr
->GetColumn(columnIndex
);
679 wxCHECK_MSG((dataViewColumnPtr
!= NULL
) && (dataViewColumnPtr
->GetRenderer() != NULL
),errDataBrowserNotConfigured
,_("There is no column or renderer for the specified column index."));
680 switch (dataViewColumnPtr
->GetRenderer()->GetPropertyType())
682 case kDataBrowserCheckboxType
:
684 // variable definition:
685 ThemeButtonValue buttonValue
;
687 errorStatus
= ::GetDataBrowserItemDataButtonValue(itemData
,&buttonValue
);
688 if (errorStatus
== noErr
)
690 if (buttonValue
== kThemeButtonOn
)
692 // variable definition and initialization:
693 wxVariant
modifiedData(true);
695 return (dataViewCtrlPtr
->GetModel()->SetValue(modifiedData
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),static_cast<unsigned int>(columnIndex
)) ? OSStatus(noErr
) : OSStatus(errDataBrowserNotConfigured
));
697 else if (buttonValue
== kThemeButtonOff
)
699 // variable definition and initialization:
700 wxVariant
modifiedData(false);
702 return (dataViewCtrlPtr
->GetModel()->SetValue(modifiedData
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),static_cast<unsigned int>(columnIndex
)) ? OSStatus(noErr
) : OSStatus(errDataBrowserNotConfigured
));
705 return errDataBrowserInvalidPropertyData
;
710 case kDataBrowserTextType
:
712 // variable definitions:
713 CFStringRef stringReference
;
715 errorStatus
= ::GetDataBrowserItemDataText(itemData
,&stringReference
);
716 if (errorStatus
== noErr
)
718 // variable definitions and initializations:
719 wxMacCFStringHolder
modifiedString(stringReference
);
720 wxVariant
modifiedData(modifiedString
.AsString());
722 if (dataViewCtrlPtr
->GetModel()->SetValue(modifiedData
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),static_cast<unsigned int>(columnIndex
)))
725 return errDataBrowserNotConfigured
;
731 return errDataBrowserPropertyNotSupported
;
737 if (propertyID
>= kMinPropertyID
) // in case data columns set the data
739 // variable definitions:
741 wxDataViewColumn
* dataViewColumnPtr
;
742 wxDataViewCtrl
* dataViewCtrlPtr
;
744 dataViewCtrlPtr
= dynamic_cast<wxDataViewCtrl
*>(this->GetPeer());
745 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
746 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,errDataBrowserNotConfigured
,_("Pointer to model not set correctly."));
747 dataViewColumnPtr
= dataViewCtrlPtr
->GetColumnPtr(propertyID
);
748 wxCHECK_MSG(dataViewColumnPtr
!= NULL
,errDataBrowserNotConfigured
,_("No column for the specified column position existing."));
749 wxCHECK_MSG(dataViewColumnPtr
->GetRenderer() != NULL
,errDataBrowserNotConfigured
,_("No renderer specified for column."));
750 dataViewCtrlPtr
->GetModel()->GetValue(variant
,wxDataViewItem(reinterpret_cast<void*>(itemID
)),dataViewColumnPtr
->GetModelColumn());
751 if (!(variant
.IsNull()))
753 dataViewColumnPtr
->GetRenderer()->SetDataReference(itemData
);
754 dataViewColumnPtr
->GetRenderer()->SetValue(variant
);
755 wxCHECK_MSG(dataViewColumnPtr
->GetRenderer()->Render(),errDataBrowserNotConfigured
,_("Rendering failed."));
759 else // react on special system requests
763 case kDataBrowserContainerIsClosableProperty
:
765 // variable definitions:
766 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
768 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
769 // initialize wxWidget event:
770 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING
,dataViewCtrlPtr
->GetId()); // variable definition
772 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
773 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
774 // finally send the equivalent wxWidget event:
775 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
776 // opening the container is allowed if not vetoed:
777 return ::SetDataBrowserItemDataBooleanValue(itemData
,dataViewEvent
.IsAllowed());
779 case kDataBrowserContainerIsOpenableProperty
:
781 // variable definitions:
782 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
784 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
785 // initialize wxWidget event:
786 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING
,dataViewCtrlPtr
->GetId()); // variable definition
788 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
789 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
790 // finally send the equivalent wxWidget event:
791 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
792 // opening the container is allowed if not vetoed:
793 return ::SetDataBrowserItemDataBooleanValue(itemData
,dataViewEvent
.IsAllowed());
795 case kDataBrowserItemIsContainerProperty
:
797 // variable definition:
798 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
800 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,errDataBrowserNotConfigured
,_("Pointer to data view control not set correctly."));
801 wxCHECK_MSG(dataViewCtrlPtr
->GetModel() != NULL
,errDataBrowserNotConfigured
,_("Pointer to model not set correctly."));
802 return ::SetDataBrowserItemDataBooleanValue(itemData
,dataViewCtrlPtr
->GetModel()->IsContainer(wxDataViewItem(reinterpret_cast<void*>(itemID
))));
804 case kDataBrowserItemIsEditableProperty
:
805 return ::SetDataBrowserItemDataBooleanValue(itemData
,true);
809 return errDataBrowserPropertyNotSupported
;
810 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemDataRef, Boolean) */
812 void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID itemID
, DataBrowserItemNotification message
, DataBrowserItemDataRef itemData
)
816 case kDataBrowserContainerClosed
:
818 // variable definitions:
819 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
821 if (dataViewCtrlPtr
!= NULL
) // can become NULL when the window is being deleted (wxWidget has already disposed the data before receiving this event
823 // initialize wxWidget event:
824 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED
,dataViewCtrlPtr
->GetId()); // variable definition
826 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
827 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
828 // finally send the equivalent wxWidget event:
829 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
833 case kDataBrowserContainerOpened
:
835 // variable definitions:
836 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
838 wxCHECK_RET(dataViewCtrlPtr
!= NULL
,_("Pointer to data view control not set correctly."));
839 dataViewCtrlPtr
->AddChildrenLevel(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
840 // initialize wxWidget event:
841 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED
,dataViewCtrlPtr
->GetId()); // variable definition
843 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
844 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
845 // finally send the equivalent wxWidget event:
846 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
849 case kDataBrowserEditStarted
:
851 // variable definitions:
852 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
854 if (dataViewCtrlPtr
!= NULL
)
856 // initialize wxWidget event:
857 DataBrowserPropertyID propertyID
;
858 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED
,dataViewCtrlPtr
->GetId()); // variable definition
860 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
861 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
862 if (this->GetPropertyID(itemData
,&propertyID
) == noErr
)
864 // variable definition and initialization:
865 DataBrowserTableViewColumnIndex columnIndex
;
867 wxCHECK_RET(this->GetColumnIndex(propertyID
,&columnIndex
),_("Column index not found."));
868 dataViewEvent
.SetColumn(columnIndex
);
869 dataViewEvent
.SetDataViewColumn(dataViewCtrlPtr
->GetColumnPtr(propertyID
));
871 // finally send the equivalent wxWidget event:
872 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
876 case kDataBrowserEditStopped
:
878 // variable definitions:
879 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
881 if (dataViewCtrlPtr
!= NULL
)
883 // initialize wxWidget event:
884 DataBrowserPropertyID propertyID
;
885 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE
,dataViewCtrlPtr
->GetId()); // variable definition
887 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
888 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
889 if (this->GetPropertyID(itemData
,&propertyID
) == noErr
)
891 // variable definition and initialization:
892 DataBrowserTableViewColumnIndex columnIndex
;
894 wxCHECK_RET(this->GetColumnIndex(propertyID
,&columnIndex
),_("Column index not found."));
895 dataViewEvent
.SetColumn(columnIndex
);
896 dataViewEvent
.SetDataViewColumn(dataViewCtrlPtr
->GetColumnPtr(propertyID
));
898 // finally send the equivalent wxWidget event:
899 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
903 case kDataBrowserItemAdded
:
905 // variable definitions:
906 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
908 wxCHECK_RET(dataViewCtrlPtr
!= NULL
,_("Pointer to data view control not set correctly."));
909 // initialize wxWidget event:
910 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED
,dataViewCtrlPtr
->GetId()); // variable definition
912 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
913 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
914 // finally send the equivalent wxWidget event:
915 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
918 case kDataBrowserItemDeselected
:
920 // variable definitions:
921 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
923 if (dataViewCtrlPtr
!= NULL
) // can become NULL if an item is still selected while removing the data browser
925 // initialize wxWidget event:
926 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED
,dataViewCtrlPtr
->GetId()); // variable definition
928 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
929 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
930 // finally send the equivalent wxWidget event:
931 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
935 case kDataBrowserItemDoubleClicked
:
937 // variable definitions:
938 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
940 wxCHECK_RET(dataViewCtrlPtr
!= NULL
,_("Pointer to data view control not set correctly."));
941 // initialize wxWidget event:
942 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED
,dataViewCtrlPtr
->GetId()); // variable definition
944 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
945 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
946 // finally send the equivalent wxWidget event:
947 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
950 case kDataBrowserItemRemoved
:
952 // variable definitions:
953 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
955 if (dataViewCtrlPtr
!= NULL
) // can become NULL when the window is being deleted (wxWidget has already disposed the data before receiving this event
957 // initialize wxWidget event:
958 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED
,dataViewCtrlPtr
->GetId()); // variable definition
960 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
961 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
962 // finally send the equivalent wxWidget event:
963 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
967 case kDataBrowserItemSelected
:
969 // variable definitions:
970 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
972 wxCHECK_RET(dataViewCtrlPtr
!= NULL
,_("Pointer to data view control not set correctly."));
973 // initialize wxWidget event:
974 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_SELECTED
,dataViewCtrlPtr
->GetId()); // variable definition
976 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
977 dataViewEvent
.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID
)));
978 // finally send the equivalent wxWidget event:
979 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
982 case kDataBrowserSelectionSetChanged
:
984 case kDataBrowserUserStateChanged
:
986 DataBrowserPropertyID propertyID
;
988 if ((this->GetSortProperty(&propertyID
) == noErr
) && (propertyID
>= kMinPropertyID
))
990 DataBrowserSortOrder sortOrder
;
991 DataBrowserTableViewColumnIndex columnIndex
;
993 if ((this->GetSortOrder(&sortOrder
) == noErr
) && (this->GetColumnIndex(propertyID
,&columnIndex
) == noErr
))
995 // variable definition and initialization:
996 wxDataViewColumn
* columnPtr
;
997 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->GetPeer()));
999 wxCHECK_RET(dataViewCtrlPtr
!= NULL
,_("Pointer to data vie wcontrol not set correctly."));
1000 columnPtr
= dataViewCtrlPtr
->GetColumn(columnIndex
);
1001 // check if the sort order has changed:
1002 if ( columnPtr
->IsSortOrderAscending() && (sortOrder
== kDataBrowserOrderDecreasing
) ||
1003 !(columnPtr
->IsSortOrderAscending()) && (sortOrder
== kDataBrowserOrderIncreasing
))
1005 columnPtr
->SetSortOrder(!(columnPtr
->IsSortOrderAscending()));
1006 // initialize wxWidget event:
1007 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED
,dataViewCtrlPtr
->GetId()); // variable defintion
1009 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
1010 dataViewEvent
.SetColumn(columnIndex
);
1011 dataViewEvent
.SetDataViewColumn(columnPtr
);
1012 // finally send the equivalent wxWidget event:
1013 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
1020 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID, DataBrowserItemNotification, DataBrowserItemDataRef) */
1024 // wxUSE_GENERICDATAVIEWCTRL