/////////////////////////////////////////////////////////////////////////////
-// Name: src/msw/bmpcboxg.cpp
+// Name: src/msw/bmpcbox.cpp
// Purpose: wxBitmapComboBox
// Author: Jaakko Salli
// Created: 2008-04-06
#endif
#include "wx/settings.h"
+#include "wx/vector.h"
#include "wx/msw/dcclient.h"
#include "wx/msw/private.h"
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));
+
wxComboBox::DoClear();
HWND hwnd = GetHwnd();
DissociateHandle();
::DestroyWindow(hwnd);
- if ( !MSWCreateControl(wxT("COMBOBOX"), value, pos, size) )
+ if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) )
return;
// initialize the controls contents
for ( unsigned int i = 0; i < strings.size(); i++ )
{
- wxComboBox::Append(strings[i]);
+ wxComboBox::Append(strings[i], clientData[i]);
}
// and make sure it has the same attributes as before
}
::SendMessage(GetHwnd(), CB_SETITEMHEIGHT, 0, MeasureItem(0));
+
+ // Revert the old string value
+ if ( !HasFlag(wxCB_READONLY) )
+ ChangeValue(value);
}
wxBitmapComboBox::~wxBitmapComboBox()
return n;
}
+int wxBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap,
+ unsigned int pos, void *clientData)
+{
+ OnAddBitmap(bitmap);
+ const int n = wxComboBox::Insert(item, pos, clientData);
+ if ( n != wxNOT_FOUND )
+ DoSetItemBitmap(n, bitmap);
+ return n;
+}
+
int wxBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap,
unsigned int pos, wxClientData *clientData)
{