unsigned int i;
for (i = 1; i < initial_size+1; i++)
m_hash.Add( wxUIntToPtr(i) );
- m_lastIndex = initial_size + 1;
+ m_nextFreeID = initial_size + 1;
}
wxDataViewIndexListModel::~wxDataViewIndexListModel()
unsigned int i;
for (i = 1; i < new_size+1; i++)
m_hash.Add( wxUIntToPtr(i) );
- m_lastIndex = new_size + 1;
+
+ m_nextFreeID = new_size + 1;
wxDataViewModel::Cleared();
}
{
m_ordered = false;
- unsigned int id = m_lastIndex++;
+ unsigned int id = m_nextFreeID;
+ m_nextFreeID++;
+
m_hash.Insert( wxUIntToPtr(id), 0 );
wxDataViewItem item( wxUIntToPtr(id) );
ItemAdded( wxDataViewItem(0), item );
+
}
void wxDataViewIndexListModel::RowInserted( unsigned int before )
{
m_ordered = false;
- unsigned int id = m_lastIndex++;
+ unsigned int id = m_nextFreeID;
+ m_nextFreeID++;
+
m_hash.Insert( wxUIntToPtr(id), before );
wxDataViewItem item( wxUIntToPtr(id) );
ItemAdded( wxDataViewItem(0), item );
void wxDataViewIndexListModel::RowAppended()
{
- unsigned int id = m_lastIndex++;
+ unsigned int id = m_nextFreeID;
+ m_nextFreeID++;
+
m_hash.Add( wxUIntToPtr(id) );
wxDataViewItem item( wxUIntToPtr(id) );
ItemAdded( wxDataViewItem(0), item );
unsigned int wxDataViewIndexListModel::GetRow( const wxDataViewItem &item ) const
{
if (m_ordered)
- {
- unsigned int pos = wxPtrToUInt( item.GetID() );
- return pos-1;
- }
+ return wxPtrToUInt(item.GetID())-1;
// assert for not found
return (unsigned int) m_hash.Index( item.GetID() );
{
if (m_ordered)
{
- unsigned int pos1 = wxPtrToUInt(item1.GetID());
- unsigned int pos2 = wxPtrToUInt(item2.GetID());
+ unsigned int pos1 = wxPtrToUInt(item1.GetID()); // -1 not needed here
+ unsigned int pos2 = wxPtrToUInt(item2.GetID()); // -1 not needed here
if (ascending)
return pos1 - pos2;
wxDataViewVirtualListModel::wxDataViewVirtualListModel( unsigned int initial_size )
{
- m_lastIndex = initial_size-1;
+ m_size = initial_size;
}
wxDataViewVirtualListModel::~wxDataViewVirtualListModel()
void wxDataViewVirtualListModel::Reset( unsigned int new_size )
{
- m_lastIndex = new_size-1;
+ m_size = new_size;
wxDataViewModel::Cleared();
}
void wxDataViewVirtualListModel::RowPrepended()
{
- m_lastIndex++;
- wxDataViewItem item( NULL );
+ m_size++;
+ wxDataViewItem item( wxUIntToPtr(1) );
ItemAdded( wxDataViewItem(0), item );
}
void wxDataViewVirtualListModel::RowInserted( unsigned int before )
{
- m_lastIndex++;
- wxDataViewItem item( wxUIntToPtr(before) );
+ m_size++;
+ wxDataViewItem item( wxUIntToPtr(before+1) );
ItemAdded( wxDataViewItem(0), item );
}
void wxDataViewVirtualListModel::RowAppended()
{
- m_lastIndex++;
- wxDataViewItem item( wxUIntToPtr(m_lastIndex) );
+ m_size++;
+ wxDataViewItem item( wxUIntToPtr(m_size) );
ItemAdded( wxDataViewItem(0), item );
}
void wxDataViewVirtualListModel::RowDeleted( unsigned int row )
{
- wxDataViewItem item( wxUIntToPtr(row) );
+ wxDataViewItem item( wxUIntToPtr(row+1) );
wxDataViewModel::ItemDeleted( wxDataViewItem(0), item );
- m_lastIndex++;
+ m_size--;
}
void wxDataViewVirtualListModel::RowsDeleted( const wxArrayInt &rows )
unsigned int i;
for (i = 0; i < sorted.GetCount(); i++)
{
- wxDataViewItem item( wxUIntToPtr(sorted[i]) );
+ wxDataViewItem item( wxUIntToPtr(sorted[i]+1) );
array.Add( item );
}
wxDataViewModel::ItemsDeleted( wxDataViewItem(0), array );
- m_lastIndex -= rows.GetCount();
+ m_size -= rows.GetCount();
}
void wxDataViewVirtualListModel::RowChanged( unsigned int row )
unsigned int wxDataViewVirtualListModel::GetRow( const wxDataViewItem &item ) const
{
- return wxPtrToUInt( item.GetID() );
+ return wxPtrToUInt( item.GetID() ) -1;
}
wxDataViewItem wxDataViewVirtualListModel::GetItem( unsigned int row ) const
{
- return wxDataViewItem( wxUIntToPtr(row) );
+ return wxDataViewItem( wxUIntToPtr(row+1) );
}
bool wxDataViewVirtualListModel::HasDefaultCompare() const
unsigned int WXUNUSED(column),
bool ascending) const
{
- unsigned int pos1 = wxPtrToUInt(item1.GetID());
- unsigned int pos2 = wxPtrToUInt(item2.GetID());
+ unsigned int pos1 = wxPtrToUInt(item1.GetID()); // -1 not needed here
+ unsigned int pos2 = wxPtrToUInt(item2.GetID()); // -1 not needed here
if (ascending)
return pos1 - pos2;
bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect labelRect )
{
+ wxDataViewCtrl* dv_ctrl = GetOwner()->GetOwner();
+
+ // Before doing anything we send an event asking if editing of this item is really wanted.
+ wxDataViewEvent start_event( wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING, dv_ctrl->GetId() );
+ start_event.SetDataViewColumn( GetOwner() );
+ start_event.SetModel( dv_ctrl->GetModel() );
+ start_event.SetItem( item );
+ start_event.SetEventObject( dv_ctrl );
+ dv_ctrl->GetEventHandler()->ProcessEvent( start_event );
+ if( !start_event.IsAllowed() )
+ return false;
+
m_item = item; // remember for later
unsigned int col = GetOwner()->GetModelColumn();
wxVariant value;
- GetOwner()->GetOwner()->GetModel()->GetValue( value, item, col );
+ dv_ctrl->GetModel()->GetValue( value, item, col );
+
+ m_editorCtrl = CreateEditorCtrl( dv_ctrl->GetMainWindow(), labelRect, value );
+
+ // there might be no editor control for the given item
+ if(!m_editorCtrl)
+ return false;
- m_editorCtrl = CreateEditorCtrl( GetOwner()->GetOwner()->GetMainWindow(), labelRect, value );
(void) new wxKillRef( m_editorCtrl.get() );
wxDataViewEditorCtrlEvtHandler *handler =
m_editorCtrl->PushEventHandler( handler );
- // there might be no editor control for the given item
- if (!m_editorCtrl)
- return false;
-
#if defined(__WXGTK20__) && !defined(wxUSE_GENERICDATAVIEWCTRL)
handler->SetFocusOnIdle();
#else
#endif
// Now we should send Editing Started event
- wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, GetOwner()->GetOwner()->GetId() );
+ wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, dv_ctrl->GetId() );
event.SetDataViewColumn( GetOwner() );
- event.SetModel( GetOwner()->GetOwner()->GetModel() );
+ event.SetModel( dv_ctrl->GetModel() );
event.SetItem( item );
- GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event );
+ event.SetEventObject( dv_ctrl );
+ dv_ctrl->GetEventHandler()->ProcessEvent( event );
return true;
}
void wxDataViewRendererBase::CancelEditing()
{
- if (!m_editorCtrl) return;
+ if (!m_editorCtrl)
+ return;
GetOwner()->GetOwner()->GetMainWindow()->SetFocus();
bool wxDataViewRendererBase::FinishEditing()
{
- if (!m_editorCtrl) return true;
+ if (!m_editorCtrl)
+ return true;
wxVariant value;
GetValueFromEditorCtrl( m_editorCtrl, value );
- GetOwner()->GetOwner()->GetMainWindow()->SetFocus();
+ wxDataViewCtrl* dv_ctrl = GetOwner()->GetOwner();
+
+ dv_ctrl->GetMainWindow()->SetFocus();
m_editorCtrl->Hide();
wxPendingDelete.Append( m_editorCtrl );
return false;
unsigned int col = GetOwner()->GetModelColumn();
- GetOwner()->GetOwner()->GetModel()->SetValue( value, m_item, col );
- GetOwner()->GetOwner()->GetModel()->ValueChanged( m_item, col );
+ dv_ctrl->GetModel()->SetValue( value, m_item, col );
+ dv_ctrl->GetModel()->ValueChanged( m_item, col );
// Now we should send Editing Done event
- wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, GetOwner()->GetOwner()->GetId() );
+ wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl->GetId() );
event.SetDataViewColumn( GetOwner() );
- event.SetModel( GetOwner()->GetOwner()->GetModel() );
+ event.SetModel( dv_ctrl->GetModel() );
event.SetItem( m_item );
- GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event );
+ event.SetEventObject( dv_ctrl );
+ dv_ctrl->GetEventHandler()->ProcessEvent( event );
return true;
}
// wxDataViewChoiceRenderer
// -------------------------------------
-#if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXMAC__)
+#if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXOSX_CARBON__)
wxDataViewChoiceRenderer::wxDataViewChoiceRenderer( const wxArrayString& choices, wxDataViewCellMode mode, int alignment ) :
wxDataViewCustomRenderer(wxT("string"), mode, alignment )