void ChangeCurrentRow( unsigned int row );
bool TryAdvanceCurrentColumn(wxDataViewTreeNode *node, bool forward);
+ wxDataViewColumn *GetCurrentColumn() const { return m_currentCol; }
+ void ClearCurrentColumn() { m_currentCol = NULL; }
+
bool IsSingleSel() const { return !GetParent()->HasFlag(wxDV_MULTIPLE); }
bool IsEmpty() { return GetRowCount() == 0; }
switch ( event.GetKeyCode() )
{
case WXK_RETURN:
+ if ( !event.HasModifiers() )
{
// Enter activates the item, i.e. sends wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED to
// it. Only if that event is not handled do we activate column renderer (which
}
case WXK_SPACE:
+ if ( !event.HasModifiers() )
{
// Space toggles activatable items or -- if not activatable --
// starts inline editing (this is normally done using F2 on
}
case WXK_F2:
+ if ( !event.HasModifiers() )
{
if( !m_selection.empty() )
{
wxDataViewColumn *editableCol = FindColumnForEditing(item, wxDATAVIEW_CELL_EDITABLE);
if ( editableCol )
- GetOwner()->StartEditor(item, GetOwner()->GetColumnIndex(editableCol));
+ GetOwner()->EditItem(item, editableCol);
}
}
break;
m_clientArea->GetRowHeight());
if ( m_headerArea )
- {
- int header_width = m_headerArea->GetTextExtent(column->GetTitle()).x;
- // Labels on native MSW header are indented on both sides
- header_width +=
- wxRendererNative::Get().GetHeaderButtonMargin(m_headerArea);
- calculator.UpdateWithWidth(header_width);
- }
+ calculator.UpdateWithWidth(m_headerArea->GetColumnTitleWidth(*column));
// The code below deserves some explanation. For very large controls, we
// simply can't afford to calculate sizes for all items, it takes too
m_colsBestWidths.erase(m_colsBestWidths.begin() + GetColumnIndex(column));
m_cols.Erase(ret);
+
+ if ( m_clientArea->GetCurrentColumn() == column )
+ m_clientArea->ClearCurrentColumn();
+
OnColumnsCountChanged();
return true;
SetExpanderColumn(NULL);
m_cols.Clear();
m_colsBestWidths.clear();
+
+ m_clientArea->ClearCurrentColumn();
+
OnColumnsCountChanged();
+
return true;
}
int wxDataViewCtrl::GetColumnPosition( const wxDataViewColumn *column ) const
{
-#if 1
unsigned int len = GetColumnCount();
for ( unsigned int i = 0; i < len; i++ )
{
}
return wxNOT_FOUND;
-#else
- // This returns the position in pixels which is not what we want.
- int ret = 0,
- dummy = 0;
- unsigned int len = GetColumnCount();
- for ( unsigned int i = 0; i < len; i++ )
- {
- wxDataViewColumn * col = GetColumnAt(i);
- if (col->IsHidden())
- continue;
- ret += col->GetWidth();
- if (column==col)
- {
- CalcScrolledPosition( ret, dummy, &ret, &dummy );
- break;
- }
- }
- return ret;
-#endif
}
wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const
}
}
+wxDataViewColumn *wxDataViewCtrl::GetCurrentColumn() const
+{
+ return m_clientArea->GetCurrentColumn();
+}
+
int wxDataViewCtrl::GetSelectedItemsCount() const
{
return m_clientArea->GetSelections().size();
return false;
}
-void wxDataViewCtrl::StartEditor( const wxDataViewItem & item, unsigned int column )
+void wxDataViewCtrl::EditItem(const wxDataViewItem& item, const wxDataViewColumn *column)
{
- wxDataViewColumn* col = GetColumn( column );
- if (!col)
- return;
+ wxCHECK_RET( item.IsOk(), "invalid item" );
+ wxCHECK_RET( column, "no column provided" );
- m_clientArea->StartEditing(item, col);
+ m_clientArea->StartEditing(item, column);
}
#endif // !wxUSE_GENERICDATAVIEWCTRL