Ticket #14892 (closed defect: fixed)
wxBitmapComboBox::SetItemBitmap clear client object pointer.
| Reported by: | Feneck91 | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | wxMSW | Version: | 2.9.4 |
| Keywords: | wxBitmapComboBox SetItemBitmap GetClientObject regression | Cc: | |
| Blocked By: | Patch: | yes | |
| Blocking: |
Description
When creating a wxBitmapComboBox control under Windows, calling SetItemBitmap clear the client object on item.
To make it, create a wxBitmapComboBox, add a new item without bitmap that contains a client object. Then set the bitmap : the client object is now set to null.
It's works well on wxWidgets 2.8.12, fails on wxWidgets 2.9.4
wxBitmapComboBox *pCombo = new wxBitmapComboBox(this, idChoiceCtrlListTeam1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY, wxDefaultValidator, _T("idChoiceCtrlListTeam1"));
pCombo->Insert(wxT("my text"),wxNullBitmap,0,new wxClientData());
wxBitmap myImage(wxImage(_T("myImage.png"));
pCombo->SetItemBitmap(0,myImage);
wxASSERT_MSG(pCombo->GetClientObject(0) != NULL,wxT("Client data is NULL !"));
!! THIS FAILED !!
To set the item text and bitmap, I must use the code:
void SetItem(wxString strText,int iIndex,wxBitmap bitmap)
{
#if wxCHECK_VERSION(2,9,0)
// Calling SetItemBitmap remove wxClientData item, change way of how the item is inserted
bool bSelected = this->IsSelected(iIndex);
wxClientData *pClient = m_pCombo->DetachClientObject (iIndex);
pCombo->Delete(iIndex);
pCombo->Insert(strText,bitmap,iIndex,pClient);
if (bSelected)
{
pCombo->SetSelection(iIndex);
}
wxASSERT_MSG(pCombo->GetClientObject(_iIndex) != NULL,wxT("Client data is NULL !"));
#else
pCombo->SetString(iIndex,strText);
m_pCombo->SetItemBitmap(iIndex,bitmap);
#endif // wxCHECK_VERSION
}

