Swap client data pointers in wxRearrangeList too.

If the list box uses client data, we need to swap the data pointers too when
exchanging items in it.

Closes #12201.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64875 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-07-11 10:43:23 +00:00
parent ecc4f568a9
commit 5778dedc92
2 changed files with 32 additions and 2 deletions

View File

@@ -530,6 +530,7 @@ All (GUI):
- Added "filter changed" event to wxFileCtrl (Bill Jones).
- wxAUI: update floating window position and not only size on resize (MacGyver).
- Added wxComboCtrl::SetTextCtrlStyle().
- Also update client data in wxRearrangeList control (John Roberts).
GTK:

View File

@@ -125,16 +125,45 @@ bool wxRearrangeList::MoveCurrentDown()
void wxRearrangeList::Swap(int pos1, int pos2)
{
// update the internally stored order
wxSwap(m_order[pos1], m_order[pos2]);
const wxString stringTmp = GetString(pos1);
const bool checkedTmp = IsChecked(pos1);
// and now also swap all the attributes of the items
// first the label
const wxString stringTmp = GetString(pos1);
SetString(pos1, GetString(pos2));
Check(pos1, IsChecked(pos2));
// then the checked state
const bool checkedTmp = IsChecked(pos1);
SetString(pos2, stringTmp);
Check(pos2, checkedTmp);
// and finally the client data, if necessary
switch ( GetClientDataType() )
{
case wxClientData_None:
// nothing to do
break;
case wxClientData_Object:
{
wxClientData * const dataTmp = GetClientObject(pos1);
SetClientObject(pos1, GetClientObject(pos2));
SetClientObject(pos2, dataTmp);
}
break;
case wxClientData_Void:
{
void * const dataTmp = GetClientData(pos1);
SetClientData(pos1, GetClientData(pos2));
SetClientData(pos2, dataTmp);
}
break;
}
}
void wxRearrangeList::OnCheck(wxCommandEvent& event)