]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/choice.cpp
load wsock32.dll dynamically, so that wxCore has no dependency on it
[wxWidgets.git] / src / os2 / choice.cpp
index 88fff750fb200e064abcbf8a1798da481dc4d72c..b980792934bc8a4037ee4f858c7e6517e05b1f48 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
 
+bool wxChoice::Create(
+  wxWindow*                         pParent
+, wxWindowID                        vId
+, const wxPoint&                    rPos
+, const wxSize&                     rSize
+, const wxArrayString&              asChoices
+, long                              lStyle
+, const wxValidator&                rValidator
+, const wxString&                   rsName
+)
+{
+    wxCArrayString chs(asChoices);
+
+    return Create(pParent, vId, rPos, rSize, chs.GetCount(), chs.GetStrings(),
+                  lStyle, rValidator, rsName);
+}
+
 bool wxChoice::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
@@ -111,6 +128,32 @@ int wxChoice::DoAppend(
     return nIndex;
 } // end of wxChoice::DoAppend
 
+int wxChoice::DoInsert(
+  const wxString&                   rsItem,
+  int                               pos
+)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(rsItem);
+
+    int                             nIndex;
+    SHORT                           nIndexType = 0;
+
+    if (m_windowStyle & wxLB_SORT)
+        nIndexType = LIT_SORTASCENDING;
+    else
+        nIndexType = pos;
+    nIndex = (int)::WinSendMsg( GetHwnd()
+                               ,LM_INSERTITEM
+                               ,(MPARAM)nIndexType
+                               ,(MPARAM)rsItem.c_str()
+                              );
+    return nIndex;
+} // end of wxChoice::DoInsert
+
 void wxChoice::Delete(
   int                               n
 )
@@ -185,6 +228,16 @@ void wxChoice::SetString(
 )
 {
     SHORT                           nIndexType = 0;
+    void*                           pData;
+
+    if ( m_clientDataItemsType != wxClientData_None )
+    {
+        pData = DoGetItemClientData(n);
+    }
+    else // no client data
+    {
+        pData = NULL;
+    }
 
     ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, 0);
 
@@ -197,6 +250,13 @@ void wxChoice::SetString(
                  ,(MPARAM)nIndexType
                  ,(MPARAM)rsStr.c_str()
                 );
+
+    if (pData)
+    {
+        DoSetItemClientData( n
+                            ,pData
+                           );
+    }
 } // end of wxChoice::SetString
 
 wxString wxChoice::GetString(