]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/choice.cpp
applied patch 1683441
[wxWidgets.git] / src / os2 / choice.cpp
index 498e5cd427508a34a48c3a4323819dad747b33db..1e62c4f6c000afe2bfa38bffa4e8e823a38b98a7 100644 (file)
@@ -14,8 +14,9 @@
 
 #if wxUSE_CHOICE
 
+#include "wx/choice.h"
+
 #ifndef WX_PRECOMP
-    #include "wx/choice.h"
     #include "wx/utils.h"
     #include "wx/log.h"
     #include "wx/settings.h"
@@ -69,8 +70,9 @@ bool wxChoice::Create(
               WS_TABSTOP       |
               WS_VISIBLE;
 
-    if (lStyle & wxCLIP_SIBLINGS )
-        lSstyle |= WS_CLIPSIBLINGS;
+    // clipping siblings does not yet work
+    // if (lStyle & wxCLIP_SIBLINGS )
+    //     lSstyle |= WS_CLIPSIBLINGS;
 
     wxASSERT_MSG( !(lStyle & wxCB_DROPDOWN) &&
                   !(lStyle & wxCB_READONLY) &&
@@ -88,6 +90,8 @@ bool wxChoice::Create(
     // on global settings) rather than inheriting the parent's background colour.
     //
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
+
+    // initialize the controls contents
     for (int i = 0; i < n; i++)
     {
         Append(asChoices[i]);
@@ -97,9 +101,22 @@ bool wxChoice::Create(
             ,rSize.x
             ,rSize.y
            );
+
+    // Set height to use with sizers i.e. without the dropdown listbox
+    wxFont vFont = GetFont();
+    int  nEditHeight;
+    wxGetCharSize( GetHWND(), NULL, &nEditHeight, &vFont );
+    nEditHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nEditHeight);
+    SetInitialSize(wxSize(-1,nEditHeight+4));   // +2x2 for the border
+
     return true;
 } // end of wxChoice::Create
 
+wxChoice::~wxChoice()
+{
+    Free();
+}
+
 // ----------------------------------------------------------------------------
 // adding/deleting items to/from the list
 // ----------------------------------------------------------------------------
@@ -110,8 +127,7 @@ int wxChoice::DoAppend(
 {
     int                             nIndex;
     LONG                            nIndexType = 0;
-
-    if (m_windowStyle & wxLB_SORT)
+    if (m_windowStyle & wxCB_SORT)
         nIndexType = LIT_SORTASCENDING;
     else
         nIndexType = LIT_END;
@@ -134,7 +150,7 @@ int wxChoice::DoInsert( const wxString& rsItem, unsigned int pos )
     int  nIndex;
     LONG nIndexType = 0;
 
-    if (m_windowStyle & wxLB_SORT)
+    if (m_windowStyle & wxCB_SORT)
         nIndexType = LIT_SORTASCENDING;
     else
         nIndexType = pos;
@@ -149,6 +165,12 @@ int wxChoice::DoInsert( const wxString& rsItem, unsigned int pos )
 void wxChoice::Delete(unsigned int n)
 {
     wxCHECK_RET( IsValid(n), wxT("invalid item index in wxChoice::Delete") );
+
+    if ( HasClientObjectData() )
+    {
+        delete GetClientObject(n);
+    }
+
     ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0);
 } // end of wxChoice::Delete
 
@@ -203,7 +225,7 @@ void wxChoice::SetString(unsigned int n, const wxString& rsStr)
 
     ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, 0);
 
-    if (m_windowStyle & wxLB_SORT)
+    if (m_windowStyle & wxCB_SORT)
         nIndexType = LIT_SORTASCENDING;
     else
         nIndexType = LIT_END;
@@ -228,7 +250,7 @@ wxString wxChoice::GetString(unsigned int n) const
     nLen = (size_t)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)n, (MPARAM)0));
     if (nLen != LIT_ERROR && nLen > 0)
     {
-        zBuf = new wxChar[nLen + 1];
+        zBuf = new wxChar[++nLen];
         ::WinSendMsg( GetHwnd()
                      ,LM_QUERYITEMTEXT
                      ,MPFROM2SHORT((SHORT)n, (SHORT)nLen)