X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6c8a980fc412792e64256724e02e9d387ee38e21..69a568f06b62dc68f96dfa3b193d07d2a4d5ceb8:/src/msw/listbox.cpp diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index 06aae2979a..2168734e01 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -50,7 +50,7 @@ #ifndef __TWIN32__ #if defined(__GNUWIN32__) #ifndef wxUSE_NORLANDER_HEADERS - #include + #include "wx/msw/gnuwin32/extra.h" #endif #endif #endif @@ -230,12 +230,7 @@ bool wxListBox::Create(wxWindow *parent, wxListBox::~wxListBox() { -#if wxUSE_OWNER_DRAWN - size_t uiCount = m_aItems.Count(); - while ( uiCount-- != 0 ) { - delete m_aItems[uiCount]; - } -#endif // wxUSE_OWNER_DRAWN + Free(); } void wxListBox::SetupColours() @@ -310,7 +305,7 @@ void wxListBox::DoSetItems(const wxArrayString& choices, void** clientData) if ( clientData ) { #if wxUSE_OWNER_DRAWN - wxASSERT_MSG(clientData[ui] == NULL, + wxASSERT_MSG(clientData[i] == NULL, wxT("Can't use client data with owner-drawn listboxes")); #else // !wxUSE_OWNER_DRAWN ListBox_SetItemData(GetHwnd(), i, clientData[i]); @@ -352,15 +347,29 @@ int wxListBox::FindString(const wxString& s) const } void wxListBox::Clear() +{ + Free(); + + ListBox_ResetContent(GetHwnd()); + + m_noItems = 0; + SetHorizontalExtent(); +} + +void wxListBox::Free() { #if wxUSE_OWNER_DRAWN - size_t uiCount = m_aItems.Count(); - while ( uiCount-- != 0 ) { - delete m_aItems[uiCount]; - } + if ( m_windowStyle & wxLB_OWNERDRAW ) + { + size_t uiCount = m_aItems.Count(); + while ( uiCount-- != 0 ) { + delete m_aItems[uiCount]; + } - m_aItems.Clear(); -#else // !wxUSE_OWNER_DRAWN + m_aItems.Clear(); + } + else +#endif // wxUSE_OWNER_DRAWN if ( HasClientObjectData() ) { for ( size_t n = 0; n < (size_t)m_noItems; n++ ) @@ -368,12 +377,6 @@ void wxListBox::Clear() delete GetClientObject(n); } } -#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN - - ListBox_ResetContent(GetHwnd()); - - m_noItems = 0; - SetHorizontalExtent(); } void wxListBox::SetSelection(int N, bool select) @@ -655,44 +658,39 @@ wxSize wxListBox::DoGetBestSize() bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { - /* - if (param == LBN_SELCANCEL) - { - event.extraLong = FALSE; - } - */ - if (param == LBN_SELCHANGE) + if ( param == LBN_SELCHANGE ) { wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId); + event.SetEventObject( this ); + wxArrayInt aSelections; - int count = GetSelections(aSelections); + int n, count = GetSelections(aSelections); if ( count > 0 ) { - event.m_commandInt = aSelections[0]; - event.m_clientData = GetClientData(event.m_commandInt); - wxString str(GetString(event.m_commandInt)); - if (str != wxT("")) - { - event.m_commandString = str; - } + n = aSelections[0]; + if ( HasClientObjectData() ) + event.SetClientObject( GetClientObject(n) ); + else if ( HasClientUntypedData() ) + event.SetClientData( GetClientData(n) ); + event.SetString( GetString(n) ); } else { - event.m_commandInt = -1; - event.m_commandString.Empty(); + n = -1; } - event.SetEventObject( this ); - ProcessCommand(event); - return TRUE; + event.m_commandInt = n; + + return GetEventHandler()->ProcessEvent(event); } - else if (param == LBN_DBLCLK) + else if ( param == LBN_DBLCLK ) { wxCommandEvent event(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, m_windowId); event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(event); - return TRUE; + + return GetEventHandler()->ProcessEvent(event); } + //else: return FALSE; }