I have a simple setup, a wxDataViewListCtrl, the first column uses wxDataViewCustomRenderer and the second column is just text.
class MyCustomRenderer : public wxDataViewCustomRenderer
I add a line to the wxDataViewListCtrl like this:
wxVector<wxVariant> item;
item.push_back(wxVariant(/*a raw pointer of MyClass goes here*/));
item.push_back(wxVariant("some string goes here"));
m_data_view_list_ctrl->AppendItem(item);
item.clear();
And this is MyClass:
class MyClass final : public wxObject
And this is how my SetValue method looks like:
bool MyCustomRenderer::SetValue(const wxVariant& value)
{
MyClass* temp = static_cast<MyClass*>(value.GetWxObjectPtr());
/*Do stuff with temp here...*/
return true;
}
It worked, now it does not. It fails with the following error: https://www.dropbox.com/s/acxbzthp3ltadny/wxwidgets.png?dl=0
The only thing I changed is that I updated my static libs of wxWidgets from 3.0.4 to 3.1.2. Why has it stopped working? What am I missing here? Please help me :-)
Thank you all for answering. The problem was solved here. In short I needed to change this line like this:
MyCustomRenderer::MyCustomRenderer() : wxDataViewCustomRenderer("void*", wxDATAVIEW_CELL_INERT, wxALIGN_CENTER)
And this one like this:
item.push_back(wxVariant(static_cast<void*>(/*Raw pointer to an instance of MyClass*/)));
I'm not sure which change exactly is responsible for this, but the value, returned by your model for the cell being drawn, is null, so your renderer can't just use it blindly and should check if ( !value.IsNull() )
before doing it (and maybe just return in this case or do whatever is appropriate to show the absence of a value in your case).