From: Vadim Zeitlin Date: Mon, 12 Oct 2009 13:59:44 +0000 (+0000) Subject: Add support for cell attributes to wxDVC in wxOSX/Cocoa. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f6b3bfba97a03b0daead0eb460b5e47968f1e51e Add support for cell attributes to wxDVC in wxOSX/Cocoa. Set the colour and font for the cell before rendering it if we have an attribute for it. The colours in dataview sample now work as expected, but making the font bold or italic still doesn't work for some reason. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62386 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 7e536000f5..224c89c53f 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -1505,15 +1505,56 @@ wxWidgetImplType* CreateDataView(wxWindowMac* wxpeer, wxWindowMac* WXUNUSED(pare return NO; } --(void) outlineView:(NSOutlineView*)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn*) tableColumn item:(id)item -{ - wxDataViewColumn* dataViewColumnPtr(reinterpret_cast([[tableColumn identifier] pointer])); +-(void) outlineView:(wxCocoaOutlineView*)outlineView + willDisplayCell:(id)cell + forTableColumn:(NSTableColumn*)tableColumn + item:(id)item +{ + wxDataViewCtrl * const dvc = implementation->GetDataViewCtrl(); + wxDataViewModel * const model = dvc->GetModel(); + + wxDataViewColumn * const + dvCol(reinterpret_cast( + [[tableColumn identifier] pointer] + ) + ); + + wxDataViewItem dvItem([static_cast(item) pointer]); + wxDataViewItemAttr attr; + if ( model && model->GetAttr(dvItem, dvCol->GetModelColumn(), attr) ) + { + if ( attr.HasFont() ) + { + wxFont font(dvc->GetFont()); + if ( attr.GetBold() ) + font.MakeBold(); + if ( attr.GetItalic() ) + font.MakeItalic(); + [cell setFont:font.OSXGetNSFont()]; + } + + // we can set font for any cell but only NSTextFieldCell provides a + // method for setting text colour so check that this method is + // available before using it + if ( attr.HasColour() && + [cell respondsToSelector:@selector(setTextColor:)] ) + { + const wxColour& c = attr.GetColour(); + [cell setTextColor:[NSColor colorWithDeviceRed:c.Red() + green:c.Green() + blue:c.Blue() + alpha:c.Alpha()]]; + } + } + + wxDataViewRenderer * const renderer = dvCol->GetRenderer(); + wxDataViewRendererNativeData * const data = renderer->GetNativeData(); + data->SetColumnPtr(tableColumn); + data->SetItem(item); + data->SetItemCell(cell); - dataViewColumnPtr->GetRenderer()->GetNativeData()->SetColumnPtr(tableColumn); - dataViewColumnPtr->GetRenderer()->GetNativeData()->SetItem(item); - dataViewColumnPtr->GetRenderer()->GetNativeData()->SetItemCell(cell); - (void) dataViewColumnPtr->GetRenderer()->MacRender(); + renderer->MacRender(); } //