1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/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/osx/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 if (columnPtr
->GetBitmap().IsOk())
179 columnDescription
.headerBtnDesc
.btnContentInfo
.contentType
= kControlContentIconRef
;
180 #if wxCHECK_VERSION(2,9,0)
181 columnDescription
.headerBtnDesc
.btnContentInfo
.u
.iconRef
= columnPtr
->GetBitmap().GetIconRef();
183 columnDescription
.headerBtnDesc
.btnContentInfo
.u
.iconRef
= columnPtr
->GetBitmap().GetBitmapData()->GetIconRef();
188 // not text only as we otherwise could not add a bitmap later
189 // columnDescription.headerBtnDesc.btnContentInfo.contentType = kControlContentTextOnly;
190 columnDescription
.headerBtnDesc
.btnContentInfo
.contentType
= kControlContentIconRef
;
191 columnDescription
.headerBtnDesc
.btnContentInfo
.u
.iconRef
= NULL
;
196 } /* InitializeColumnDescription(DataBrowserListViewColumnDesc&, wxDataViewColumn const*, DataBrowserPropertyID, wxMacCFStringHolder const&) */
198 //-----------------------------------------------------------------------------
199 // local function pointers
200 //-----------------------------------------------------------------------------
202 DEFINE_ONE_SHOT_HANDLER_GETTER(wxMacDataViewCtrlEventHandler
)
204 // ---------------------------------------------------------
205 // wxMacDataViewModelNotifier
206 // ---------------------------------------------------------
208 class wxMacDataViewModelNotifier
: public wxDataViewModelNotifier
211 wxMacDataViewModelNotifier(wxMacDataViewDataBrowserListViewControl
* initDataViewControlPtr
) : m_dataViewControlPtr(initDataViewControlPtr
)
215 virtual bool ItemAdded(const wxDataViewItem
&parent
, const wxDataViewItem
&item
)
217 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
219 wxCHECK_MSG(item
.IsOk(),false,_("Added item is invalid."));
220 bool noFailureFlag
= (!(parent
.IsOk()) && (this->m_dataViewControlPtr
->AddItem(kDataBrowserNoItem
,&itemID
) == noErr
) ||
221 parent
.IsOk() && (this->m_dataViewControlPtr
->AddItem(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),&itemID
) == noErr
));
223 wxDataViewCtrl
*dvc
= (wxDataViewCtrl
*) this->m_dataViewControlPtr
->GetWXPeer();
224 if (dvc
->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT
)
226 wxDataViewModel
*model
= GetOwner();
228 int height
= 20; // TODO find out standard height
229 unsigned int num
= dvc
->GetColumnCount();
231 for (col
= 0; col
< num
; col
++)
233 wxDataViewColumn
*column
= dvc
->GetColumn( col
);
234 if (column
->IsHidden())
237 wxDataViewCustomRenderer
*renderer
= wxDynamicCast( column
->GetRenderer(), wxDataViewCustomRenderer
);
241 model
->GetValue( value
, item
, column
->GetModelColumn() );
242 renderer
->SetValue( value
);
243 height
= wxMax( height
, renderer
->GetSize().y
);
249 this->m_dataViewControlPtr
->SetRowHeight( itemID
, height
);
252 return noFailureFlag
;
253 } /* ItemAdded(wxDataViewItem const&, wxDataViewItem const&) */
255 virtual bool ItemsAdded(wxDataViewItem
const& parent
, wxDataViewItemArray
const& items
)
259 DataBrowserItemID
* itemIDs
;
264 // convert all valid data view items to data browser items:
265 itemIDs
= ::CreateDataBrowserItemIDArray(noOfEntries
,items
);
266 // insert all valid items into control:
267 noFailureFlag
= ((noOfEntries
== 0) ||
268 !(parent
.IsOk()) && (this->m_dataViewControlPtr
->AddItems(kDataBrowserNoItem
,noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
) ||
269 parent
.IsOk() && (this->m_dataViewControlPtr
->AddItems(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
));
270 // give allocated array space free again:
273 wxDataViewCtrl
*dvc
= (wxDataViewCtrl
*) this->m_dataViewControlPtr
->GetWXPeer();
274 if (dvc
->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT
)
276 wxDataViewModel
*model
= GetOwner();
277 unsigned int colnum
= dvc
->GetColumnCount();
280 size_t count
= items
.GetCount();
281 for (i
= 0; i
< count
; i
++)
283 wxDataViewItem item
= items
[i
];
284 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
286 int height
= 20; // TODO find out standard height
288 for (col
= 0; col
< colnum
; col
++)
290 wxDataViewColumn
*column
= dvc
->GetColumn( col
);
291 if (column
->IsHidden())
292 continue; // skip it!
294 if ((col
!= 0) && model
->IsContainer(item
) && !model
->HasContainerColumns(item
))
295 continue; // skip it!
297 wxDataViewCustomRenderer
*renderer
= wxDynamicCast( column
->GetRenderer(), wxDataViewCustomRenderer
);
301 model
->GetValue( value
, item
, column
->GetModelColumn() );
302 renderer
->SetValue( value
);
303 height
= wxMax( height
, renderer
->GetSize().y
);
308 this->m_dataViewControlPtr
->SetRowHeight( itemID
, height
);
313 return noFailureFlag
;
314 } /* ItemsAdded(wxDataViewItem const&, wxDataViewItemArray const&) */
316 virtual bool ItemChanged(wxDataViewItem
const& item
)
318 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
321 wxCHECK_MSG(item
.IsOk(),false,_("Changed item is invalid."));
322 if (this->m_dataViewControlPtr
->UpdateItems(&itemID
) == noErr
)
324 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetWXPeer()));
326 // sent the equivalent wxWidget event:
327 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED
,dataViewCtrlPtr
->GetId()); // variable defintion
329 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
330 dataViewEvent
.SetItem(item
);
331 // sent the equivalent wxWidget event:
332 #if wxCHECK_VERSION(2,9,0)
333 dataViewCtrlPtr
->HandleWindowEvent(dataViewEvent
);
335 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
342 } /* ItemChanged(wxDataViewItem const&) */
344 virtual bool ItemsChanged(wxDataViewItemArray
const& items
)
348 DataBrowserItemID
* itemIDs
;
353 // convert all valid data view items to data browser items:
354 itemIDs
= ::CreateDataBrowserItemIDArray(noOfEntries
,items
);
355 // change items (ATTENTION: ONLY ITEMS OF THE ROOT ARE CHANGED BECAUSE THE PARENT PARAMETER IS MISSING):
356 noFailureFlag
= (this->m_dataViewControlPtr
->UpdateItems(kDataBrowserNoItem
,noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
,kDataBrowserItemNoProperty
) == noErr
);
359 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetWXPeer()));
361 // send for all changed items a wxWidget event:
362 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED
,dataViewCtrlPtr
->GetId()); // variable defintion
364 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
365 for (size_t i
=0; i
<noOfEntries
; ++i
)
367 dataViewEvent
.SetItem(reinterpret_cast<void*>(itemIDs
[i
]));
368 #if wxCHECK_VERSION(2,9,0)
369 dataViewCtrlPtr
->HandleWindowEvent(dataViewEvent
);
371 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
375 // release allocated array space:
378 return noFailureFlag
;
379 } /* ItemsChanged(wxDataViewItem const&) */
381 virtual bool ItemDeleted(wxDataViewItem
const& parent
, wxDataViewItem
const& item
)
385 // variable definition and initialization:
386 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
387 OSStatus errorStatus
;
388 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetWXPeer()));
390 // 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
391 // not to be identical because the being edited item might be below the passed item in the hierarchy);
392 // to prevent the control trying to ask the model to update an already deleted item the control is informed that currently a deleting process
393 // has been started and that variables can currently not be updated even when requested by the system:
394 dataViewCtrlPtr
->SetDeleting(true);
395 errorStatus
= this->m_dataViewControlPtr
->RemoveItem(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),&itemID
);
396 // enable automatic updating again:
397 dataViewCtrlPtr
->SetDeleting(false);
398 return (errorStatus
== noErr
);
402 } /* ItemDeleted(wxDataViewItem const&, wxDataViewItem const&) */
404 virtual bool ItemsDeleted(wxDataViewItem
const& parent
, wxDataViewItemArray
const& items
)
408 DataBrowserItemID
* itemIDs
;
410 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetWXPeer()));
415 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
,false,_("Data view control is not correctly initialized"));
416 // convert all valid data view items to data browser items:
417 itemIDs
= ::CreateDataBrowserItemIDArray(noOfEntries
,items
);
418 // 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
419 // not to be identical because the being edited item might be below the passed item in the hierarchy);
420 // to prevent the control trying to ask the model to update an already deleted item the control is informed that currently a deleting process
421 // has been started and that variables can currently not be updated even when requested by the system:
422 dataViewCtrlPtr
->SetDeleting(true);
423 // insert all valid items into control:
424 noFailureFlag
= ((noOfEntries
== 0) ||
425 !(parent
.IsOk()) && (this->m_dataViewControlPtr
->RemoveItems(kDataBrowserNoItem
,noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
) ||
426 parent
.IsOk() && (this->m_dataViewControlPtr
->RemoveItems(reinterpret_cast<DataBrowserItemID
>(parent
.GetID()),noOfEntries
,itemIDs
,kDataBrowserItemNoProperty
) == noErr
));
427 // enable automatic updating again:
428 dataViewCtrlPtr
->SetDeleting(false);
429 // give allocated array space free again:
432 return noFailureFlag
;
433 } /* ItemsDeleted(wxDataViewItem const&, wxDataViewItemArray const&) */
435 virtual bool ValueChanged(wxDataViewItem
const& item
, unsigned int col
)
437 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
438 DataBrowserItemID parentID
;
440 DataBrowserPropertyID propertyID
;
442 wxDataViewCtrl
* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl
*>(this->m_dataViewControlPtr
->GetWXPeer()));
445 wxCHECK_MSG(item
.IsOk(), false,_("Passed item is invalid."));
446 wxCHECK_MSG(this->GetOwner() != NULL
,false,_("Owner not initialized."));
447 wxCHECK_MSG(dataViewCtrlPtr
!= NULL
, false,_("Control is wrongly initialized."));
448 parentID
= reinterpret_cast<DataBrowserItemID
>(this->GetOwner()->GetParent(item
).GetID());
449 if ((this->m_dataViewControlPtr
->GetPropertyID(col
,&propertyID
) == noErr
) &&
450 (this->m_dataViewControlPtr
->UpdateItems(parentID
,1,&itemID
,dataViewCtrlPtr
->GetColumn(col
)->GetPropertyID(),propertyID
) == noErr
))
452 // variable definition and initialization:
453 wxDataViewEvent
dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED
,dataViewCtrlPtr
->GetId());
455 dataViewEvent
.SetEventObject(dataViewCtrlPtr
);
456 dataViewEvent
.SetColumn(col
);
457 dataViewEvent
.SetItem(item
);
458 // send the equivalent wxWidget event:
459 #if wxCHECK_VERSION(2,9,0)
460 dataViewCtrlPtr
->HandleWindowEvent(dataViewEvent
);
462 dataViewCtrlPtr
->GetEventHandler()->ProcessEvent(dataViewEvent
);
469 } /* ValueChanged(wxDataViewItem const&, unsigned int) */
471 virtual bool Cleared()
473 bool noFailureFlag
= (this->m_dataViewControlPtr
->RemoveItems() == noErr
);
475 wxDataViewItemArray array
;
476 GetOwner()->GetChildren( item
, array
);
477 ItemsAdded( item
, array
);
478 this->m_dataViewControlPtr
->SetScrollPosition(0, 0);
479 return noFailureFlag
;
482 virtual void Resort()
484 this->m_dataViewControlPtr
->Resort();
492 wxMacDataViewDataBrowserListViewControl
* m_dataViewControlPtr
;
495 // ---------------------------------------------------------
496 // wxDataViewRenderer
497 // ---------------------------------------------------------
499 wxDataViewRenderer::wxDataViewRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
500 :wxDataViewRendererBase(varianttype
,mode
,align
), m_alignment(align
), m_mode(mode
)
502 } /* wxDataViewRenderer::wxDataViewRenderer(wxString const&, wxDataViewCellMode) */
504 void wxDataViewRenderer::SetMode(wxDataViewCellMode mode
)
506 wxDataViewColumn
* dataViewColumnPtr
;
510 dataViewColumnPtr
= this->GetOwner();
511 if (dataViewColumnPtr
!= NULL
)
513 // variable definition and initialization:
514 wxDataViewCtrl
* dataViewCtrlPtr(dataViewColumnPtr
->GetOwner());
516 if (dataViewCtrlPtr
!= NULL
)
518 // variable definition and initialization:
519 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
521 if (macDataViewListCtrlPtr
!= NULL
)
523 // variable definition and initialization:
524 DataBrowserPropertyFlags flags
;
526 verify_noerr(macDataViewListCtrlPtr
->GetPropertyFlags(dataViewColumnPtr
->GetPropertyID(),&flags
));
527 if (mode
== wxDATAVIEW_CELL_EDITABLE
)
528 flags
|= kDataBrowserPropertyIsEditable
;
530 flags
&= ~kDataBrowserPropertyIsEditable
;
531 verify_noerr(macDataViewListCtrlPtr
->SetPropertyFlags(dataViewColumnPtr
->GetPropertyID(),flags
));
535 } /* wxDataViewRenderer::SetMode(wxDataViewCellMode) */
537 IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer
,wxDataViewRendererBase
)
539 // ---------------------------------------------------------
540 // wxDataViewCustomRenderer
541 // ---------------------------------------------------------
543 wxDataViewCustomRenderer::wxDataViewCustomRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
544 :wxDataViewRenderer(varianttype
,mode
,align
), m_editorCtrlPtr(NULL
), m_DCPtr(NULL
)
546 } /* wxDataViewCustomRenderer::wxDataViewCustomRenderer(wxString const&, wxDataViewCellMode) */
548 wxDataViewCustomRenderer::~wxDataViewCustomRenderer()
550 if (this->m_DCPtr
!= NULL
)
551 delete this->m_DCPtr
;
552 } /* wxDataViewCustomRenderer::~wxDataViewCustomRenderer() */
554 void wxDataViewCustomRenderer::RenderText( const wxString
&text
, int xoffset
, wxRect cell
, wxDC
*dc
, int state
)
556 wxDataViewCtrl
*view
= GetOwner()->GetOwner();
557 // wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ? wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) : view->GetForegroundColour();
558 wxColour col
= (state
& wxDATAVIEW_CELL_SELECTED
) ? *wxWHITE
: view
->GetForegroundColour();
559 dc
->SetTextForeground(col
);
560 dc
->DrawText( text
, cell
.x
+ xoffset
, cell
.y
+ ((cell
.height
- dc
->GetCharHeight()) / 2));
563 wxDC
* wxDataViewCustomRenderer::GetDC()
565 if (this->m_DCPtr
== NULL
)
567 if ((GetOwner() == NULL
) || (GetOwner()->GetOwner() == NULL
))
569 this->m_DCPtr
= new wxWindowDC(this->GetOwner()->GetOwner());
571 return this->m_DCPtr
;
572 } /* wxDataViewCustomRenderer::GetDC() */
574 bool wxDataViewCustomRenderer::Render()
577 } /* wxDataViewCustomRenderer::Render() */
579 void wxDataViewCustomRenderer::SetDC(wxDC
* newDCPtr
)
581 delete this->m_DCPtr
;
582 this->m_DCPtr
= newDCPtr
;
583 } /* wxDataViewCustomRenderer::SetDC(wxDC*) */
585 WXDataBrowserPropertyType
wxDataViewCustomRenderer::GetPropertyType() const
587 return kDataBrowserCustomType
;
588 } /* wxDataViewCustomRenderer::GetPropertyType() const */
590 IMPLEMENT_ABSTRACT_CLASS(wxDataViewCustomRenderer
, wxDataViewRenderer
)
592 // ---------------------------------------------------------
593 // wxDataViewTextRenderer
594 // ---------------------------------------------------------
596 wxDataViewTextRenderer::wxDataViewTextRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
597 :wxDataViewRenderer(varianttype
,mode
,align
)
599 } /* wxDataViewTextRenderer::wxDataViewTextRenderer(wxString const&, wxDataViewCellMode, int) */
601 bool wxDataViewTextRenderer::Render()
603 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Text renderer cannot render value; value type: ")) << this->GetValue().GetType());
605 // variable definition:
606 #if wxCHECK_VERSION(2,9,0)
607 wxCFStringRef
cfString(this->GetValue().GetString(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
609 wxMacCFStringHolder
cfString(this->GetValue().GetString(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
611 return (::SetDataBrowserItemDataText(this->GetDataReference(),cfString
) == noErr
);
612 } /* wxDataViewTextRenderer::Render() */
614 WXDataBrowserPropertyType
wxDataViewTextRenderer::GetPropertyType() const
616 return kDataBrowserTextType
;
617 } /* wxDataViewTextRenderer::GetPropertyType() const */
619 IMPLEMENT_CLASS(wxDataViewTextRenderer
,wxDataViewRenderer
)
621 // ---------------------------------------------------------
622 // wxDataViewTextRendererAttr
623 // ---------------------------------------------------------
625 wxDataViewTextRendererAttr::wxDataViewTextRendererAttr(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
626 :wxDataViewTextRenderer(varianttype
,mode
,align
)
628 } /* wxDataViewTextRendererAttr::wxDataViewTextRendererAttr(wxString const&, wxDataViewCellMode, int) */
630 IMPLEMENT_CLASS(wxDataViewTextRendererAttr
,wxDataViewTextRenderer
)
632 // ---------------------------------------------------------
633 // wxDataViewBitmapRenderer
634 // ---------------------------------------------------------
636 wxDataViewBitmapRenderer::wxDataViewBitmapRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
637 :wxDataViewRenderer(varianttype
,mode
,align
)
641 bool wxDataViewBitmapRenderer::Render()
642 // This method returns 'true' if
643 // - the passed bitmap is valid and it could be assigned to the native data browser;
644 // - the passed bitmap is invalid (or is not initialized); this case simulates a non-existing bitmap.
645 // In all other cases the method returns 'false'.
647 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Bitmap renderer cannot render value; value type: ")) << this->GetValue().GetType());
649 // variable definition:
652 bitmap
<< this->GetValue();
654 #if wxCHECK_VERSION(2,9,0)
655 return (::SetDataBrowserItemDataIcon(this->GetDataReference(),bitmap
.GetIconRef()) == noErr
);
657 return (::SetDataBrowserItemDataIcon(this->GetDataReference(),bitmap
.GetBitmapData()->GetIconRef()) == noErr
);
661 } /* wxDataViewBitmapRenderer::Render() */
663 WXDataBrowserPropertyType
wxDataViewBitmapRenderer::GetPropertyType() const
665 return kDataBrowserIconType
;
666 } /* wxDataViewBitmapRenderer::GetPropertyType() const */
668 IMPLEMENT_CLASS(wxDataViewBitmapRenderer
,wxDataViewRenderer
)
670 // ---------------------------------------------------------
671 // wxDataViewIconTextRenderer
672 // ---------------------------------------------------------
674 wxDataViewIconTextRenderer::wxDataViewIconTextRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
675 :wxDataViewRenderer(varianttype
,mode
)
679 bool wxDataViewIconTextRenderer::Render()
681 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Icon & text renderer cannot render value; value type: ")) << this->GetValue().GetType());
683 // variable definition:
684 wxDataViewIconText iconText
;
686 iconText
<< this->GetValue();
688 // variable definition:
689 #if wxCHECK_VERSION(2,9,0)
690 wxCFStringRef
cfString(iconText
.GetText(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
692 wxMacCFStringHolder
cfString(iconText
.GetText(),(this->GetView()->GetFont().Ok() ? this->GetView()->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
695 if (iconText
.GetIcon().IsOk())
696 if (::SetDataBrowserItemDataIcon(this->GetDataReference(),MAC_WXHICON(iconText
.GetIcon().GetHICON())) != noErr
)
698 return (::SetDataBrowserItemDataText(this->GetDataReference(),cfString
) == noErr
);
699 } /* wxDataViewIconTextRenderer::Render() */
701 WXDataBrowserPropertyType
wxDataViewIconTextRenderer::GetPropertyType() const
703 return kDataBrowserIconAndTextType
;
704 } /* wxDataViewIconTextRenderer::GetPropertyType() const */
706 IMPLEMENT_ABSTRACT_CLASS(wxDataViewIconTextRenderer
,wxDataViewRenderer
)
709 // ---------------------------------------------------------
710 // wxDataViewToggleRenderer
711 // ---------------------------------------------------------
713 wxDataViewToggleRenderer::wxDataViewToggleRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
714 :wxDataViewRenderer(varianttype
,mode
)
718 bool wxDataViewToggleRenderer::Render()
720 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Toggle renderer cannot render value; value type: ")) << this->GetValue().GetType());
721 return (::SetDataBrowserItemDataButtonValue(this->GetDataReference(),this->GetValue().GetBool()) == noErr
);
722 } /* wxDataViewToggleRenderer::Render() */
724 WXDataBrowserPropertyType
wxDataViewToggleRenderer::GetPropertyType() const
726 return kDataBrowserCheckboxType
;
727 } /* wxDataViewToggleRenderer::GetPropertyType() const */
729 IMPLEMENT_ABSTRACT_CLASS(wxDataViewToggleRenderer
,wxDataViewRenderer
)
731 // ---------------------------------------------------------
732 // wxDataViewProgressRenderer
733 // ---------------------------------------------------------
735 wxDataViewProgressRenderer::wxDataViewProgressRenderer(wxString
const& label
, wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
736 :wxDataViewRenderer(varianttype
,mode
,align
)
740 bool wxDataViewProgressRenderer::Render()
742 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Progress renderer cannot render value type; value type: ")) << this->GetValue().GetType());
743 return ((::SetDataBrowserItemDataMinimum(this->GetDataReference(), 0) == noErr
) &&
744 (::SetDataBrowserItemDataMaximum(this->GetDataReference(),100) == noErr
) &&
745 (::SetDataBrowserItemDataValue (this->GetDataReference(),this->GetValue().GetLong()) == noErr
));
746 } /* wxDataViewProgressRenderer::Render() */
748 WXDataBrowserPropertyType
wxDataViewProgressRenderer::GetPropertyType() const
750 return kDataBrowserProgressBarType
;
751 } /* wxDataViewProgressRenderer::GetPropertyType() const */
753 IMPLEMENT_ABSTRACT_CLASS(wxDataViewProgressRenderer
,wxDataViewRenderer
)
755 // ---------------------------------------------------------
756 // wxDataViewDateRenderer
757 // ---------------------------------------------------------
759 wxDataViewDateRenderer::wxDataViewDateRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
, int align
)
760 :wxDataViewRenderer(varianttype
,mode
,align
)
764 bool wxDataViewDateRenderer::Render()
766 wxCHECK_MSG(this->GetValue().GetType() == this->GetVariantType(),false,wxString(_("Date renderer cannot render value; value type: ")) << this->GetValue().GetType());
767 return (::SetDataBrowserItemDataDateTime(this->GetDataReference(),this->GetValue().GetDateTime().Subtract(wxDateTime(1,wxDateTime::Jan
,1904)).GetSeconds().GetLo()) == noErr
);
768 } /* wxDataViewDateRenderer::Render() */
770 WXDataBrowserPropertyType
wxDataViewDateRenderer::GetPropertyType() const
772 return kDataBrowserDateTimeType
;
773 } /* wxDataViewDateRenderer::GetPropertyType() const */
775 IMPLEMENT_ABSTRACT_CLASS(wxDataViewDateRenderer
,wxDataViewRenderer
)
777 // ---------------------------------------------------------
779 // ---------------------------------------------------------
781 wxDataViewColumn::wxDataViewColumn(wxString
const &title
, wxDataViewRenderer
*cell
, unsigned int model_column
, int width
, wxAlignment align
, int flags
)
782 :wxDataViewColumnBase(title
,cell
,model_column
,width
,align
,flags
), m_ascending(true),
783 m_flags(flags
& ~(wxDATAVIEW_COL_HIDDEN
)), m_maxWidth(30000), m_minWidth(0), m_width(width
>= 0 ? width
: wxDVC_DEFAULT_WIDTH
),
784 m_alignment(align
), m_title(title
)
786 } /* wxDataViewColumn::wxDataViewColumn(wxString const &title, wxDataViewRenderer*, unsigned int, int, wxAlignment, int) */
788 wxDataViewColumn::wxDataViewColumn(wxBitmap
const& bitmap
, wxDataViewRenderer
*cell
, unsigned int model_column
, int width
, wxAlignment align
, int flags
)
789 :wxDataViewColumnBase(bitmap
,cell
,model_column
,width
,align
,flags
), m_ascending(true),
790 m_flags(flags
& ~(wxDATAVIEW_COL_HIDDEN
)), m_maxWidth(30000), m_minWidth(0), m_width(width
>= 0 ? width
: wxDVC_DEFAULT_WIDTH
),
793 } /* wxDataViewColumn::wxDataViewColumn(wxBitmap const&, wxDataViewRenderer*, unsigned int, int, wxAlignment, int) */
795 void wxDataViewColumn::SetAlignment(wxAlignment align
)
797 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
800 this->m_alignment
= align
;
801 if (dataViewCtrlPtr
!= NULL
)
803 // variable definition and initialization:
804 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
806 if (macDataViewListCtrlPtr
!= NULL
)
808 // variable definition and initialization:
809 DataBrowserListViewHeaderDesc headerDescription
;
811 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
815 case wxALIGN_CENTER_HORIZONTAL
:
816 headerDescription
.btnFontStyle
.just
= teCenter
;
819 headerDescription
.btnFontStyle
.just
= teFlushLeft
;
822 headerDescription
.btnFontStyle
.just
= teFlushRight
;
825 headerDescription
.btnFontStyle
.just
= teFlushDefault
;
827 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set alignment."));
830 } /* wxDataViewColumn::SetAlignment(wxAlignment) */
832 void wxDataViewColumn::SetBitmap(wxBitmap
const& bitmap
)
834 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
837 wxDataViewColumnBase::SetBitmap(bitmap
);
838 if (dataViewCtrlPtr
!= NULL
)
840 // variable definition and initialization:
841 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
843 if (macDataViewListCtrlPtr
!= NULL
)
845 // variable definition and initialization:
846 DataBrowserListViewHeaderDesc headerDescription
;
848 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
849 if (this->GetBitmap().Ok())
850 #if wxCHECK_VERSION(2,9,0)
851 headerDescription
.btnContentInfo
.u
.iconRef
= this->GetBitmap().GetIconRef();
853 headerDescription
.btnContentInfo
.u
.iconRef
= this->GetBitmap().GetBitmapData()->GetIconRef();
856 headerDescription
.btnContentInfo
.u
.iconRef
= NULL
;
857 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set icon."));
860 } /* wxDataViewColumn::SetBitmap(wxBitmap const&) */
862 void wxDataViewColumn::SetFlags(int flags
)
864 this->SetHidden ((flags
& wxDATAVIEW_COL_HIDDEN
) != 0);
865 this->SetReorderable((flags
& wxDATAVIEW_COL_REORDERABLE
) != 0);
866 this->SetResizeable ((flags
& wxDATAVIEW_COL_RESIZABLE
) != 0);
867 this->SetSortable ((flags
& wxDATAVIEW_COL_SORTABLE
) != 0);
868 } /* wxDataViewColumn::SetFlags(int) */
870 void wxDataViewColumn::SetMaxWidth(int maxWidth
)
872 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
875 this->m_maxWidth
= maxWidth
;
876 if (dataViewCtrlPtr
!= NULL
)
878 // variable definition and initialization:
879 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
881 if (macDataViewListCtrlPtr
!= NULL
)
883 // variable definition and initialization:
884 DataBrowserListViewHeaderDesc headerDescription
;
886 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
887 headerDescription
.maximumWidth
= static_cast<UInt16
>(maxWidth
);
888 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set maximum width."));
891 } /* wxDataViewColumn::SetMaxWidth(int) */
893 void wxDataViewColumn::SetMinWidth(int minWidth
)
895 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
898 this->m_minWidth
= minWidth
;
899 if (dataViewCtrlPtr
!= NULL
)
901 // variable definition and initialization:
902 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
904 if (macDataViewListCtrlPtr
!= NULL
)
906 // variable definition and initialization:
907 DataBrowserListViewHeaderDesc headerDescription
;
909 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
910 headerDescription
.minimumWidth
= static_cast<UInt16
>(minWidth
);
911 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set minimum width."));
914 } /* wxDataViewColumn::SetMaxWidth(int) */
916 void wxDataViewColumn::SetReorderable(bool reorderable
)
918 // first set the internal flag of the column:
920 this->m_flags
|= wxDATAVIEW_COL_REORDERABLE
;
922 this->m_flags
&= ~wxDATAVIEW_COL_REORDERABLE
;
923 // if the column is associated with a control change also immediately the flags of the control:
924 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner()); // variable definition and initialization
926 if (dataViewCtrlPtr
!= NULL
)
928 // variable definition and initialization:
929 DataBrowserPropertyFlags flags
;
930 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
932 wxCHECK_RET(macDataViewListCtrlPtr
!= NULL
, _("Valid pointer to native data view control does not exist"));
933 wxCHECK_RET(macDataViewListCtrlPtr
->GetPropertyFlags(this->GetPropertyID(),&flags
) == noErr
,_("Could not get property flags."));
935 flags
|= kDataBrowserListViewMovableColumn
;
937 flags
&= ~kDataBrowserListViewMovableColumn
;
938 wxCHECK_RET(macDataViewListCtrlPtr
->SetPropertyFlags(this->GetPropertyID(),flags
) == noErr
,_("Could not set property flags."));
940 } /* wxDataViewColumn::SetReorderable(bool) */
942 void wxDataViewColumn::SetResizeable(bool resizeable
)
944 // first set the internal flag of the column:
946 this->m_flags
|= wxDATAVIEW_COL_RESIZABLE
;
948 this->m_flags
&= ~wxDATAVIEW_COL_RESIZABLE
;
949 // if the column is associated with a control change also immediately the flags of the control:
950 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner()); // variable definition and initialization
952 if (dataViewCtrlPtr
!= NULL
)
954 // variable definition and initialization:
955 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
957 if (macDataViewListCtrlPtr
!= NULL
)
959 // variable definition and initialization:
960 DataBrowserListViewHeaderDesc headerDescription
;
962 verify_noerr(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
));
964 headerDescription
.minimumWidth
= 0;
965 headerDescription
.maximumWidth
= 30000;
968 headerDescription
.minimumWidth
= this->m_width
;
969 headerDescription
.maximumWidth
= this->m_width
;
971 verify_noerr(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
));
972 macDataViewListCtrlPtr
->SetSortProperty(this->GetPropertyID());
975 } /* wxDataViewColumn::SetResizeable(bool) */
977 void wxDataViewColumn::SetSortable(bool sortable
)
979 // first set the internal flag of the column:
981 this->m_flags
|= wxDATAVIEW_COL_SORTABLE
;
983 this->m_flags
&= ~wxDATAVIEW_COL_SORTABLE
;
984 // if the column is associated with a control change also immediately the flags of the control:
985 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner()); // variable definition and initialization
987 if (dataViewCtrlPtr
!= NULL
)
989 // variable definition and initialization:
990 DataBrowserPropertyFlags flags
;
991 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
993 wxCHECK_RET(macDataViewListCtrlPtr
!= NULL
, _("Valid pointer to native data view control does not exist"));
994 wxCHECK_RET(macDataViewListCtrlPtr
->GetPropertyFlags(this->GetPropertyID(),&flags
) == noErr
,_("Could not get property flags."));
996 flags
|= kDataBrowserListViewSortableColumn
;
998 flags
&= ~kDataBrowserListViewSortableColumn
;
999 wxCHECK_RET(macDataViewListCtrlPtr
->SetPropertyFlags(this->GetPropertyID(),flags
) == noErr
,_("Could not set property flags."));
1001 } /* wxDataViewColumn::SetSortable(bool) */
1003 void wxDataViewColumn::SetSortOrder(bool ascending
)
1005 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
1008 this->m_ascending
= ascending
;
1009 if (dataViewCtrlPtr
!= NULL
)
1011 // variable definition and initialization:
1012 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
1014 if (macDataViewListCtrlPtr
!= NULL
)
1016 // variable definition and initialization:
1017 DataBrowserListViewHeaderDesc headerDescription
;
1019 verify_noerr(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
));
1021 headerDescription
.initialOrder
= kDataBrowserOrderIncreasing
;
1023 headerDescription
.initialOrder
= kDataBrowserOrderDecreasing
;
1024 verify_noerr(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
));
1025 macDataViewListCtrlPtr
->SetSortProperty(this->GetPropertyID());
1028 } /* wxDataViewColumn::SetSortOrder(bool) */
1030 void wxDataViewColumn::SetTitle(wxString
const& title
)
1032 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
1035 this->m_title
= title
;
1036 if (dataViewCtrlPtr
!= NULL
)
1038 // variable definition and initialization:
1039 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
1041 if (macDataViewListCtrlPtr
!= NULL
)
1043 // variable definition and initialization:
1044 DataBrowserListViewHeaderDesc headerDescription
;
1045 #if wxCHECK_VERSION(2,9,0)
1046 wxCFStringRef
cfTitle(title
,(dataViewCtrlPtr
->GetFont().Ok() ? dataViewCtrlPtr
->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
1048 wxMacCFStringHolder
cfTitle(title
,(dataViewCtrlPtr
->GetFont().Ok() ? dataViewCtrlPtr
->GetFont().GetEncoding() : wxLocale::GetSystemEncoding()));
1051 wxCHECK_RET(macDataViewListCtrlPtr
->GetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not get header description."));
1052 headerDescription
.titleString
= cfTitle
;
1053 wxCHECK_RET(macDataViewListCtrlPtr
->SetHeaderDesc(this->GetPropertyID(),&headerDescription
) == noErr
,_("Could not set header description."));
1056 } /* wxDataViewColumn::SetTitle(wxString const&) */
1058 void wxDataViewColumn::SetWidth(int width
)
1060 wxDataViewCtrl
* dataViewCtrlPtr(this->GetOwner());
1063 if ((width
>= this->m_minWidth
) && (width
<= this->m_maxWidth
))
1065 this->m_width
= width
;
1066 if (dataViewCtrlPtr
!= NULL
)
1068 // variable definition and initialization:
1069 wxMacDataViewDataBrowserListViewControlPointer
macDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(dataViewCtrlPtr
->GetPeer()));
1071 if (macDataViewListCtrlPtr
!= NULL
)
1072 wxCHECK_RET(macDataViewListCtrlPtr
->SetColumnWidth(this->GetPropertyID(),static_cast<UInt16
>(width
)) == noErr
,_("Could not set column width."));
1075 } /* wxDataViewColumn::SetWidth(int) */
1077 IMPLEMENT_ABSTRACT_CLASS(wxDataViewColumn
,wxDataViewColumnBase
)
1079 //-----------------------------------------------------------------------------
1081 //-----------------------------------------------------------------------------
1084 wxDataViewCtrl::~wxDataViewCtrl()
1090 void wxDataViewCtrl::Init()
1092 this->m_CustomRendererPtr
= NULL
;
1093 this->m_Deleting
= false;
1094 this->m_macIsUserPane
= false;
1095 this->m_cgContext
= NULL
;
1096 } /* wxDataViewCtrl::Init() */
1098 bool wxDataViewCtrl::Create(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, long style
, const wxValidator
& validator
)
1100 if (!(this->wxControl::Create(parent
,id
,pos
,size
,style
& ~(wxHSCROLL
| wxVSCROLL
),validator
)))
1104 MacSetClipChildren(true) ;
1107 this->m_peer
= new wxMacDataViewDataBrowserListViewControl(this,pos
,size
,style
);
1109 if ( style
& wxBORDER_NONE
)
1110 this->m_peer
->SetData( kControlNoPart
, kControlDataBrowserIncludesFrameAndFocusTag
, (Boolean
) false ) ;
1112 this->MacPostControlCreate(pos
,size
);
1113 ::SetAutomaticControlDragTrackingEnabledForWindow(::GetControlOwner(this->m_peer
->GetControlRef()),true);
1115 InstallControlEventHandler(this->m_peer
->GetControlRef(),GetwxMacDataViewCtrlEventHandlerUPP(),GetEventTypeCount(eventList
),eventList
,this,NULL
);
1117 ::SetDataBrowserTableViewHiliteStyle( this->m_peer
->GetControlRef(), kDataBrowserTableViewFillHilite
);
1120 } /* wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator) */
1123 wxVisualAttributes
wxDataViewCtrl::GetClassDefaultAttributes(wxWindowVariant variant
)
1125 wxVisualAttributes attr
;
1127 attr
.colFg
= wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT
);
1128 attr
.colBg
= wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX
);
1129 attr
.font
.MacCreateFromThemeFont(kThemeViewsFont
);
1134 bool wxDataViewCtrl::AssociateModel(wxDataViewModel
* model
)
1136 if (!wxDataViewCtrlBase::AssociateModel(model
))
1139 model
->AddNotifier(new wxMacDataViewModelNotifier(dynamic_cast<wxMacDataViewDataBrowserListViewControl
*>(this->m_peer
)));
1144 bool wxDataViewCtrl::AppendColumn(wxDataViewColumn
* columnPtr
)
1146 return InsertColumn( kDataBrowserListViewAppendColumn
, columnPtr
);
1149 bool wxDataViewCtrl::PrependColumn(wxDataViewColumn
* columnPtr
)
1151 return InsertColumn( 0, columnPtr
);
1154 bool wxDataViewCtrl::InsertColumn(unsigned int pos
, wxDataViewColumn
* columnPtr
)
1156 DataBrowserListViewColumnDesc columnDescription
;
1158 DataBrowserPropertyID NewPropertyID
;
1160 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1162 #if wxCHECK_VERSION(2,9,0)
1163 wxCFStringRef
title(columnPtr
->GetTitle(),this->m_font
.Ok() ? this->GetFont().GetEncoding() : wxLocale::GetSystemEncoding());
1165 wxMacCFStringHolder
title(columnPtr
->GetTitle(),this->m_font
.Ok() ? this->GetFont().GetEncoding() : wxLocale::GetSystemEncoding());
1169 // first, some error checking:
1170 wxCHECK_MSG(MacDataViewListCtrlPtr
!= NULL
, false,_("m_peer is not or incorrectly initialized"));
1171 wxCHECK_MSG(columnPtr
!= NULL
, false,_("Column pointer must not be NULL."));
1172 wxCHECK_MSG(columnPtr
->GetRenderer() != NULL
, false,_("Column does not have a renderer."));
1173 wxCHECK_MSG(this->GetModel() != NULL
, false,_("No model associated with control."));
1174 wxCHECK_MSG((columnPtr
->GetModelColumn() >= 0) &&
1175 (columnPtr
->GetModelColumn() < this->GetModel()->GetColumnCount()),false,_("Column's model column has no equivalent in the associated model."));
1177 // try to get new ID for the column:
1178 wxCHECK_MSG(MacDataViewListCtrlPtr
->GetFreePropertyID(&NewPropertyID
) == noErr
,false,_("Cannot create new column's ID. Probably max. number of columns reached."));
1179 // full column variable initialization:
1180 columnPtr
->SetPropertyID(NewPropertyID
);
1181 // add column to wxWidget's internal structure:
1182 wxCHECK_MSG(this->wxDataViewCtrlBase::AppendColumn(columnPtr
) &&
1183 this->m_ColumnPointers
.insert(ColumnPointerHashMapType::value_type(NewPropertyID
,columnPtr
)).second
,false,_("Could not add column to internal structures."));
1184 // create a column description and add column to the native control:
1185 wxCHECK_MSG(::InitializeColumnDescription(columnDescription
,columnPtr
,NewPropertyID
,title
), false,_("Column description could not be initialized."));
1186 wxCHECK_MSG(MacDataViewListCtrlPtr
->AddColumn(&columnDescription
,pos
) == noErr
,false,_("Column could not be added."));
1188 // final adjustments for the layout:
1189 wxCHECK_MSG(MacDataViewListCtrlPtr
->SetColumnWidth(NewPropertyID
,columnPtr
->GetWidth()) == noErr
,false,_("Column width could not be set."));
1191 // make sure that the data is up-to-date...
1192 // if the newly appended column is the first column add the initial data to the control and mark the column as an expander column,
1193 // otherwise ask the control to 'update' the data in the newly appended column:
1194 if (this->GetColumnCount() == 1)
1196 this->SetExpanderColumn(columnPtr
);
1197 this->AddChildrenLevel(wxDataViewItem());
1200 MacDataViewListCtrlPtr
->UpdateItems(kDataBrowserNoItem
,0,NULL
,kDataBrowserItemNoProperty
,NewPropertyID
);
1205 bool wxDataViewCtrl::ClearColumns()
1207 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1210 while (this->m_ColumnPointers
.begin() != this->m_ColumnPointers
.end())
1212 wxCHECK_MSG(MacDataViewListCtrlPtr
->RemoveColumnByProperty(this->m_ColumnPointers
.begin()->first
) == noErr
,false,_("Could not remove column."));
1213 delete this->m_ColumnPointers
.begin()->second
;
1214 this->m_ColumnPointers
.erase(this->m_ColumnPointers
.begin());
1219 bool wxDataViewCtrl::DeleteColumn(wxDataViewColumn
* columnPtr
)
1221 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1224 if ((MacDataViewListCtrlPtr
->RemoveColumnByProperty(columnPtr
->GetPropertyID()) == noErr
) && (this->m_ColumnPointers
.erase(columnPtr
->GetPropertyID()) > 0))
1231 } /* wxDataViewCtrl::DeleteColumn(wxDataViewColumn*) */
1233 wxDataViewColumn
* wxDataViewCtrl::GetColumn(unsigned int pos
) const
1235 DataBrowserPropertyID propertyID
;
1237 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1240 if (MacDataViewListCtrlPtr
->GetPropertyID(pos
,&propertyID
) == noErr
)
1242 // variable definition:
1243 ColumnPointerHashMapType::const_iterator
Result(this->m_ColumnPointers
.find(propertyID
));
1245 if (Result
!= this->m_ColumnPointers
.end())
1246 return Result
->second
;
1252 } /* wxDataViewCtrl::GetColumn(unsigned int pos) const */
1254 unsigned int wxDataViewCtrl::GetColumnCount() const
1256 return this->m_ColumnPointers
.size();
1257 } /* wxDataViewCtrl::GetColumnCount() const */
1259 int wxDataViewCtrl::GetColumnPosition(wxDataViewColumn
const* columnPtr
) const
1261 if (columnPtr
!= NULL
)
1263 // variable definition and initialization:
1264 DataBrowserTableViewColumnIndex Position
;
1265 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1267 wxCHECK_MSG(MacDataViewListCtrlPtr
->GetColumnIndex(columnPtr
->GetPropertyID(),&Position
) == noErr
,-1,_("Could not determine column's position"));
1268 return static_cast<int>(Position
);
1272 } /* wxDataViewCtrl::GetColumnPosition(wxDataViewColumn const*) const */
1274 void wxDataViewCtrl::Collapse(wxDataViewItem
const& item
)
1276 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1279 MacDataViewListCtrlPtr
->CloseContainer(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1280 } /* wxDataViewCtrl::Collapse(wxDataViewItem const&) */
1282 void wxDataViewCtrl::EnsureVisible(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
)
1286 // variable definition and initialization:
1287 DataBrowserPropertyID propertyID
;
1288 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1290 if (columnPtr
!= NULL
)
1291 propertyID
= columnPtr
->GetPropertyID();
1293 propertyID
= kDataBrowserNoItem
;
1294 MacDataViewListCtrlPtr
->RevealItem(reinterpret_cast<DataBrowserItemID
>(item
.GetID()),propertyID
,kDataBrowserRevealOnly
);
1296 } /* wxDataViewCtrl::EnsureVisible(wxDataViewItem const&, wxDataViewColumn const*) */
1298 void wxDataViewCtrl::Expand(wxDataViewItem
const& item
)
1300 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1303 MacDataViewListCtrlPtr
->OpenContainer(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1304 } /* wxDataViewCtrl::Expand(wxDataViewItem const&) */
1306 wxDataViewColumn
* wxDataViewCtrl::GetSortingColumn() const
1308 DataBrowserPropertyID propertyID
;
1310 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1313 if (MacDataViewListCtrlPtr
->GetSortProperty(&propertyID
) == noErr
)
1314 return this->GetColumnPtr(propertyID
);
1317 } /* wxDataViewCtrl::GetSortingColumn() const */
1319 unsigned int wxDataViewCtrl::GetCount() const
1321 ItemCount noOfItems
;
1324 wxCHECK_MSG(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
)->GetItemCount(&noOfItems
) == noErr
,0,_("Could not determine number of items"));
1326 } /* wxDataViewCtrl::GetCount() const */
1328 wxRect
wxDataViewCtrl::GetItemRect(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
) const
1330 if (item
.IsOk() && (columnPtr
!= NULL
))
1332 // variable definition:
1334 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1336 if (MacDataViewListCtrlPtr
->GetPartBounds(reinterpret_cast<DataBrowserItemID
>(item
.GetID()),columnPtr
->GetPropertyID(),kDataBrowserPropertyContentPart
,&MacRectangle
) == noErr
)
1338 // variable definition:
1341 ::wxMacNativeToRect(&MacRectangle
,&rectangle
);
1349 } /* wxDataViewCtrl::GetItemRect(wxDataViewItem const&, unsigned int) const */
1351 wxDataViewItem
wxDataViewCtrl::GetSelection() const
1353 wxArrayDataBrowserItemID itemIDs
;
1355 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1358 if (MacDataViewListCtrlPtr
->GetSelectedItemIDs(itemIDs
) > 0)
1359 return wxDataViewItem(reinterpret_cast<void*>(itemIDs
[0]));
1361 return wxDataViewItem();
1362 } /* wxDataViewCtrl::GetSelection() const */
1364 int wxDataViewCtrl::GetSelections(wxDataViewItemArray
& sel
) const
1366 size_t NoOfSelectedItems
;
1368 wxArrayDataBrowserItemID itemIDs
;
1370 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1373 NoOfSelectedItems
= MacDataViewListCtrlPtr
->GetSelectedItemIDs(itemIDs
);
1375 sel
.SetCount(NoOfSelectedItems
);
1376 for (size_t i
=0; i
<NoOfSelectedItems
; ++i
)
1377 sel
[i
] = wxDataViewItem(reinterpret_cast<void*>(itemIDs
[i
]));
1378 return static_cast<int>(NoOfSelectedItems
);
1379 } /* wxDataViewCtrl::GetSelections(wxDataViewItemArray&) const */
1381 void wxDataViewCtrl::HitTest(wxPoint
const& point
, wxDataViewItem
& item
, wxDataViewColumn
*& columnPtr
) const
1383 item
= wxDataViewItem();
1385 } /* wxDataViewCtrl::HitTest(wxPoint const&, wxDataViewItem&, wxDataViewColumn*&) const */
1387 bool wxDataViewCtrl::IsSelected(wxDataViewItem
const& item
) const
1389 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1392 return MacDataViewListCtrlPtr
->IsItemSelected(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1393 } /* wxDataViewCtrl::IsSelected(wxDataViewItem const&) const */
1395 void wxDataViewCtrl::SelectAll()
1397 DataBrowserItemID
* itemIDPtr
;
1399 Handle
handle(::NewHandle(0));
1403 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1406 wxCHECK_RET(MacDataViewListCtrlPtr
->GetItems(kDataBrowserNoItem
,true,kDataBrowserItemAnyState
,handle
) == noErr
,_("Could not get items."));
1407 NoOfItems
= static_cast<size_t>(::GetHandleSize(handle
)/sizeof(DataBrowserItemID
));
1409 itemIDPtr
= (DataBrowserItemID
*) (*handle
);
1410 MacDataViewListCtrlPtr
->SetSelectedItems(NoOfItems
,itemIDPtr
,kDataBrowserItemsAssign
);
1412 DisposeHandle(handle
);
1413 } /* wxDataViewCtrl::SelectAll() */
1415 void wxDataViewCtrl::Select(wxDataViewItem
const& item
)
1419 // variable definition and initialization:
1420 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1421 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1423 MacDataViewListCtrlPtr
->SetSelectedItems(1,&itemID
,kDataBrowserItemsAdd
);
1425 } /* wxDataViewCtrl::Select(wxDataViewItem const&) */
1427 void wxDataViewCtrl::SetSelections(wxDataViewItemArray
const& sel
)
1429 size_t const NoOfSelections
= sel
.GetCount();
1431 DataBrowserItemID
* itemIDs
;
1433 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1436 itemIDs
= new DataBrowserItemID
[NoOfSelections
];
1437 for (size_t i
=0; i
<NoOfSelections
; ++i
)
1438 itemIDs
[i
] = reinterpret_cast<DataBrowserItemID
>(sel
[i
].GetID());
1439 MacDataViewListCtrlPtr
->SetSelectedItems(NoOfSelections
,itemIDs
,kDataBrowserItemsAssign
);
1441 } /* wxDataViewCtrl::SetSelections(wxDataViewItemArray const&) */
1443 void wxDataViewCtrl::Unselect(wxDataViewItem
const& item
)
1447 // variable definition and initialization:
1448 DataBrowserItemID
itemID(reinterpret_cast<DataBrowserItemID
>(item
.GetID()));
1449 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1451 MacDataViewListCtrlPtr
->SetSelectedItems(1,&itemID
,kDataBrowserItemsRemove
);
1453 } /* wxDataViewCtrl::Unselect(wxDataViewItem const&) */
1455 void wxDataViewCtrl::UnselectAll()
1457 DataBrowserItemID
* itemIDPtr
;
1459 Handle
handle(::NewHandle(0));
1463 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1466 wxCHECK_RET(MacDataViewListCtrlPtr
->GetItems(kDataBrowserNoItem
,true,kDataBrowserItemAnyState
,handle
) == noErr
,_("Could not get items."));
1467 NoOfItems
= static_cast<size_t>(::GetHandleSize(handle
)/sizeof(DataBrowserItemID
));
1469 itemIDPtr
= (DataBrowserItemID
*) (*handle
);
1470 MacDataViewListCtrlPtr
->SetSelectedItems(NoOfItems
,itemIDPtr
,kDataBrowserItemsRemove
);
1472 DisposeHandle(handle
);
1473 } /* wxDataViewCtrl::UnselectAll() */
1476 void wxDataViewCtrl::AddChildrenLevel(wxDataViewItem
const& parentItem
)
1480 wxDataViewItemArray items
;
1483 wxCHECK_RET(this->GetModel() != NULL
,_("Model pointer not initialized."));
1484 NoOfChildren
= this->GetModel()->GetChildren(parentItem
,items
);
1486 for (int i
=0; i
<NoOfChildren
; ++i
)
1487 (void) this->GetModel()->ItemAdded(parentItem
,items
[i
]);
1489 (void) this->GetModel()->ItemsAdded(parentItem
,items
);
1493 void wxDataViewCtrl::FinishCustomItemEditing()
1495 if (this->GetCustomRendererItem().IsOk())
1497 this->GetCustomRendererPtr()->FinishEditing();
1498 this->SetCustomRendererItem(wxDataViewItem());
1499 this->SetCustomRendererPtr (NULL
);
1503 wxDataViewColumn
* wxDataViewCtrl::GetColumnPtr(WXDataBrowserPropertyID propertyID
) const
1505 // variable definition:
1506 ColumnPointerHashMapType::const_iterator
Result(this->m_ColumnPointers
.find(propertyID
));
1508 if (Result
!= this->m_ColumnPointers
.end())
1509 return Result
->second
;
1514 // inherited methods from wxDataViewCtrlBase
1515 void wxDataViewCtrl::DoSetExpanderColumn()
1517 if (this->GetExpanderColumn() != NULL
)
1519 // variable definition and initialization:
1520 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1522 (void) MacDataViewListCtrlPtr
->SetDisclosureColumn(this->GetExpanderColumn()->GetPropertyID(),false); // second parameter explicitely passed to ensure that arrow is centered
1526 void wxDataViewCtrl::DoSetIndent()
1528 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1530 (void) MacDataViewListCtrlPtr
->SetIndent(static_cast<float>(this->GetIndent()));
1534 void wxDataViewCtrl::OnSize(wxSizeEvent
& event
)
1536 unsigned int const NoOfColumns
= this->GetColumnCount();
1539 for (unsigned int i
=0; i
<NoOfColumns
; ++i
)
1541 // variable definition and initialization:
1542 wxDataViewColumn
* dataViewColumnPtr(this->GetColumn(i
));
1544 if (dataViewColumnPtr
!= NULL
)
1546 // variable definition and initialization:
1547 wxDataViewCustomRenderer
* dataViewCustomRendererPtr(dynamic_cast<wxDataViewCustomRenderer
*>(dataViewColumnPtr
->GetRenderer()));
1549 if (dataViewCustomRendererPtr
!= NULL
)
1550 dataViewCustomRendererPtr
->SetDC(NULL
); // reset DC because DC has changed
1554 wxMacDataViewDataBrowserListViewControlPointer
MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer
>(this->m_peer
));
1555 ControlRef ref
= MacDataViewListCtrlPtr
->GetControlRef();
1556 if (NoOfColumns
== 1)
1558 ::SetDataBrowserHasScrollBars( ref
, false, true );
1559 ::AutoSizeDataBrowserListViewColumns( ref
);
1561 if (NoOfColumns
> 1)
1563 ::SetDataBrowserHasScrollBars( ref
, true, true );
1567 } /* wxDataViewCtrl::OnSize(wxSizeEvent&) */
1569 IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl
,wxDataViewCtrlBase
)
1571 BEGIN_EVENT_TABLE(wxDataViewCtrl
,wxDataViewCtrlBase
)
1572 EVT_SIZE(wxDataViewCtrl::OnSize
)
1576 // !wxUSE_GENERICDATAVIEWCTRL
1579 // wxUSE_DATAVIEWCTRL