Fix assert when computing best column width in generic wxDVC

Do not invoke a renderer's PrepareForItem when estimating best column
width in generic wxDVC for items with no value because PrepareForItem
fails for items with no value when the null variant cannot be converted
to the expected type.

Closes https://github.com/wxWidgets/wxWidgets/pull/2149
This commit is contained in:
Jorge Moraleda
2020-12-16 17:08:35 -08:00
committed by Vadim Zeitlin
parent f5bc0a9b31
commit 9640f0027f

View File

@@ -5937,22 +5937,27 @@ public:
virtual void UpdateWithRow(int row) wxOVERRIDE
{
int indent = 0;
int width = 0;
wxDataViewItem item;
if ( m_isExpanderCol )
{
wxDataViewTreeNode *node = m_clientArea->GetTreeNodeByRow(row);
item = node->GetItem();
indent = m_dvc->GetIndent() * node->GetIndentLevel() + m_expanderSize;
width = m_dvc->GetIndent() * node->GetIndentLevel() + m_expanderSize;
}
else
{
item = m_clientArea->GetItemByRow(row);
}
m_renderer->PrepareForItem(m_model, item, GetColumn());
UpdateWithWidth(m_renderer->GetSize().x + indent);
if ( m_model->HasValue(item, GetColumn()) )
{
m_renderer->PrepareForItem(m_model, item, GetColumn());
width += m_renderer->GetSize().x;
}
UpdateWithWidth(width);
}
private: