model->Resort();
owner->OnColumnChange(idx);
+
+ SendEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, idx);
}
void OnRClick(wxHeaderCtrlEvent& event)
dataitem = node->GetItem();
- if ((i > 0) && model->IsContainer(dataitem) &&
- !model->HasContainerColumns(dataitem))
+ // Skip all columns of "container" rows except the expander
+ // column itself unless HasContainerColumns() overrides this.
+ if ( col != GetOwner()->GetExpanderColumn() &&
+ model->IsContainer(dataitem) &&
+ !model->HasContainerColumns(dataitem) )
continue;
}
else
// Find the item along the parent-chain.
// This algorithm is designed to speed up the node-finding method
wxDataViewTreeNode* node = m_root;
- for( unsigned iter = parentChain.size()-1; iter>=0; --iter )
+ for( unsigned iter = parentChain.size()-1; ; --iter )
{
if( node->HasChildren() )
{
}
else
return NULL;
+
+ if ( !iter )
+ break;
}
return NULL;
}
break;
case WXK_DOWN:
- if ( m_currentRow < GetRowCount() - 1 )
+ if ( m_currentRow + 1 < GetRowCount() )
OnArrowChar( m_currentRow + 1, event );
break;
// Add the process for tree expanding/collapsing
if (!IsRowSelected(current))
{
SelectAllRows(false);
+ const unsigned oldCurrent = m_currentRow;
ChangeCurrentRow(current);
SelectRow(m_currentRow,true);
+ RefreshRow(oldCurrent);
SendSelectionChangedEvent(GetItemByRow( m_currentRow ) );
}
}
Layout();
AdjustScrollbars();
+
+ // We must redraw the headers if their height changed. Normally this
+ // shouldn't happen as the control shouldn't let itself be resized beneath
+ // its minimal height but avoid the display artefacts that appear if it
+ // does happen, e.g. because there is really not enough vertical space.
+ if ( !HasFlag(wxDV_NO_HEADER) && m_headerArea &&
+ m_headerArea->GetSize().y <= m_headerArea->GetBestSize(). y )
+ {
+ m_headerArea->Refresh();
+ }
}
void wxDataViewCtrl::SetFocus()