X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03647350fc7cd141953c72e0284e928847d30f44..43c42c18d36c703a88b1b7b697bac27fe5608eca:/src/msw/bmpcbox.cpp?ds=sidebyside diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp index 8e6496094a..e81db2d2dd 100644 --- a/src/msw/bmpcbox.cpp +++ b/src/msw/bmpcbox.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/msw/bmpcboxg.cpp +// Name: src/msw/bmpcbox.cpp // Purpose: wxBitmapComboBox // Author: Jaakko Salli // Created: 2008-04-06 @@ -31,6 +31,7 @@ #endif #include "wx/settings.h" +#include "wx/vector.h" #include "wx/msw/dcclient.h" #include "wx/msw/private.h" @@ -131,7 +132,32 @@ void wxBitmapComboBox::RecreateControl() wxString value = GetValue(); wxPoint pos = GetPosition(); wxSize size = GetSize(); - wxArrayString strings = GetStrings(); + size.y = GetBestSize().y; + 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 objectClientData; + wxVector 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(); @@ -139,13 +165,18 @@ void wxBitmapComboBox::RecreateControl() 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++ ) + for ( i = 0; i < numItems; 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 @@ -176,6 +207,12 @@ void wxBitmapComboBox::RecreateControl() { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); } + + ::SendMessage(GetHwnd(), CB_SETITEMHEIGHT, 0, MeasureItem(0)); + + // Revert the old string value + if ( !HasFlag(wxCB_READONLY) ) + ChangeValue(value); } wxBitmapComboBox::~wxBitmapComboBox() @@ -250,6 +287,16 @@ int wxBitmapComboBox::Insert(const wxString& item, 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) {