]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/choice.cpp
cleaned Harm's new wxHTML help code
[wxWidgets.git] / src / msw / choice.cpp
index d157992171595a43dda2fd31ee7455b9d95c609c..c6a9f7909f1286279a058759f7965290cddc90df 100644 (file)
@@ -85,6 +85,11 @@ bool wxChoice::Create(wxWindow *parent,
     return TRUE;
 }
 
+wxChoice::~wxChoice()
+{
+    Free();
+}
+
 // ----------------------------------------------------------------------------
 // adding/deleting items to/from the list
 // ----------------------------------------------------------------------------
@@ -104,14 +109,33 @@ void wxChoice::Delete(int n)
 {
     wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") );
 
+    if ( HasClientObjectData() )
+    {
+        delete GetClientObject(n);
+    }
+
     SendMessage(GetHwnd(), CB_DELETESTRING, n, 0);
 }
 
 void wxChoice::Clear()
 {
+    Free();
+
     SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0);
 }
 
+void wxChoice::Free()
+{
+    if ( HasClientObjectData() )
+    {
+        size_t count = GetCount();
+        for ( size_t n = 0; n < count; n++ )
+        {
+            delete GetClientObject(n);
+        }
+    }
+}
+
 // ----------------------------------------------------------------------------
 // selection
 // ----------------------------------------------------------------------------
@@ -157,10 +181,20 @@ int wxChoice::FindString(const wxString& s) const
 #endif // Watcom/!Watcom
 }
 
+void wxChoice::SetString(int n, const wxString& s)
+{
+    wxFAIL_MSG(wxT("not implemented"));
+
+#if 0 // should do this, but no Insert() so far
+    Delete(n);
+    Insert(n + 1, s);
+#endif
+}
+
 wxString wxChoice::GetString(int n) const
 {
     size_t len = (size_t)::SendMessage(GetHwnd(), CB_GETLBTEXTLEN, n, 0);
-    wxString str = "";
+    wxString str;
     if (len) {
         if ( ::SendMessage(GetHwnd(), CB_GETLBTEXT, n,
                            (LPARAM)str.GetWriteBuf(len)) == CB_ERR ) {
@@ -176,7 +210,7 @@ wxString wxChoice::GetString(int n) const
 // client data
 // ----------------------------------------------------------------------------
 
-void wxChoice::DoSetClientData( int n, void* clientData )
+void wxChoice::DoSetItemClientData( int n, void* clientData )
 {
     if ( SendMessage(GetHwnd(), CB_SETITEMDATA, n, (LPARAM)clientData) == CB_ERR )
     {
@@ -184,7 +218,7 @@ void wxChoice::DoSetClientData( int n, void* clientData )
     }
 }
 
-void* wxChoice::DoGetClientData( int n ) const
+void* wxChoice::DoGetItemClientData( int n ) const
 {
     LPARAM rc = SendMessage(GetHwnd(), CB_GETITEMDATA, n, 0);
     if ( rc == CB_ERR )
@@ -192,20 +226,20 @@ void* wxChoice::DoGetClientData( int n ) const
         wxLogLastError(wxT("CB_GETITEMDATA"));
 
         // unfortunately, there is no way to return an error code to the user
-       rc = (LPARAM) NULL;
+        rc = (LPARAM) NULL;
     }
 
     return (void *)rc;
 }
 
-void wxChoice::DoSetClientObject( int n, wxClientData* clientData )
+void wxChoice::DoSetItemClientObject( int n, wxClientData* clientData )
 {
-    DoSetClientData(n, clientData);
+    DoSetItemClientData(n, clientData);
 }
 
-wxClientData* wxChoice::DoGetClientObject( int n ) const
+wxClientData* wxChoice::DoGetItemClientObject( int n ) const
 {
-    return (wxClientData *)DoGetClientData(n);
+    return (wxClientData *)DoGetItemClientData(n);
 }
 
 // ----------------------------------------------------------------------------
@@ -283,10 +317,15 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
         return FALSE;
     }
 
+    int n = GetSelection();
     wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId);
-    event.SetInt(GetSelection());
+    event.SetInt(n);
     event.SetEventObject(this);
     event.SetString(GetStringSelection());
+    if ( HasClientObjectData() )
+        event.SetClientObject( GetClientObject(n) );
+    else if ( HasClientUntypedData() )
+        event.SetClientData( GetClientData(n) );
     ProcessCommand(event);
 
     return TRUE;