1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/mac/carbon/datavgen.cpp
3 // Purpose: wxDataViewCtrl native mac implementation
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 // For compilers that support precompilation, includes "wx.h".
11 #include "wx/wxprec.h"
13 #if wxUSE_DATAVIEWCTRL
15 #include "wx/dataview.h"
17 #if !defined(wxUSE_GENERICDATAVIEWCTRL) || (wxUSE_GENERICDATAVIEWCTRL == 0)
21 #include "wx/mac/carbon/databrow.h"
25 #include "wx/settings.h"
26 #include "wx/dcclient.h"
30 #include "wx/renderer.h"
32 //-----------------------------------------------------------------------------
34 //-----------------------------------------------------------------------------
36 // a list of all catchable events:
37 static EventTypeSpec
const eventList
[] =
39 {kEventClassControl
, kEventControlDraw
},
40 {kEventClassControl
, kEventControlHit
}
43 //-----------------------------------------------------------------------------
45 //-----------------------------------------------------------------------------
47 static pascal OSStatus
wxMacDataViewCtrlEventHandler(EventHandlerCallRef handler
, EventRef EventReference
, void* Data
)
49 wxDataViewCtrl
* DataViewCtrlPtr((wxDataViewCtrl
*) Data
); // the 'Data' variable always contains a pointer to the data view control that installed the handler
51 wxMacCarbonEvent
CarbonEvent(EventReference
) ;
54 switch (GetEventKind(EventReference
))
56 case kEventControlDraw
:
60 DataViewCtrlPtr
->MacSetDrawingContext(CarbonEvent
.GetParameter
<CGContextRef
>(kEventParamCGContextRef
,typeCGContextRef
));
61 status
= ::CallNextEventHandler(handler
,EventReference
);
62 DataViewCtrlPtr
->MacSetDrawingContext(NULL
);
65 case kEventControlHit
:
66 if (CarbonEvent
.GetParameter
<ControlPartCode
>(kEventParamControlPart
,typeControlPartCode
) == kControlButtonPart
) // we only care about the header
68 ControlRef controlReference
;
69 DataBrowserPropertyID columnPropertyID
;
70 unsigned long columnIndex
;
72 wxDataViewEvent
DataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK
,DataViewCtrlPtr
->GetId());
74 CarbonEvent
.GetParameter(kEventParamDirectObject
,&controlReference
);
75 // determine the column that triggered the event (this is the column that is responsible for sorting the data view):
76 status
= ::GetDataBrowserSortProperty(controlReference
,&columnPropertyID
);
77 wxCHECK(status
== noErr
,status
);
78 status
= ::GetDataBrowserTableViewColumnPosition(controlReference
,columnPropertyID
,&columnIndex
);
79 if (status
== errDataBrowserPropertyNotFound
) // user clicked into part of the header that does not have a property
80 return ::CallNextEventHandler(handler
,EventReference
);
81 wxCHECK(status
== noErr
,status
);
82 // initialize wxWidget event handler:
83 DataViewEvent
.SetEventObject(DataViewCtrlPtr
);
84 DataViewEvent
.SetColumn(columnIndex
);
85 DataViewEvent
.SetDataViewColumn(DataViewCtrlPtr
->GetColumn(columnIndex
));
86 // finally sent the equivalent wxWidget event:
87 #if wxCHECK_VERSION(2,9,0)
88 DataViewCtrlPtr
->HandleWindowEvent(DataViewEvent
);
90 DataViewCtrlPtr
->GetEventHandler()->ProcessEvent(DataViewEvent
);
92 return ::CallNextEventHandler(handler
,EventReference
);
95 return eventNotHandledErr
;
98 return eventNotHandledErr
;
99 } /* wxMacDataViewCtrlEventHandler(EventHandlerCallRef, EventRef, void*) */
101 static DataBrowserItemID
* CreateDataBrowserItemIDArray(size_t& noOfEntries
, wxDataViewItemArray
const& items
) // returns a newly allocated pointer to valid data browser item IDs
103 size_t const noOfItems
= items
.GetCount();
105 DataBrowserItemID
* itemIDs(new DataBrowserItemID
[noOfItems
]);
108 // convert all valid data view items to data browser items
110 for (size_t i
=0; i
<noOfItems
; ++i
)
113 itemIDs
[noOfEntries
] = reinterpret_cast<DataBrowserItemID
>(items
[i
].GetID());
118 } /* CreateDataBrowserItemIDArray(size_t&, wxDataViewItemArray const&) */
120 #if wxCHECK_VERSION(2,9,0)
121 static bool InitializeColumnDescription(DataBrowserListViewColumnDesc
& columnDescription
, wxDataViewColumn
const* columnPtr
, DataBrowserPropertyID columnPropertyID
, wxCFStringRef
const& title
)
123 static bool InitializeColumnDescription(DataBrowserListViewColumnDesc
& columnDescription
, wxDataViewColumn
const* columnPtr
, DataBrowserPropertyID columnPropertyID
, wxMacCFStringHolder
const& title
)
126 // set properties for the column:
127 columnDescription
.propertyDesc
.propertyID
= columnPropertyID
;
128 columnDescription
.propertyDesc
.propertyType
= columnPtr
->GetRenderer()->GetPropertyType();
129 columnDescription
.propertyDesc
.propertyFlags
= kDataBrowserListViewSelectionColumn
; // make the column selectable
130 if (columnPtr
->IsReorderable())
131 columnDescription
.propertyDesc
.propertyFlags
|= kDataBrowserListViewMovableColumn
;
132 if (columnPtr
->IsResizeable())
134 columnDescription
.headerBtnDesc
.minimumWidth
= 0;
135 columnDescription
.headerBtnDesc
.maximumWidth
= 30000; // 32767 is the theoretical maximum though but 30000 looks nicer
139 columnDescription
.headerBtnDesc
.minimumWidth
= columnPtr
->GetWidth();
140 columnDescription
.headerBtnDesc
.maximumWidth
= columnPtr
->GetWidth();
142 if (columnPtr
->IsSortable())
143 columnDescription
.propertyDesc
.propertyFlags
|= kDataBrowserListViewSortableColumn
;
144 if (columnPtr
->GetRenderer()->GetMode() == wxDATAVIEW_CELL_EDITABLE
)
145 columnDescription
.propertyDesc
.propertyFlags
|= kDataBrowserPropertyIsEditable
;
146 if ((columnDescription
.propertyDesc
.propertyType
== kDataBrowserCustomType
) ||
147 (columnDescription
.propertyDesc
.propertyType
== kDataBrowserDateTimeType
) ||
148 (columnDescription
.propertyDesc
.propertyType
== kDataBrowserIconAndTextType
) ||
149 (columnDescription
.propertyDesc
.propertyType
== kDataBrowserTextType
))
150 columnDescription
.propertyDesc
.propertyFlags
|= kDataBrowserListViewTypeSelectColumn
; // enables generally the possibility to have user input for the mentioned types
151 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
152 columnDescription
.propertyDesc
.propertyFlags
|= kDataBrowserListViewNoGapForIconInHeaderButton
;
154 // set header's properties:
155 columnDescription
.headerBtnDesc
.version
= kDataBrowserListViewLatestHeaderDesc
;
156 columnDescription
.headerBtnDesc
.titleOffset
= 0;
157 columnDescription
.headerBtnDesc
.titleString
= ::CFStringCreateCopy(kCFAllocatorDefault
,title
);
158 columnDescription
.headerBtnDesc
.initialOrder
= kDataBrowserOrderIncreasing
; // choose one of the orders as "undefined" is not supported anyway (s. ControlDefs.h in the HIToolbox framework)
159 columnDescription
.headerBtnDesc
.btnFontStyle
.flags
= kControlUseFontMask
| kControlUseJustMask
;
160 switch (columnPtr
->GetAlignment())
163 case wxALIGN_CENTER_HORIZONTAL
:
164 columnDescription
.headerBtnDesc
.btnFontStyle
.just
= teCenter
;
167 columnDescription
.headerBtnDesc
.btnFontStyle
.just
= teFlushLeft
;
170 columnDescription
.headerBtnDesc
.btnFontStyle
.just
= teFlushRight
;
173 columnDescription
.headerBtnDesc
.btnFontStyle
.just
= teFlushDefault
;
175 columnDescription
.headerBtnDesc
.btnFontStyle
.font
= kControlFontViewSystemFont
;
176 columnDescription
.headerBtnDesc
.btnFontStyle
.style
= normal
;
177 columnDescription
.headerBtnDesc
.btnContentInfo
.contentType
= kControlContentIconRef
;
178 if (columnPtr
->GetBitmap().Ok())
179 #if wxCHECK_VERSION(2,9,0)
180 columnDescription
.headerBtnDesc
.btnContentInfo
.u
.iconRef
= columnPtr
->GetBitmap().GetIconRef();
182 columnDescription
.headerBtnDesc
.btnContentInfo
.u
.iconRef
= columnPtr
->GetBitmap().GetBitmapData()->GetIconRef();
186 } /* InitializeColumnDescription(DataBrowserListViewColumnDesc&, wxDataViewColumn const*, DataBrowserPropertyID, wxMacCFStringHolder const&) */
188 //-----------------------------------------------------------------------------
189 // local function pointers
190 //-----------------------------------------------------------------------------
192 DEFINE_ONE_SHOT_HANDLER_GETTER(wxMacDataViewCtrlEventHandler
)
194 // ---------------------------------------------------------
195 // wxMacDataViewModelNotifier
196 // ---------------------------------------------------------
198 class wxMacDataViewModelNotifier
: public wxDataViewModelNotifier
201 wxMacDataViewModelNotifier(wxMacDataViewDataBrowserListViewControl
* initDataViewControlPtr
) : m_dataViewControlPtr(initDataViewControlPtr
)
205 virtual bool ItemAdded(const wxDataViewItem
&parent
, const wxDataViewItem
&item
)
207 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
210 wxCHECK_MSG(item
.IsOk(),false,_("Added item is invalid."));
211 return (!(parent
.IsOk()) && (this->m_dataViewControlPtr
->AddItem(kDataBrowserNoItem
,&itemID
) == noErr
) ||
212 parent
.IsOk() && (this->m_dataViewControlPtr
->AddItem(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),&itemID
) == noErr
));
213 } /* ItemAdded(wxDataViewItem const&, wxDataViewItem const&) */
215 virtual bool ItemsAdded(wxDataViewItem
const& parent
, wxDataViewItemArray
const& items
)
219 DataBrowserItemID
* itemIDs
;
224 // convert all valid data view items to data browser items:
225 itemIDs
= ::CreateDataBrowserItemIDArray(noOfEntries
,items
);
226 // insert all valid items into control:
227 noFailureFlag
= ((noOfEntries
== 0) ||
228 !(parent
.IsOk()) && (this->m_dataViewControlPtr
->AddItems(kDataBrowserNoItem
,noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
) ||
229 parent
.IsOk() && (this->m_dataViewControlPtr
->AddItems(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
));
230 // give allocated array space free again:
233 return noFailureFlag
;
234 } /* ItemsAdded(wxDataViewItem const&, wxDataViewItemArray const&) */
236 virtual bool ItemChanged(wxDataViewItem
const& item
)
238 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
241 wxCHECK_MSG(item
.IsOk(),false,_("Changed item is invalid."));
242 if (this->m_dataViewControlPtr
->UpdateItems(&itemID
) == noErr
)
244 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetPeer()));
246 // sent the equivalent wxWidget event:
247 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED
,dataViewCtrlPtr
->GetId()); // variable defintion
249 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
250 dataViewEvent
.SetItem(item
);
251 // sent the equivalent wxWidget event:
252 #if wxCHECK_VERSION(2,9,0)
253 dataViewCtrlPtr
->HandleWindowEvent(dataViewEvent
);
255 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
262 } /* ItemChanged(wxDataViewItem const&) */
264 virtual bool ItemsChanged(wxDataViewItemArray
const& items
)
268 DataBrowserItemID
* itemIDs
;
273 // convert all valid data view items to data browser items:
274 itemIDs
= ::CreateDataBrowserItemIDArray(noOfEntries
,items
);
275 // change items (ATTENTION: ONLY ITEMS OF THE ROOT ARE CHANGED BECAUSE THE PARENT PARAMETER IS MISSING):
276 noFailureFlag
= (this->m_dataViewControlPtr
->UpdateItems(kDataBrowserNoItem
,noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
,kDataBrowserItemNoProperty
) == noErr
);
279 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetPeer()));
281 // send for all changed items a wxWidget event:
282 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED
,dataViewCtrlPtr
->GetId()); // variable defintion
284 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
285 for (size_t i
=0; i
<noOfEntries
; ++i
)
287 dataViewEvent
.SetItem(reinterpret_cast<void*>(itemIDs
[i
]));
288 #if wxCHECK_VERSION(2,9,0)
289 dataViewCtrlPtr
->HandleWindowEvent(dataViewEvent
);
291 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
295 // release allocated array space:
298 return noFailureFlag
;
299 } /* ItemsChanged(wxDataViewItem const&) */
301 virtual bool ItemDeleted(wxDataViewItem
const& parent
, wxDataViewItem
const& item
)
305 // variable definition and initialization:
306 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
307 OSStatus errorStatus
;
308 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetPeer()));
310 // when this method is called and currently an item is being edited this item may have already been deleted in the model (the passed item and the being edited item have
311 // not to be identical because the being edited item might be below the passed item in the hierarchy);
312 // to prevent the control trying to ask the model to update an already deleted item the control is informed that currently a deleting process
313 // has been started and that variables can currently not be updated even when requested by the system:
314 dataViewCtrlPtr
->SetDeleting(true);
315 errorStatus
= this->m_dataViewControlPtr
->RemoveItem(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),&itemID
);
316 // enable automatic updating again:
317 dataViewCtrlPtr
->SetDeleting(false);
318 return (errorStatus
== noErr
);
322 } /* ItemDeleted(wxDataViewItem const&, wxDataViewItem const&) */
324 virtual bool ItemsDeleted(wxDataViewItem
const& parent
, wxDataViewItemArray
const& items
)
328 DataBrowserItemID
* itemIDs
;
330 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetPeer()));
335 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,false,_("Data view control is not correctly initialized"));
336 // convert all valid data view items to data browser items:
337 itemIDs
= ::CreateDataBrowserItemIDArray(noOfEntries
,items
);
338 // when this method is called and currently an item is being edited this item may have already been deleted in the model (the passed item and the being edited item have
339 // not to be identical because the being edited item might be below the passed item in the hierarchy);
340 // to prevent the control trying to ask the model to update an already deleted item the control is informed that currently a deleting process
341 // has been started and that variables can currently not be updated even when requested by the system:
342 dataViewCtrlPtr
->SetDeleting(true);
343 // insert all valid items into control:
344 noFailureFlag
= ((noOfEntries
== 0) ||
345 !(parent
.IsOk()) && (this->m_dataViewControlPtr
->RemoveItems(kDataBrowserNoItem
,noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
) ||
346 parent
.IsOk() && (this->m_dataViewControlPtr
->RemoveItems(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
));
347 // enable automatic updating again:
348 dataViewCtrlPtr
->SetDeleting(false);
349 // give allocated array space free again:
352 return noFailureFlag
;
353 } /* ItemsDeleted(wxDataViewItem const&, wxDataViewItemArray const&) */
355 virtual bool ValueChanged(wxDataViewItem
const& item
, unsigned int col
)
357 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
358 DataBrowserItemID parentID
;
360 DataBrowserPropertyID propertyID
;
362 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetPeer()));
365 wxCHECK_MSG(item
.IsOk(), false,_("Passed item is invalid."));
366 wxCHECK_MSG(this->GetOwner() != NULL
,false,_("Owner not initialized."));
367 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
, false,_("Control is wrongly initialized."));
368 parentID
= reinterpret_cast<DataBrowserItemID
>(this->GetOwner()->GetParent(item
).GetID());
369 if ((this->m_dataViewControlPtr
->GetPropertyID(col
,&propertyID
) == noErr
) &&
370 (this->m_dataViewControlPtr
->UpdateItems(parentID
,1,&itemID
,dataViewCtrlPtr
->GetColumn(col
)->GetPropertyID(),propertyID
) == noErr
))
372 // variable definition and initialization:
373 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED
,dataViewCtrlPtr
->GetId());
375 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
376 dataViewEvent
.SetColumn(col
);
377 dataViewEvent
.SetItem(item
);
378 // send the equivalent wxWidget event:
379 #if wxCHECK_VERSION(2,9,0)
380 dataViewCtrlPtr
->HandleWindowEvent(dataViewEvent
);
382 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
389 } /* ValueChanged(wxDataViewItem const&, unsigned int) */
391 virtual bool Cleared(void)
393 bool noFailureFlag
= (this->m_dataViewControlPtr
->RemoveItems() == noErr
);
395 wxDataViewItemArray array
;
396 GetOwner()->GetChildren( item
, array
);
397 ItemsAdded( item
, array
);
398 return noFailureFlag
;
399 } /* Cleared(void) */
401 virtual void Resort(void)
403 this->m_dataViewControlPtr
->Resort();
411 wxMacDataViewDataBrowserListViewControl
* m_dataViewControlPtr
;
414 // ---------------------------------------------------------
415 // wxDataViewRenderer
416 // ---------------------------------------------------------
418 wxDataViewRenderer::wxDataViewRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
419 :wxDataViewRendererBase(varianttype
,mode
,align
), m_alignment(align
), m_mode(mode
)
421 } /* wxDataViewRenderer::wxDataViewRenderer(wxString const&, wxDataViewCellMode) */
423 void wxDataViewRenderer::SetMode(wxDataViewCellMode mode
)
425 wxDataViewColumn
* dataViewColumnPtr
;
429 dataViewColumnPtr
= this->GetOwner();
430 if (dataViewColumnPtr
!= NULL
)
432 // variable definition and initialization:
433 wxDataViewCtrl
* dataViewCtrlPtr(dataViewColumnPtr
->GetOwner());
435 if (dataViewCtrlPtr
!= NULL
)
437 // variable definition and initialization:
438 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
440 if (macDataViewListCtrlPtr
!= NULL
)
442 // variable definition and initialization:
443 DataBrowserPropertyFlags flags
;
445 verify_noerr(macDataViewListCtrlPtr
->GetPropertyFlags(dataViewColumnPtr
->GetPropertyID(),&flags
));
446 if (mode
== wxDATAVIEW_CELL_EDITABLE
)
447 flags
|= kDataBrowserPropertyIsEditable
;
449 flags
&= ~kDataBrowserPropertyIsEditable
;
450 verify_noerr(macDataViewListCtrlPtr
->SetPropertyFlags(dataViewColumnPtr
->GetPropertyID(),flags
));
454 } /* wxDataViewRenderer::SetMode(wxDataViewCellMode) */
456 IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer
,wxDataViewRendererBase
)
458 // ---------------------------------------------------------
459 // wxDataViewCustomRenderer
460 // ---------------------------------------------------------
462 wxDataViewCustomRenderer::wxDataViewCustomRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
463 :wxDataViewRenderer(varianttype
,mode
,align
), m_editorCtrlPtr(NULL
), m_DCPtr(NULL
)
465 } /* wxDataViewCustomRenderer::wxDataViewCustomRenderer(wxString const&, wxDataViewCellMode) */
467 wxDataViewCustomRenderer::~wxDataViewCustomRenderer(void)
469 if (this->m_DCPtr
!= NULL
)
470 delete this->m_DCPtr
;
471 } /* wxDataViewCustomRenderer::~wxDataViewCustomRenderer(void) */
473 void wxDataViewCustomRenderer::RenderText( const wxString
&text
, int xoffset
, wxRect cell
, wxDC
*dc
, int state
)
475 wxDataViewCtrl
*view
= GetOwner()->GetOwner();
476 wxColour col
= (state
& wxDATAVIEW_CELL_SELECTED
) ? wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT
) : view
->GetForegroundColour();
477 dc
->SetTextForeground(col
);
478 dc
->DrawText( text
, cell
.x
+ xoffset
, cell
.y
+ ((cell
.height
- dc
->GetCharHeight()) / 2));
481 wxDC
* wxDataViewCustomRenderer::GetDC(void)
483 if (this->m_DCPtr
== NULL
)
485 if ((GetOwner() == NULL
) || (GetOwner()->GetOwner() == NULL
))
487 this->m_DCPtr
= new wxWindowDC(this->GetOwner()->GetOwner());
489 return this->m_DCPtr
;
490 } /* wxDataViewCustomRenderer::GetDC(void) */
492 bool wxDataViewCustomRenderer::Render(void)
495 } /* wxDataViewCustomRenderer::Render(void) */
497 void wxDataViewCustomRenderer::SetDC(wxDC
* newDCPtr
)
499 delete this->m_DCPtr
;
500 this->m_DCPtr
= newDCPtr
;
501 } /* wxDataViewCustomRenderer::SetDC(wxDC*) */
503 WXDataBrowserPropertyType
wxDataViewCustomRenderer::GetPropertyType(void) const
505 return kDataBrowserCustomType
;
506 } /* wxDataViewCustomRenderer::GetPropertyType(void) const */
508 IMPLEMENT_ABSTRACT_CLASS(wxDataViewCustomRenderer
, wxDataViewRenderer
)
510 // ---------------------------------------------------------
511 // wxDataViewTextRenderer
512 // ---------------------------------------------------------
514 wxDataViewTextRenderer::wxDataViewTextRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
515 :wxDataViewRenderer(varianttype
,mode
,align
)
517 } /* wxDataViewTextRenderer::wxDataViewTextRenderer(wxString const&, wxDataViewCellMode, int) */
519 bool wxDataViewTextRenderer::Render(void)
521 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Text renderer cannot render value; value type: ")) << this->GetValue().GetType());
523 // variable definition:
524 #if wxCHECK_VERSION(2,9,0)
525 wxCFStringRef
cfString(this->GetValue().GetString(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
527 wxMacCFStringHolder
cfString(this->GetValue().GetString(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
529 return (::SetDataBrowserItemDataText(this->GetDataReference(),cfString
) == noErr
);
530 } /* wxDataViewTextRenderer::Render(void) */
532 WXDataBrowserPropertyType
wxDataViewTextRenderer::GetPropertyType(void) const
534 return kDataBrowserTextType
;
535 } /* wxDataViewTextRenderer::GetPropertyType(void) const */
537 IMPLEMENT_CLASS(wxDataViewTextRenderer
,wxDataViewRenderer
)
539 // ---------------------------------------------------------
540 // wxDataViewTextRendererAttr
541 // ---------------------------------------------------------
543 wxDataViewTextRendererAttr::wxDataViewTextRendererAttr(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
544 :wxDataViewTextRenderer(varianttype
,mode
,align
)
546 } /* wxDataViewTextRendererAttr::wxDataViewTextRendererAttr(wxString const&, wxDataViewCellMode, int) */
548 IMPLEMENT_CLASS(wxDataViewTextRendererAttr
,wxDataViewTextRenderer
)
550 // ---------------------------------------------------------
551 // wxDataViewBitmapRenderer
552 // ---------------------------------------------------------
554 wxDataViewBitmapRenderer::wxDataViewBitmapRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
555 :wxDataViewRenderer(varianttype
,mode
,align
)
559 bool wxDataViewBitmapRenderer::Render(void)
560 // This method returns 'true' if
561 // - the passed bitmap is valid and it could be assigned to the native data browser;
562 // - the passed bitmap is invalid (or is not initialized); this case simulates a non-existing bitmap.
563 // In all other cases the method returns 'false'.
565 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Bitmap renderer cannot render value; value type: ")) << this->GetValue().GetType());
567 // variable definition:
570 bitmap
<< this->GetValue();
572 #if wxCHECK_VERSION(2,9,0)
573 return (::SetDataBrowserItemDataIcon(this->GetDataReference(),bitmap
.GetIconRef()) == noErr
);
575 return (::SetDataBrowserItemDataIcon(this->GetDataReference(),bitmap
.GetBitmapData()->GetIconRef()) == noErr
);
579 } /* wxDataViewBitmapRenderer::Render(void) */
581 WXDataBrowserPropertyType
wxDataViewBitmapRenderer::GetPropertyType(void) const
583 return kDataBrowserIconType
;
584 } /* wxDataViewBitmapRenderer::GetPropertyType(void) const */
586 IMPLEMENT_CLASS(wxDataViewBitmapRenderer
,wxDataViewRenderer
)
588 // ---------------------------------------------------------
589 // wxDataViewIconTextRenderer
590 // ---------------------------------------------------------
592 wxDataViewIconTextRenderer::wxDataViewIconTextRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
593 :wxDataViewRenderer(varianttype
,mode
)
597 bool wxDataViewIconTextRenderer::Render(void)
599 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Icon & text renderer cannot render value; value type: ")) << this->GetValue().GetType());
601 // variable definition:
602 wxDataViewIconText iconText
;
604 iconText
<< this->GetValue();
606 // variable definition:
607 #if wxCHECK_VERSION(2,9,0)
608 wxCFStringRef
cfString(iconText
.GetText(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
610 wxMacCFStringHolder
cfString(iconText
.GetText(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
613 if (iconText
.GetIcon().IsOk())
614 if (::SetDataBrowserItemDataIcon(this->GetDataReference(),MAC_WXHICON(iconText
.GetIcon().GetHICON())) != noErr
)
616 return (::SetDataBrowserItemDataText(this->GetDataReference(),cfString
) == noErr
);
617 } /* wxDataViewIconTextRenderer::Render(void) */
619 WXDataBrowserPropertyType
wxDataViewIconTextRenderer::GetPropertyType(void) const
621 return kDataBrowserIconAndTextType
;
622 } /* wxDataViewIconTextRenderer::GetPropertyType(void) const */
624 IMPLEMENT_ABSTRACT_CLASS(wxDataViewIconTextRenderer
,wxDataViewRenderer
)
627 // ---------------------------------------------------------
628 // wxDataViewToggleRenderer
629 // ---------------------------------------------------------
631 wxDataViewToggleRenderer::wxDataViewToggleRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
632 :wxDataViewRenderer(varianttype
,mode
)
636 bool wxDataViewToggleRenderer::Render(void)
638 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Toggle renderer cannot render value; value type: ")) << this->GetValue().GetType());
639 return (::SetDataBrowserItemDataButtonValue(this->GetDataReference(),this->GetValue().GetBool()) == noErr
);
640 } /* wxDataViewToggleRenderer::Render(void) */
642 WXDataBrowserPropertyType
wxDataViewToggleRenderer::GetPropertyType(void) const
644 return kDataBrowserCheckboxType
;
645 } /* wxDataViewToggleRenderer::GetPropertyType(void) const */
647 IMPLEMENT_ABSTRACT_CLASS(wxDataViewToggleRenderer
,wxDataViewRenderer
)
649 // ---------------------------------------------------------
650 // wxDataViewProgressRenderer
651 // ---------------------------------------------------------
653 wxDataViewProgressRenderer::wxDataViewProgressRenderer(wxString
const& label
, wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
654 :wxDataViewRenderer(varianttype
,mode
,align
)
658 bool wxDataViewProgressRenderer::Render(void)
660 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Progress renderer cannot render value type; value type: ")) << this->GetValue().GetType());
661 return ((::SetDataBrowserItemDataMinimum(this->GetDataReference(), 0) == noErr
) &&
662 (::SetDataBrowserItemDataMaximum(this->GetDataReference(),100) == noErr
) &&
663 (::SetDataBrowserItemDataValue (this->GetDataReference(),this->GetValue().GetLong()) == noErr
));
664 } /* wxDataViewProgressRenderer::Render(void) */
666 WXDataBrowserPropertyType
wxDataViewProgressRenderer::GetPropertyType(void) const
668 return kDataBrowserProgressBarType
;
669 } /* wxDataViewProgressRenderer::GetPropertyType(void) const */
671 IMPLEMENT_ABSTRACT_CLASS(wxDataViewProgressRenderer
,wxDataViewRenderer
)
673 // ---------------------------------------------------------
674 // wxDataViewDateRenderer
675 // ---------------------------------------------------------
677 wxDataViewDateRenderer::wxDataViewDateRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
678 :wxDataViewRenderer(varianttype
,mode
,align
)
682 bool wxDataViewDateRenderer::Render(void)
684 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Date renderer cannot render value; value type: ")) << this->GetValue().GetType());
685 return (::SetDataBrowserItemDataDateTime(this->GetDataReference(),this->GetValue().GetDateTime().Subtract(wxDateTime(1,wxDateTime::Jan
,1904)).GetSeconds().GetLo()) == noErr
);
686 } /* wxDataViewDateRenderer::Render(void) */
688 WXDataBrowserPropertyType
wxDataViewDateRenderer::GetPropertyType(void) const
690 return kDataBrowserDateTimeType
;
691 } /* wxDataViewDateRenderer::GetPropertyType(void) const */
693 IMPLEMENT_ABSTRACT_CLASS(wxDataViewDateRenderer
,wxDataViewRenderer
)
695 // ---------------------------------------------------------
697 // ---------------------------------------------------------
699 wxDataViewColumn::wxDataViewColumn(wxString
const &title
, wxDataViewRenderer
*cell
, unsigned int model_column
, int width
, wxAlignment align
, int flags
)
700 :wxDataViewColumnBase(title
,cell
,model_column
,width
,align
,flags
), m_ascending(true),
701 m_flags(flags
& ~(wxDATAVIEW_COL_HIDDEN
)), m_maxWidth(30000), m_minWidth(0), m_width(width
>= 0 ? width
: wxDVC_DEFAULT_WIDTH
),
702 m_alignment(align
), m_title(title
)
704 } /* wxDataViewColumn::wxDataViewColumn(wxString const &title, wxDataViewRenderer*, unsigned int, int, wxAlignment, int) */
706 wxDataViewColumn::wxDataViewColumn(wxBitmap
const& bitmap
, wxDataViewRenderer
*cell
, unsigned int model_column
, int width
, wxAlignment align
, int flags
)
707 :wxDataViewColumnBase(bitmap
,cell
,model_column
,width
,align
,flags
), m_ascending(true),
708 m_flags(flags
& ~(wxDATAVIEW_COL_HIDDEN
)), m_maxWidth(30000), m_minWidth(0), m_width(width
>= 0 ? width
: wxDVC_DEFAULT_WIDTH
),
711 } /* wxDataViewColumn::wxDataViewColumn(wxBitmap const&, wxDataViewRenderer*, unsigned int, int, wxAlignment, int) */
713 void wxDataViewColumn::SetAlignment(wxAlignment align
)
715 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
718 this->m_alignment
= align
;
719 if (dataViewCtrlPtr
!= NULL
)
721 // variable definition and initialization:
722 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
724 if (macDataViewListCtrlPtr
!= NULL
)
726 // variable definition and initialization:
727 DataBrowserListViewHeaderDesc headerDescription
;
729 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
733 case wxALIGN_CENTER_HORIZONTAL
:
734 headerDescription
.btnFontStyle
.just
= teCenter
;
737 headerDescription
.btnFontStyle
.just
= teFlushLeft
;
740 headerDescription
.btnFontStyle
.just
= teFlushRight
;
743 headerDescription
.btnFontStyle
.just
= teFlushDefault
;
745 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set alignment."));
748 } /* wxDataViewColumn::SetAlignment(wxAlignment) */
750 void wxDataViewColumn::SetBitmap(wxBitmap
const& bitmap
)
752 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
755 wxDataViewColumnBase::SetBitmap(bitmap
);
756 if (dataViewCtrlPtr
!= NULL
)
758 // variable definition and initialization:
759 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
761 if (macDataViewListCtrlPtr
!= NULL
)
763 // variable definition and initialization:
764 DataBrowserListViewHeaderDesc headerDescription
;
766 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
767 if (this->GetBitmap().Ok())
768 #if wxCHECK_VERSION(2,9,0)
769 headerDescription
.btnContentInfo
.u
.iconRef
= this->GetBitmap().GetIconRef();
771 headerDescription
.btnContentInfo
.u
.iconRef
= this->GetBitmap().GetBitmapData()->GetIconRef();
774 headerDescription
.btnContentInfo
.u
.iconRef
= NULL
;
775 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set icon."));
778 } /* wxDataViewColumn::SetBitmap(wxBitmap const&) */
780 void wxDataViewColumn::SetFlags(int flags
)
782 this->SetHidden ((flags
& wxDATAVIEW_COL_HIDDEN
) != 0);
783 this->SetReorderable((flags
& wxDATAVIEW_COL_REORDERABLE
) != 0);
784 this->SetResizeable ((flags
& wxDATAVIEW_COL_RESIZABLE
) != 0);
785 this->SetSortable ((flags
& wxDATAVIEW_COL_SORTABLE
) != 0);
786 } /* wxDataViewColumn::SetFlags(int) */
788 void wxDataViewColumn::SetMaxWidth(int maxWidth
)
790 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
793 this->m_maxWidth
= maxWidth
;
794 if (dataViewCtrlPtr
!= NULL
)
796 // variable definition and initialization:
797 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
799 if (macDataViewListCtrlPtr
!= NULL
)
801 // variable definition and initialization:
802 DataBrowserListViewHeaderDesc headerDescription
;
804 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
805 headerDescription
.maximumWidth
= static_cast<UInt16
>(maxWidth
);
806 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set maximum width."));
809 } /* wxDataViewColumn::SetMaxWidth(int) */
811 void wxDataViewColumn::SetMinWidth(int minWidth
)
813 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
816 this->m_minWidth
= minWidth
;
817 if (dataViewCtrlPtr
!= NULL
)
819 // variable definition and initialization:
820 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
822 if (macDataViewListCtrlPtr
!= NULL
)
824 // variable definition and initialization:
825 DataBrowserListViewHeaderDesc headerDescription
;
827 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
828 headerDescription
.minimumWidth
= static_cast<UInt16
>(minWidth
);
829 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set minimum width."));
832 } /* wxDataViewColumn::SetMaxWidth(int) */
834 void wxDataViewColumn::SetReorderable(bool reorderable
)
836 // first set the internal flag of the column:
838 this->m_flags
|= wxDATAVIEW_COL_REORDERABLE
;
840 this->m_flags
&= ~wxDATAVIEW_COL_REORDERABLE
;
841 // if the column is associated with a control change also immediately the flags of the control:
842 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner()); // variable definition and initialization
844 if (dataViewCtrlPtr
!= NULL
)
846 // variable definition and initialization:
847 DataBrowserPropertyFlags flags
;
848 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
850 wxCHECK_RET(macDataViewListCtrlPtr
!= NULL
, _("Valid pointer to native data view control does not exist"));
851 wxCHECK_RET(macDataViewListCtrlPtr
->GetPropertyFlags(this->GetPropertyID(),&flags
) == noErr
,_("Could not get property flags."));
853 flags
|= kDataBrowserListViewMovableColumn
;
855 flags
&= ~kDataBrowserListViewMovableColumn
;
856 wxCHECK_RET(macDataViewListCtrlPtr
->SetPropertyFlags(this->GetPropertyID(),flags
) == noErr
,_("Could not set property flags."));
858 } /* wxDataViewColumn::SetReorderable(bool) */
860 void wxDataViewColumn::SetResizeable(bool WXUNUSED(resizeable
))
862 } /* wxDataViewColumn::SetResizeable(bool) */
864 void wxDataViewColumn::SetSortable(bool sortable
)
866 // first set the internal flag of the column:
868 this->m_flags
|= wxDATAVIEW_COL_SORTABLE
;
870 this->m_flags
&= ~wxDATAVIEW_COL_SORTABLE
;
871 // if the column is associated with a control change also immediately the flags of the control:
872 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner()); // variable definition and initialization
874 if (dataViewCtrlPtr
!= NULL
)
876 // variable definition and initialization:
877 DataBrowserPropertyFlags flags
;
878 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
880 wxCHECK_RET(macDataViewListCtrlPtr
!= NULL
, _("Valid pointer to native data view control does not exist"));
881 wxCHECK_RET(macDataViewListCtrlPtr
->GetPropertyFlags(this->GetPropertyID(),&flags
) == noErr
,_("Could not get property flags."));
883 flags
|= kDataBrowserListViewSortableColumn
;
885 flags
&= ~kDataBrowserListViewSortableColumn
;
886 wxCHECK_RET(macDataViewListCtrlPtr
->SetPropertyFlags(this->GetPropertyID(),flags
) == noErr
,_("Could not set property flags."));
888 } /* wxDataViewColumn::SetSortable(bool) */
890 void wxDataViewColumn::SetSortOrder(bool ascending
)
892 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
895 this->m_ascending
= ascending
;
896 if (dataViewCtrlPtr
!= NULL
)
898 // variable definition and initialization:
899 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
901 if (macDataViewListCtrlPtr
!= NULL
)
903 // variable definition and initialization:
904 DataBrowserListViewHeaderDesc headerDescription
;
906 verify_noerr(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
));
908 headerDescription
.initialOrder
= kDataBrowserOrderIncreasing
;
910 headerDescription
.initialOrder
= kDataBrowserOrderDecreasing
;
911 verify_noerr(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
));
912 macDataViewListCtrlPtr
->SetSortProperty(this->GetPropertyID());
915 } /* wxDataViewColumn::SetSortOrder(bool) */
917 void wxDataViewColumn::SetTitle(wxString
const& title
)
919 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
922 this->m_title
= title
;
923 if (dataViewCtrlPtr
!= NULL
)
925 // variable definition and initialization:
926 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
928 if (macDataViewListCtrlPtr
!= NULL
)
930 // variable definition and initialization:
931 DataBrowserListViewHeaderDesc headerDescription
;
932 #if wxCHECK_VERSION(2,9,0)
933 wxCFStringRef
cfTitle(title
,(dataViewCtrlPtr
->GetFont().Ok() ? dataViewCtrlPtr
->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
935 wxMacCFStringHolder
cfTitle(title
,(dataViewCtrlPtr
->GetFont().Ok() ? dataViewCtrlPtr
->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
938 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
939 headerDescription
.titleString
= cfTitle
;
940 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set header description."));
943 } /* wxDataViewColumn::SetTitle(wxString const&) */
945 void wxDataViewColumn::SetWidth(int width
)
947 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
950 if ((width
>= this->m_minWidth
) && (width
<= this->m_maxWidth
))
952 this->m_width
= width
;
953 if (dataViewCtrlPtr
!= NULL
)
955 // variable definition and initialization:
956 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
958 if (macDataViewListCtrlPtr
!= NULL
)
959 wxCHECK_RET(macDataViewListCtrlPtr
->SetColumnWidth(this->GetPropertyID(),static_cast<UInt16
>(width
)) == noErr
,_("Could not set column width."));
962 } /* wxDataViewColumn::SetWidth(int) */
964 IMPLEMENT_ABSTRACT_CLASS(wxDataViewColumn
,wxDataViewColumnBase
)
966 //-----------------------------------------------------------------------------
968 //-----------------------------------------------------------------------------
970 void wxDataViewCtrl::Init(void)
972 this->m_CustomRendererPtr
= NULL
;
973 this->m_Deleting
= false;
974 this->m_macIsUserPane
= false;
975 this->m_cgContext
= NULL
;
976 } /* wxDataViewCtrl::Init(void) */
978 bool wxDataViewCtrl::Create(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, long style
, const wxValidator
& validator
)
980 if (!(this->wxControl::Create(parent
,id
,pos
,size
,(style
| wxSUNKEN_BORDER
) & ~(wxHSCROLL
| wxVSCROLL
),validator
)))
984 MacSetClipChildren(true) ;
987 this->m_peer
= new wxMacDataViewDataBrowserListViewControl(this,pos
,size
,style
);
988 this->MacPostControlCreate(pos
,size
);
989 ::SetAutomaticControlDragTrackingEnabledForWindow(::GetControlOwner(this->m_peer
->GetControlRef()),true);
991 InstallControlEventHandler(this->m_peer
->GetControlRef(),GetwxMacDataViewCtrlEventHandlerUPP(),GetEventTypeCount(eventList
),eventList
,this,NULL
);
993 ::SetDataBrowserTableViewHiliteStyle( this->m_peer
->GetControlRef(), kDataBrowserTableViewFillHilite
);
995 ::SetDataBrowserTableViewGeometry( this->m_peer
->GetControlRef(), true, false );
998 } /* wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator) */
1001 wxVisualAttributes
wxDataViewCtrl::GetClassDefaultAttributes(wxWindowVariant variant
)
1003 wxVisualAttributes attr
;
1005 attr
.colFg
= wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT
);
1006 attr
.colBg
= wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX
);
1007 attr
.font
.MacCreateFromThemeFont(kThemeViewsFont
);
1012 bool wxDataViewCtrl::AssociateModel(wxDataViewModel
* model
)
1014 if (!wxDataViewCtrlBase::AssociateModel(model
))
1017 model
->AddNotifier(new wxMacDataViewModelNotifier(dynamic_cast<wxMacDataViewDataBrowserListViewControl
*>(this->m_peer
)));
1020 } /* wxDataViewCtrl::AssociateModel(wxDataViewModel*) */
1022 bool wxDataViewCtrl::AppendColumn(wxDataViewColumn
* columnPtr
)
1024 DataBrowserListViewColumnDesc columnDescription
;
1026 DataBrowserPropertyID NewPropertyID
;
1028 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1030 #if wxCHECK_VERSION(2,9,0)
1031 wxCFStringRef
title(columnPtr
->GetTitle(),this->m_font
.Ok() ? this->GetFont().GetEncoding() : wxLocale::GetSystemEncoding());
1033 wxMacCFStringHolder
title(columnPtr
->GetTitle(),this->m_font
.Ok() ? this->GetFont().GetEncoding() : wxLocale::GetSystemEncoding());
1037 // first, some error checking:
1038 wxCHECK_MSG(MacDataViewListCtrlPtr
!= NULL
, false,_("m_peer is not or incorrectly initialized"));
1039 wxCHECK_MSG(columnPtr
!= NULL
, false,_("Column pointer must not be NULL."));
1040 wxCHECK_MSG(columnPtr
->GetRenderer() != NULL
, false,_("Column does not have a renderer."));
1041 wxCHECK_MSG(this->GetModel() != NULL
, false,_("No model associated with control."));
1042 wxCHECK_MSG((columnPtr
->GetModelColumn() >= 0) &&
1043 (columnPtr
->GetModelColumn() < this->GetModel()->GetColumnCount()),false,_("Column's model column has no equivalent in the associated model."));
1045 // try to get new ID for the column:
1046 wxCHECK_MSG(MacDataViewListCtrlPtr
->GetFreePropertyID(&NewPropertyID
) == noErr
,false,_("Cannot create new column's ID. Probably max. number of columns reached."));
1047 // full column variable initialization:
1048 columnPtr
->SetPropertyID(NewPropertyID
);
1049 // add column to wxWidget's internal structure:
1050 wxCHECK_MSG(this->wxDataViewCtrlBase::AppendColumn(columnPtr
) &&
1051 this->m_ColumnPointers
.insert(ColumnPointerHashMapType::value_type(NewPropertyID
,columnPtr
)).second
,false,_("Could not add column to internal structures."));
1052 // create a column description and add column to the native control:
1053 wxCHECK_MSG(::InitializeColumnDescription(columnDescription
,columnPtr
,NewPropertyID
,title
), false,_("Column description could not be initialized."));
1054 wxCHECK_MSG(MacDataViewListCtrlPtr
->AddColumn(&columnDescription
,kDataBrowserListViewAppendColumn
) == noErr
,false,_("Column could not be added."));
1056 // final adjustments for the layout:
1057 wxCHECK_MSG(MacDataViewListCtrlPtr
->SetColumnWidth(NewPropertyID
,columnPtr
->GetWidth()) == noErr
,false,_("Column width could not be set."));
1059 // make sure that the data is up-to-date...
1060 // if the newly appended column is the first column add the initial data to the control and mark the column as an expander column,
1061 // otherwise ask the control to 'update' the data in the newly appended column:
1062 if (this->GetColumnCount() == 1)
1064 this->SetExpanderColumn(columnPtr
);
1065 this->AddChildrenLevel(wxDataViewItem());
1068 MacDataViewListCtrlPtr
->UpdateItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
,NewPropertyID
);
1071 } /* wxDataViewCtrl::AppendColumn(wxDataViewColumn*) */
1073 bool wxDataViewCtrl::ClearColumns(void)
1075 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1078 while (this->m_ColumnPointers
.begin() != this->m_ColumnPointers
.end())
1080 wxCHECK_MSG(MacDataViewListCtrlPtr
->RemoveColumnByProperty(this->m_ColumnPointers
.begin()->first
) == noErr
,false,_("Could not remove column."));
1081 delete this->m_ColumnPointers
.begin()->second
;
1082 this->m_ColumnPointers
.erase(this->m_ColumnPointers
.begin());
1085 } /* wxDataViewCtrl::ClearColumns(void) */
1087 bool wxDataViewCtrl::DeleteColumn(wxDataViewColumn
* columnPtr
)
1089 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1092 if ((MacDataViewListCtrlPtr
->RemoveColumnByProperty(columnPtr
->GetPropertyID()) == noErr
) && (this->m_ColumnPointers
.erase(columnPtr
->GetPropertyID()) > 0))
1099 } /* wxDataViewCtrl::DeleteColumn(wxDataViewColumn*) */
1101 wxDataViewColumn
* wxDataViewCtrl::GetColumn(unsigned int pos
) const
1103 DataBrowserPropertyID propertyID
;
1105 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1108 if (MacDataViewListCtrlPtr
->GetPropertyID(pos
,&propertyID
) == noErr
)
1110 // variable definition:
1111 ColumnPointerHashMapType::const_iterator
Result(this->m_ColumnPointers
.find(propertyID
));
1113 if (Result
!= this->m_ColumnPointers
.end())
1114 return Result
->second
;
1120 } /* wxDataViewCtrl::GetColumn(unsigned int pos) const */
1122 unsigned int wxDataViewCtrl::GetColumnCount(void) const
1124 return this->m_ColumnPointers
.size();
1125 } /* wxDataViewCtrl::GetColumnCount(void) const */
1127 int wxDataViewCtrl::GetColumnPosition(wxDataViewColumn
const* columnPtr
) const
1129 if (columnPtr
!= NULL
)
1131 // variable definition and initialization:
1132 DataBrowserTableViewColumnIndex Position
;
1133 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1135 wxCHECK_MSG(MacDataViewListCtrlPtr
->GetColumnIndex(columnPtr
->GetPropertyID(),&Position
) == noErr
,-1,_("Could not determine column's position"));
1136 return static_cast<int>(Position
);
1140 } /* wxDataViewCtrl::GetColumnPosition(wxDataViewColumn const*) const */
1142 bool wxDataViewCtrl::PrependColumn(wxDataViewColumn
* columnPtr
)
1144 DataBrowserListViewColumnDesc columnDescription
;
1146 DataBrowserPropertyID NewPropertyID
;
1148 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1150 #if wxCHECK_VERSION(2,9,0)
1151 wxCFStringRef
title(columnPtr
->GetTitle(),this->m_font
.Ok() ? this->GetFont().GetEncoding() : wxLocale::GetSystemEncoding());
1153 wxMacCFStringHolder
title(columnPtr
->GetTitle(),this->m_font
.Ok() ? this->GetFont().GetEncoding() : wxLocale::GetSystemEncoding());
1157 // first, some error checking:
1158 wxCHECK_MSG(MacDataViewListCtrlPtr
!= NULL
, false,_("m_peer is not or incorrectly initialized"));
1159 wxCHECK_MSG(columnPtr
!= NULL
, false,_("Column pointer must not be NULL."));
1160 wxCHECK_MSG(columnPtr
->GetRenderer() != NULL
, false,_("Column does not have a renderer."));
1161 wxCHECK_MSG(this->GetModel() != NULL
, false,_("No model associated with control."));
1162 wxCHECK_MSG((columnPtr
->GetModelColumn() >= 0) &&
1163 (columnPtr
->GetModelColumn() < this->GetModel()->GetColumnCount()),false,_("Column's model column has no equivalent in the associated model."));
1165 // try to get new ID for the column:
1166 wxCHECK_MSG(MacDataViewListCtrlPtr
->GetFreePropertyID(&NewPropertyID
) == noErr
,false,_("Cannot create new column's ID. Probably max. number of columns reached."));
1167 // full column variable initialization:
1168 columnPtr
->SetPropertyID(NewPropertyID
);
1169 // add column to wxWidget's internal structure:
1170 wxCHECK_MSG(this->wxDataViewCtrlBase::AppendColumn(columnPtr
) &&
1171 this->m_ColumnPointers
.insert(ColumnPointerHashMapType::value_type(NewPropertyID
,columnPtr
)).second
,false,_("Could not add column to internal structures."));
1172 // create a column description and add column to the native control:
1173 wxCHECK_MSG(::InitializeColumnDescription(columnDescription
,columnPtr
,NewPropertyID
,title
),false,_("Column description could not be initialized."));
1174 wxCHECK_MSG(MacDataViewListCtrlPtr
->AddColumn(&columnDescription
,0) == noErr
, false,_("Column could not be added."));
1176 // final adjustments for the layout:
1177 wxCHECK_MSG(MacDataViewListCtrlPtr
->SetColumnWidth(NewPropertyID
,columnPtr
->GetWidth()) == noErr
,false,_("Column width could not be set."));
1179 // make sure that the data is up-to-date...
1180 // if the newly appended column is the first column add the initial data to the control and mark the column as an expander column,
1181 // otherwise ask the control to 'update' the data in the newly appended column:
1182 if (this->GetColumnCount() == 1)
1184 this->SetExpanderColumn(columnPtr
);
1185 this->AddChildrenLevel(wxDataViewItem());
1188 MacDataViewListCtrlPtr
->UpdateItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
,NewPropertyID
);
1191 } /* wxDataViewCtrl::PrependColumn(wxDataViewColumn*) */
1193 void wxDataViewCtrl::Collapse(wxDataViewItem
const& item
)
1195 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1198 MacDataViewListCtrlPtr
->CloseContainer(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1199 } /* wxDataViewCtrl::Collapse(wxDataViewItem const&) */
1201 void wxDataViewCtrl::EnsureVisible(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
)
1205 // variable definition and initialization:
1206 DataBrowserPropertyID propertyID
;
1207 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1209 if (columnPtr
!= NULL
)
1210 propertyID
= columnPtr
->GetPropertyID();
1212 propertyID
= kDataBrowserNoItem
;
1213 MacDataViewListCtrlPtr
->RevealItem(reinterpret_cast<DataBrowserItemID
>(item
.GetID()),propertyID
,kDataBrowserRevealOnly
);
1215 } /* wxDataViewCtrl::EnsureVisible(wxDataViewItem const&, wxDataViewColumn const*) */
1217 void wxDataViewCtrl::Expand(wxDataViewItem
const& item
)
1219 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1222 MacDataViewListCtrlPtr
->OpenContainer(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1223 } /* wxDataViewCtrl::Expand(wxDataViewItem const&) */
1225 wxDataViewColumn
* wxDataViewCtrl::GetSortingColumn(void) const
1227 DataBrowserPropertyID propertyID
;
1229 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1232 if (MacDataViewListCtrlPtr
->GetSortProperty(&propertyID
) == noErr
)
1233 return this->GetColumnPtr(propertyID
);
1236 } /* wxDataViewCtrl::GetSortingColumn(void) const */
1238 unsigned int wxDataViewCtrl::GetCount(void) const
1240 ItemCount noOfItems
;
1243 wxCHECK_MSG(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
)->GetItemCount(&noOfItems
) == noErr
,0,_("Could not determine number of items"));
1245 } /* wxDataViewCtrl::GetCount(void) const */
1247 wxRect
wxDataViewCtrl::GetItemRect(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
) const
1249 if (item
.IsOk() && (columnPtr
!= NULL
))
1251 // variable definition:
1253 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1255 if (MacDataViewListCtrlPtr
->GetPartBounds(reinterpret_cast<DataBrowserItemID
>(item
.GetID()),columnPtr
->GetPropertyID(),kDataBrowserPropertyContentPart
,&MacRectangle
) == noErr
)
1257 // variable definition:
1260 ::wxMacNativeToRect(&MacRectangle
,&rectangle
);
1268 } /* wxDataViewCtrl::GetItemRect(wxDataViewItem const&, unsigned int) const */
1270 wxDataViewItem
wxDataViewCtrl::GetSelection(void) const
1272 wxArrayDataBrowserItemID itemIDs
;
1274 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1277 if (MacDataViewListCtrlPtr
->GetSelectedItemIDs(itemIDs
) > 0)
1278 return wxDataViewItem(reinterpret_cast<void*>(itemIDs
[0]));
1280 return wxDataViewItem();
1281 } /* wxDataViewCtrl::GetSelection(void) const */
1283 int wxDataViewCtrl::GetSelections(wxDataViewItemArray
& sel
) const
1285 size_t NoOfSelectedItems
;
1287 wxArrayDataBrowserItemID itemIDs
;
1289 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1292 NoOfSelectedItems
= MacDataViewListCtrlPtr
->GetSelectedItemIDs(itemIDs
);
1294 sel
.SetCount(NoOfSelectedItems
);
1295 for (size_t i
=0; i
<NoOfSelectedItems
; ++i
)
1296 sel
[i
] = wxDataViewItem(reinterpret_cast<void*>(itemIDs
[i
]));
1297 return static_cast<int>(NoOfSelectedItems
);
1298 } /* wxDataViewCtrl::GetSelections(wxDataViewItemArray&) const */
1300 void wxDataViewCtrl::HitTest(wxPoint
const& point
, wxDataViewItem
& item
, wxDataViewColumn
*& columnPtr
) const
1302 item
= wxDataViewItem();
1304 } /* wxDataViewCtrl::HitTest(wxPoint const&, wxDataViewItem&, wxDataViewColumn*&) const */
1306 bool wxDataViewCtrl::IsSelected(wxDataViewItem
const& item
) const
1308 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1311 return MacDataViewListCtrlPtr
->IsItemSelected(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1312 } /* wxDataViewCtrl::IsSelected(wxDataViewItem const&) const */
1314 void wxDataViewCtrl::SelectAll(void)
1316 DataBrowserItemID
* itemIDPtr
;
1318 Handle
handle(::NewHandle(0));
1322 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1325 wxCHECK_RET(MacDataViewListCtrlPtr
->GetItems(kDataBrowserNoItem
,true,kDataBrowserItemAnyState
,handle
) == noErr
,_("Could not get items."));
1326 NoOfItems
= static_cast<size_t>(::GetHandleSize(handle
)/sizeof(DataBrowserItemID
));
1328 itemIDPtr
= (DataBrowserItemID
*) (*handle
);
1329 MacDataViewListCtrlPtr
->SetSelectedItems(NoOfItems
,itemIDPtr
,kDataBrowserItemsAssign
);
1331 DisposeHandle(handle
);
1332 } /* wxDataViewCtrl::SelectAll(void) */
1334 void wxDataViewCtrl::Select(wxDataViewItem
const& item
)
1338 // variable definition and initialization:
1339 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1340 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1342 MacDataViewListCtrlPtr
->SetSelectedItems(1,&itemID
,kDataBrowserItemsAdd
);
1344 } /* wxDataViewCtrl::Select(wxDataViewItem const&) */
1346 void wxDataViewCtrl::SetSelections(wxDataViewItemArray
const& sel
)
1348 size_t const NoOfSelections
= sel
.GetCount();
1350 DataBrowserItemID
* itemIDs
;
1352 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1355 itemIDs
= new DataBrowserItemID
[NoOfSelections
];
1356 for (size_t i
=0; i
<NoOfSelections
; ++i
)
1357 itemIDs
[i
] = reinterpret_cast<DataBrowserItemID
>(sel
[i
].GetID());
1358 MacDataViewListCtrlPtr
->SetSelectedItems(NoOfSelections
,itemIDs
,kDataBrowserItemsAssign
);
1360 } /* wxDataViewCtrl::SetSelections(wxDataViewItemArray const&) */
1362 void wxDataViewCtrl::Unselect(wxDataViewItem
const& item
)
1366 // variable definition and initialization:
1367 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1368 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1370 MacDataViewListCtrlPtr
->SetSelectedItems(1,&itemID
,kDataBrowserItemsRemove
);
1372 } /* wxDataViewCtrl::Unselect(wxDataViewItem const&) */
1374 void wxDataViewCtrl::UnselectAll(void)
1376 DataBrowserItemID
* itemIDPtr
;
1378 Handle
handle(::NewHandle(0));
1382 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1385 wxCHECK_RET(MacDataViewListCtrlPtr
->GetItems(kDataBrowserNoItem
,true,kDataBrowserItemAnyState
,handle
) == noErr
,_("Could not get items."));
1386 NoOfItems
= static_cast<size_t>(::GetHandleSize(handle
)/sizeof(DataBrowserItemID
));
1388 itemIDPtr
= (DataBrowserItemID
*) (*handle
);
1389 MacDataViewListCtrlPtr
->SetSelectedItems(NoOfItems
,itemIDPtr
,kDataBrowserItemsRemove
);
1391 DisposeHandle(handle
);
1392 } /* wxDataViewCtrl::UnselectAll(void) */
1395 void wxDataViewCtrl::AddChildrenLevel(wxDataViewItem
const& parentItem
)
1399 wxDataViewItemArray items
;
1402 wxCHECK_RET(this->GetModel() != NULL
,_("Model pointer not initialized."));
1403 NoOfChildren
= this->GetModel()->GetChildren(parentItem
,items
);
1405 for (int i
=0; i
<NoOfChildren
; ++i
)
1406 (void) this->GetModel()->ItemAdded(parentItem
,items
[i
]);
1408 (void) this->GetModel()->ItemsAdded(parentItem
,items
);
1410 } /* wxDataViewCtrl::AddChildrenLevel(wxDataViewItem const&) */
1412 void wxDataViewCtrl::FinishCustomItemEditing(void)
1414 if (this->GetCustomRendererItem().IsOk())
1416 this->GetCustomRendererPtr()->FinishEditing();
1417 this->SetCustomRendererItem(wxDataViewItem());
1418 this->SetCustomRendererPtr (NULL
);
1420 } /* wxDataViewCtrl::FinishCustomItemEditing(void) */
1422 wxDataViewColumn
* wxDataViewCtrl::GetColumnPtr(WXDataBrowserPropertyID propertyID
) const
1424 // variable definition:
1425 ColumnPointerHashMapType::const_iterator
Result(this->m_ColumnPointers
.find(propertyID
));
1427 if (Result
!= this->m_ColumnPointers
.end())
1428 return Result
->second
;
1431 } /* wxDataViewCtrl::GetColumnPtr(DataBrowserPropertyID) const */
1433 // inherited methods from wxDataViewCtrlBase
1434 void wxDataViewCtrl::DoSetExpanderColumn(void)
1436 if (this->GetExpanderColumn() != NULL
)
1438 // variable definition and initialization:
1439 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1441 (void) MacDataViewListCtrlPtr
->SetDisclosureColumn(this->GetExpanderColumn()->GetPropertyID(),false); // second parameter explicitely passed to ensure that arrow is centered
1443 } /* wxDataViewCtrl::DoSetExpanderColumn(void) */
1445 void wxDataViewCtrl::DoSetIndent(void)
1447 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1450 (void) MacDataViewListCtrlPtr
->SetIndent(static_cast<float>(this->GetIndent()));
1451 } /* wxDataViewCtrl::DoSetIndent(void) */
1454 void wxDataViewCtrl::OnSize(wxSizeEvent
& event
)
1456 unsigned int const NoOfColumns
= this->GetColumnCount();
1459 for (unsigned int i
=0; i
<NoOfColumns
; ++i
)
1461 // variable definition and initialization:
1462 wxDataViewColumn
* dataViewColumnPtr(this->GetColumn(i
));
1464 if (dataViewColumnPtr
!= NULL
)
1466 // variable definition and initialization:
1467 wxDataViewCustomRenderer
* dataViewCustomRendererPtr(dynamic_cast<wxDataViewCustomRenderer
*>(dataViewColumnPtr
->GetRenderer()));
1469 if (dataViewCustomRendererPtr
!= NULL
)
1470 dataViewCustomRendererPtr
->SetDC(NULL
); // reset DC because DC has changed
1474 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1475 ControlRef ref
= MacDataViewListCtrlPtr
->GetControlRef();
1476 if (NoOfColumns
== 1)
1478 ::SetDataBrowserHasScrollBars( ref
, false, true );
1479 ::AutoSizeDataBrowserListViewColumns( ref
);
1481 if (NoOfColumns
> 1)
1483 ::SetDataBrowserHasScrollBars( ref
, true, true );
1487 } /* wxDataViewCtrl::OnSize(wxSizeEvent&) */
1489 IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl
,wxDataViewCtrlBase
)
1491 BEGIN_EVENT_TABLE(wxDataViewCtrl
,wxDataViewCtrlBase
)
1492 EVT_SIZE(wxDataViewCtrl::OnSize
)
1496 // !wxUSE_GENERICDATAVIEWCTRL
1499 // wxUSE_DATAVIEWCTRL