Refactor type checks in wxOSX wxDVC implementation.
Check the type in one place only, before calling MacRender() instead of doing it in each and every implementation of it. Also replace wxFAIL_MSG() with wxLogDebug() as the former resulted in a crash due to assert reentrancy, as usual when asserting inside a wxEVT_PAINT handler which is constantly called all the time, and so wasn't particularly useful. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78295 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1766,6 +1766,21 @@ outlineView:(NSOutlineView*)outlineView
|
||||
return;
|
||||
|
||||
wxDataViewRenderer * const renderer = dvCol->GetRenderer();
|
||||
|
||||
wxVariant value;
|
||||
model->GetValue(value, dvItem, colIdx);
|
||||
|
||||
if ( value.GetType() != renderer->GetVariantType() )
|
||||
{
|
||||
wxLogDebug("Wrong type returned from the model: "
|
||||
"%s required but actual type is %s",
|
||||
renderer->GetVariantType(),
|
||||
value.GetType());
|
||||
|
||||
// we can't use the value of wrong type
|
||||
return;
|
||||
}
|
||||
|
||||
wxDataViewRendererNativeData * const data = renderer->GetNativeData();
|
||||
|
||||
// let the renderer know about what it's going to render next
|
||||
@@ -2792,18 +2807,10 @@ wxDataViewTextRenderer::wxDataViewTextRenderer(const wxString& varianttype,
|
||||
}
|
||||
|
||||
bool wxDataViewTextRenderer::MacRender()
|
||||
{
|
||||
if (GetValue().GetType() == GetVariantType())
|
||||
{
|
||||
[GetNativeData()->GetItemCell() setObjectValue:wxCFStringRef(GetValue().GetString()).AsNSString()];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFAIL_MSG(wxString("Text renderer cannot render value because of wrong value type; value type: ") << GetValue().GetType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
wxDataViewTextRenderer::OSXOnCellChanged(NSObject *value,
|
||||
@@ -2844,8 +2851,6 @@ wxDataViewBitmapRenderer::wxDataViewBitmapRenderer(const wxString& varianttype,
|
||||
// In all other cases the method returns 'false'.
|
||||
bool wxDataViewBitmapRenderer::MacRender()
|
||||
{
|
||||
wxCHECK_MSG(GetValue().GetType() == GetVariantType(),false,wxString("Bitmap renderer cannot render value; value type: ") << GetValue().GetType());
|
||||
|
||||
wxBitmap bitmap;
|
||||
|
||||
bitmap << GetValue();
|
||||
@@ -2904,18 +2909,10 @@ wxDataViewChoiceRenderer::OSXOnCellChanged(NSObject *value,
|
||||
}
|
||||
|
||||
bool wxDataViewChoiceRenderer::MacRender()
|
||||
{
|
||||
if (GetValue().GetType() == GetVariantType())
|
||||
{
|
||||
[((NSPopUpButtonCell*) GetNativeData()->GetItemCell()) selectItemWithTitle:[[wxCFStringRef(GetValue().GetString()).AsNSString() retain] autorelease]];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFAIL_MSG(wxString("Choice renderer cannot render value because of wrong value type; value type: ") << GetValue().GetType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
IMPLEMENT_CLASS(wxDataViewChoiceRenderer,wxDataViewRenderer)
|
||||
|
||||
@@ -2945,10 +2942,9 @@ wxDataViewDateRenderer::wxDataViewDateRenderer(const wxString& varianttype,
|
||||
|
||||
bool wxDataViewDateRenderer::MacRender()
|
||||
{
|
||||
if (GetValue().GetType() == GetVariantType())
|
||||
{
|
||||
if (GetValue().GetDateTime().IsValid())
|
||||
{
|
||||
if (!GetValue().GetDateTime().IsValid())
|
||||
return true;
|
||||
|
||||
// -- find best fitting style to show the date --
|
||||
// as the style should be identical for all cells a reference date
|
||||
// instead of the actual cell's date value is used for all cells;
|
||||
@@ -2992,15 +2988,9 @@ bool wxDataViewDateRenderer::MacRender()
|
||||
// a conversion from the local to UTC timezone when adding the
|
||||
// seconds to 1970-01-01 UTC:
|
||||
[GetNativeData()->GetItemCell() setObjectValue:[NSDate dateWithTimeIntervalSince1970:GetValue().GetDateTime().ToUTC().Subtract(wxDateTime(1,wxDateTime::Jan,1970)).GetSeconds().ToDouble()]];
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFAIL_MSG(wxString("Date renderer cannot render value because of wrong value type; value type: ") << GetValue().GetType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
wxDataViewDateRenderer::OSXOnCellChanged(NSObject *value,
|
||||
@@ -3035,8 +3025,6 @@ wxDataViewIconTextRenderer::wxDataViewIconTextRenderer(const wxString& variantty
|
||||
}
|
||||
|
||||
bool wxDataViewIconTextRenderer::MacRender()
|
||||
{
|
||||
if (GetValue().GetType() == GetVariantType())
|
||||
{
|
||||
wxDataViewIconText iconText;
|
||||
|
||||
@@ -3051,12 +3039,6 @@ bool wxDataViewIconTextRenderer::MacRender()
|
||||
[cell setStringValue:[[wxCFStringRef(iconText.GetText()).AsNSString() retain] autorelease]];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFAIL_MSG(wxString("Icon & text renderer cannot render value because of wrong value type; value type: ") << GetValue().GetType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
wxDataViewIconTextRenderer::OSXOnCellChanged(NSObject *value,
|
||||
@@ -3095,18 +3077,10 @@ wxDataViewToggleRenderer::wxDataViewToggleRenderer(const wxString& varianttype,
|
||||
}
|
||||
|
||||
bool wxDataViewToggleRenderer::MacRender()
|
||||
{
|
||||
if (GetValue().GetType() == GetVariantType())
|
||||
{
|
||||
[GetNativeData()->GetItemCell() setIntValue:GetValue().GetLong()];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFAIL_MSG(wxString("Toggle renderer cannot render value because of wrong value type; value type: ") << GetValue().GetType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
wxDataViewToggleRenderer::OSXOnCellChanged(NSObject *value,
|
||||
@@ -3144,18 +3118,10 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer(const wxString& label,
|
||||
}
|
||||
|
||||
bool wxDataViewProgressRenderer::MacRender()
|
||||
{
|
||||
if (GetValue().GetType() == GetVariantType())
|
||||
{
|
||||
[GetNativeData()->GetItemCell() setIntValue:GetValue().GetLong()];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFAIL_MSG(wxString("Progress renderer cannot render value because of wrong value type; value type: ") << GetValue().GetType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
wxDataViewProgressRenderer::OSXOnCellChanged(NSObject *value,
|
||||
|
Reference in New Issue
Block a user