X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7561aacd5e3bcd5f98f4cdadcec5e94d1550b369..300b5dfabc6f7f0d9fc3f7865374b43e79c8f465:/src/msw/listbox.cpp diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index 147e73c917..24954256fd 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: listbox.cpp +// Name: src/msw/listbox.cpp // Purpose: wxListBox // Author: Julian Smart // Modified by: Vadim Zeitlin (owner drawn stuff) @@ -20,8 +20,7 @@ #pragma hdrstop #endif -#include "wx/window.h" -#include "wx/msw/private.h" +#if wxUSE_LISTBOX #ifndef WX_PRECOMP #include "wx/listbox.h" @@ -32,6 +31,9 @@ #include "wx/utils.h" #endif +#include "wx/window.h" +#include "wx/msw/private.h" + #include #ifdef __WXWINE__ @@ -143,8 +145,7 @@ bool wxListBox::Create(wxWindow *parent, if (parent) parent->AddChild(this); - wxSystemSettings settings; - SetBackgroundColour(settings.GetSystemColour(wxSYS_COLOUR_WINDOW)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); SetForegroundColour(parent->GetForegroundColour()); m_windowId = ( id == -1 ) ? (int)NewControlId() : id; @@ -237,7 +238,7 @@ wxListBox::~wxListBox() void wxListBox::SetupColours() { - SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); SetForegroundColour(GetParent()->GetForegroundColour()); } @@ -454,11 +455,6 @@ void wxListBox::DoSetItemClientData(int n, void *clientData) wxLogDebug(wxT("LB_SETITEMDATA failed")); } -bool wxListBox::HasMultipleSelection() const -{ - return (m_windowStyle & wxLB_MULTIPLE) || (m_windowStyle & wxLB_EXTENDED); -} - // Return number of selections and an array of selected integers int wxListBox::GetSelections(wxArrayInt& aSelections) const { @@ -541,9 +537,9 @@ void wxListBox::SetString(int N, const wxString& s) void *oldData = NULL; wxClientData *oldObjData = NULL; - if ( m_clientDataItemsType == ClientData_Void ) + if ( m_clientDataItemsType == wxClientData_Void ) oldData = GetClientData(N); - else if ( m_clientDataItemsType == ClientData_Object ) + else if ( m_clientDataItemsType == wxClientData_Object ) oldObjData = GetClientObject(N); // delete and recreate it @@ -567,8 +563,12 @@ void wxListBox::SetString(int N, const wxString& s) #if wxUSE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) + { // update item's text m_aItems[N]->SetName(s); + // reassign the item's data + ListBox_SetItemData(GetHwnd(), N, m_aItems[N]); + } #endif //USE_OWNER_DRAWN } @@ -663,7 +663,10 @@ wxSize wxListBox::DoGetBestSize() const wListbox += 3*cx; - int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)*(wxMax(m_noItems, 7)); + // don't make the listbox too tall (limit height to 10 items) but don't + // make it too small neither + int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)* + wxMin(wxMax(m_noItems, 3), 10); return wxSize(wListbox, hListbox); } @@ -742,7 +745,7 @@ bool wxListBox::MSWOnMeasure(WXMEASUREITEMSTRUCT *item) wxDC dc; dc.SetHDC((WXHDC)hdc); - dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_ANSI_VAR_FONT)); + dc.SetFont(wxSystemSettings::GetFont(wxSYS_ANSI_VAR_FONT)); pStruct->itemHeight = dc.GetCharHeight() + 2*OWNER_DRAWN_LISTBOX_EXTRA_SPACE; pStruct->itemWidth = dc.GetCharWidth(); @@ -782,5 +785,6 @@ bool wxListBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) (wxOwnerDrawn::wxODStatus)pStruct->itemState); } -#endif - // wxUSE_OWNER_DRAWN +#endif // wxUSE_OWNER_DRAWN + +#endif // wxUSE_LISTBOX