]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bmpcbox.cpp
leave i386 compiler to default
[wxWidgets.git] / src / msw / bmpcbox.cpp
index ea7c92576212856b755726712ed204b603eafcab..f6d5950a02312914ba4ca4edbdd638863287b0e6 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     wxBitmapComboBox
 // Author:      Jaakko Salli
 // Created:     2008-04-06
-// RCS-ID:      $Id$
 // Copyright:   (c) 2008 Jaakko Salli
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -133,13 +132,31 @@ void wxBitmapComboBox::RecreateControl()
     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();
+    unsigned i;
+
+    // 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 ( i = 0; i < numItems; ++i )
+                objectClientData.push_back(GetClientObject(i));
+            break;
+
+        case wxClientData_Void:
+            voidClientData.reserve(numItems);
+            for ( i = 0; i < numItems; ++i )
+                voidClientData.push_back(GetClientData(i));
+            break;
+    }
 
     wxComboBox::DoClear();
 
@@ -151,9 +168,14 @@ void wxBitmapComboBox::RecreateControl()
         return;
 
     // initialize the controls contents
-    for ( unsigned int i = 0; i < strings.size(); i++ )
+    for ( 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, voidClientData[i]);
     }
 
     // and make sure it has the same attributes as before