wxPoint pos = GetPosition();
wxSize size = GetSize();
size.y = GetBestSize().y;
- wxArrayString strings = GetStrings();
-
- // Save the client data pointers before clearing the control.
- wxVector<wxClientData*> clientData;
- clientData.reserve(strings.size());
- for ( size_t n = 0; n < strings.size(); ++n )
- clientData.push_back(GetClientObject(n));
+ const wxArrayString strings = GetStrings();
+ const unsigned numItems = strings.size();
+
+ // Save the client data pointers before clearing the control, if any.
+ const wxClientDataType clientDataType = GetClientDataType();
+ wxVector<wxClientData*> objectClientData;
+ wxVector<void*> voidClientData;
+ switch ( clientDataType )
+ {
+ case wxClientData_None:
+ break;
+
+ case wxClientData_Object:
+ objectClientData.reserve(numItems);
+ for ( unsigned n = 0; n < numItems; ++n )
+ objectClientData.push_back(GetClientObject(n));
+ break;
+
+ case wxClientData_Void:
+ voidClientData.reserve(numItems);
+ for ( unsigned n = 0; n < numItems; ++n )
+ voidClientData.push_back(GetClientData(n));
+ break;
+ }
wxComboBox::DoClear();
return;
// initialize the controls contents
- for ( unsigned int i = 0; i < strings.size(); i++ )
+ for ( unsigned int i = 0; i < numItems; i++ )
{
- wxComboBox::Append(strings[i], clientData[i]);
+ wxComboBox::Append(strings[i]);
+
+ if ( !objectClientData.empty() )
+ SetClientObject(i, objectClientData[i]);
+ else if ( !voidClientData.empty() )
+ SetClientData(i, objectClientData[i]);
}
// and make sure it has the same attributes as before