]> git.saurik.com Git - wxWidgets.git/commitdiff
Add support for cell attributes to wxDVC in wxOSX/Cocoa.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Oct 2009 13:59:44 +0000 (13:59 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Oct 2009 13:59:44 +0000 (13:59 +0000)
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

src/osx/cocoa/dataview.mm

index 7e536000f54f0e57f75b06ac2f1717f5132cdb7a..224c89c53f825e7fdbd869db86a417af1033c674 100644 (file)
@@ -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<wxDataViewColumn*>([[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<wxDataViewColumn*>(
+                [[tableColumn identifier] pointer]
+            )
+        );
+
+    wxDataViewItem dvItem([static_cast<wxPointerObject *>(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();
 }
 
 //