X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f696015cf1e474315b63823d697a5fa0462055b7..1632883f9ae83cb0f75b82432ab1f8ca7cfae451:/src/msw/bmpcbox.cpp diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp index 03383eeb6c..8e6496094a 100644 --- a/src/msw/bmpcbox.cpp +++ b/src/msw/bmpcbox.cpp @@ -3,7 +3,7 @@ // Purpose: wxBitmapComboBox // Author: Jaakko Salli // Created: 2008-04-06 -// RCS-ID: $Id:$ +// RCS-ID: $Id$ // Copyright: (c) 2008 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -183,6 +183,20 @@ wxBitmapComboBox::~wxBitmapComboBox() Clear(); } +wxSize wxBitmapComboBox::DoGetBestSize() const +{ + wxSize best = wxComboBox::DoGetBestSize(); + wxSize bitmapSize = GetBitmapSize(); + + wxCoord useHeightBitmap = EDIT_HEIGHT_FROM_CHAR_HEIGHT(bitmapSize.y); + if ( best.y < useHeightBitmap ) + { + best.y = useHeightBitmap; + CacheBestSize(best); + } + return best; +} + // ---------------------------------------------------------------------------- // Item manipulation // ---------------------------------------------------------------------------- @@ -253,6 +267,8 @@ int wxBitmapComboBox::DoInsertItems(const wxArrayStringsAdapter & items, const unsigned int numItems = items.GetCount(); const unsigned int countNew = GetCount() + numItems; + wxASSERT( numItems == 1 || !HasFlag(wxCB_SORT) ); // Sanity check + m_bitmaps.Alloc(countNew); for ( unsigned int i = 0; i < numItems; i++ ) @@ -268,6 +284,14 @@ int wxBitmapComboBox::DoInsertItems(const wxArrayStringsAdapter & items, for ( int i = numItems-1; i >= 0; i-- ) BCBDoDeleteOneItem(pos + i); } + else if ( ((unsigned int)index) != pos ) + { + // Move pre-inserted empty bitmap into correct position + // (usually happens when combo box has wxCB_SORT style) + wxBitmap* bmp = static_cast(m_bitmaps[pos]); + m_bitmaps.RemoveAt(pos); + m_bitmaps.Insert(bmp, index); + } return index; } @@ -284,7 +308,7 @@ bool wxBitmapComboBox::OnAddBitmap(const wxBitmap& bitmap) return true; } - + return false; } @@ -341,7 +365,7 @@ bool wxBitmapComboBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) if ( pos == -1 ) return FALSE; - int flags = 0; + int flags = 0; if ( lpDrawItem->itemState & ODS_COMBOBOXEDIT ) flags |= wxODCB_PAINTING_CONTROL; if ( lpDrawItem->itemState & ODS_SELECTED )