wxMin( (int)( GetLineAt( wxMax(0,update.y+update.height) ) - item_start + 1),
(int)(GetRowCount( ) - item_start));
unsigned int item_last = item_start + item_count;
+ // Get the parent of DataViewCtrl
+ wxWindow *parent = GetParent()->GetParent();
+ wxDataViewEvent cache_event(wxEVT_COMMAND_DATAVIEW_CACHE_HINT, parent->GetId());
+ cache_event.SetEventObject(GetParent());
+ cache_event.SetCache(item_start, item_last - 1);
+ parent->ProcessWindowEvent(cache_event);
// compute which columns needs to be redrawn
unsigned int cols = GetOwner()->GetColumnCount();
}
else
{
- dataitem = wxDataViewItem( wxUIntToPtr(item) );
+ dataitem = wxDataViewItem( wxUIntToPtr(item+1) );
}
model->GetValue( value, dataitem, col->GetModelColumn());
bool wxDataViewMainWindow::ItemAdded(const wxDataViewItem & parent, const wxDataViewItem & item)
{
- if (!m_root)
+ if (IsVirtualList())
{
- m_count++;
+ wxDataViewVirtualListModel *list_model =
+ (wxDataViewVirtualListModel*) GetOwner()->GetModel();
+ m_count = list_model->GetCount();
UpdateDisplay();
return true;
}
static void DestroyTreeHelper( wxDataViewTreeNode * node);
bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent,
- const wxDataViewItem& item)
+ const wxDataViewItem& item)
{
- if (!m_root)
+ if (IsVirtualList())
{
- m_count--;
+ wxDataViewVirtualListModel *list_model =
+ (wxDataViewVirtualListModel*) GetOwner()->GetModel();
+ m_count = list_model->GetCount();
+
if( m_currentRow > GetRowCount() )
m_currentRow = m_count - 1;
+ // TODO: why empty the entire selection?
m_selection.Empty();
UpdateDisplay();
void wxDataViewMainWindow::OnArrowChar(unsigned int newCurrent, const wxKeyEvent& event)
{
wxCHECK_RET( newCurrent < GetRowCount(),
- _T("invalid item index in OnArrowChar()") );
+ wxT("invalid item index in OnArrowChar()") );
// if there is no selection, we cannot move it anywhere
if (!HasCurrentRow())
wxDataViewItem wxDataViewMainWindow::GetItemByRow(unsigned int row) const
{
- if (!m_root)
+ if (IsVirtualList())
{
- return wxDataViewItem( wxUIntToPtr(row) );
+ return wxDataViewItem( wxUIntToPtr(row+1) );
}
else
{
int wxDataViewMainWindow::RecalculateCount()
{
- if (!m_root)
+ if (IsVirtualList())
{
- wxDataViewIndexListModel *list_model =
- (wxDataViewIndexListModel*) GetOwner()->GetModel();
-#ifndef __WXMAC__
- return list_model->GetLastIndex() + 1;
-#else
- return list_model->GetLastIndex() - 1;
-#endif
+ wxDataViewVirtualListModel *list_model =
+ (wxDataViewVirtualListModel*) GetOwner()->GetModel();
+
+ return list_model->GetCount();
}
else
{
if( model == NULL )
return -1;
- if (!m_root)
+ if (IsVirtualList())
{
- return wxPtrToUInt( item.GetID() );
+ return wxPtrToUInt( item.GetID() ) -1;
}
else
{
// don't use m_linesPerPage directly as it might not be computed yet
const int pageSize = GetCountPerPage();
- wxCHECK_RET( pageSize, _T("should have non zero page size") );
+ wxCHECK_RET( pageSize, wxT("should have non zero page size") );
switch ( event.GetKeyCode() )
{
else // !ctrl, !shift
{
// test in the enclosing if should make it impossible
- wxFAIL_MSG( _T("how did we get here?") );
+ wxFAIL_MSG( wxT("how did we get here?") );
}
}