From 5778dedc92f6d31435aa1cda6846979a0e9ad35b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 11 Jul 2010 10:43:23 +0000 Subject: [PATCH] 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 --- docs/changes.txt | 1 + src/common/rearrangectrl.cpp | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index fa37a190b9..db6210764c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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: diff --git a/src/common/rearrangectrl.cpp b/src/common/rearrangectrl.cpp index a77167f47b..5f6bc2bf06 100644 --- a/src/common/rearrangectrl.cpp +++ b/src/common/rearrangectrl.cpp @@ -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) -- 2.47.2