From 9640f0027f0ee52f720c7de25196017069da30ae Mon Sep 17 00:00:00 2001 From: Jorge Moraleda Date: Wed, 16 Dec 2020 17:08:35 -0800 Subject: [PATCH] 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 --- src/generic/datavgen.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 2e47cfbae8..d6ff1c1bca 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -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: