]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/listbox.cpp
1. corrected (but the fix is ugly) the multiple def button problem
[wxWidgets.git] / src / msw / listbox.cpp
index 4eb467f5036a21bf5e61e5c0fd88ef0be31ea135..5b2e30ab63554e9363e881e8ba195fb5e1286210 100644 (file)
@@ -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()
@@ -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;
 }