]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/choice.cpp
wxControl::SetLabel no longer strips out codes so do it here
[wxWidgets.git] / src / os2 / choice.cpp
index c989624c46510cbb7464c0e4537695be12a0dc83..cea4402332bb81fda41db44d726bdaaddd0afb2e 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        choice.cpp
+// Name:        src/os2/choice.cpp
 // Purpose:     wxChoice
 // Author:      David Webster
 // Modified by:
 // Purpose:     wxChoice
 // Author:      David Webster
 // Modified by:
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
+#include "wx/defs.h"
+
+#if wxUSE_CHOICE
+
 #ifndef WX_PRECOMP
     #include "wx/choice.h"
     #include "wx/utils.h"
 #ifndef WX_PRECOMP
     #include "wx/choice.h"
     #include "wx/utils.h"
 
 IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
 
 
 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
 bool wxChoice::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
@@ -45,7 +66,7 @@ bool wxChoice::Create(
                        ,rValidator
                        ,rsName
                       ))
                        ,rValidator
                        ,rsName
                       ))
-        return FALSE;
+        return false;
     lSstyle = CBS_DROPDOWNLIST |
               WS_TABSTOP       |
               WS_VISIBLE;
     lSstyle = CBS_DROPDOWNLIST |
               WS_TABSTOP       |
               WS_VISIBLE;
@@ -62,7 +83,7 @@ bool wxChoice::Create(
     if (!OS2CreateControl( wxT("COMBOBOX")
                           ,lSstyle
                          ))
     if (!OS2CreateControl( wxT("COMBOBOX")
                           ,lSstyle
                          ))
-        return FALSE;
+        return false;
 
     //
     // A choice/combobox normally has a white background (or other, depending
 
     //
     // A choice/combobox normally has a white background (or other, depending
@@ -73,19 +94,12 @@ bool wxChoice::Create(
     {
         Append(asChoices[i]);
     }
     {
         Append(asChoices[i]);
     }
-    wxFont*                          pTextFont = new wxFont( 10
-                                                            ,wxMODERN
-                                                            ,wxNORMAL
-                                                            ,wxNORMAL
-                                                           );
-    SetFont(*pTextFont);
     SetSize( rPos.x
             ,rPos.y
             ,rSize.x
             ,rSize.y
            );
     SetSize( rPos.x
             ,rPos.y
             ,rSize.x
             ,rSize.y
            );
-    delete pTextFont;
-    return TRUE;
+    return true;
 } // end of wxChoice::Create
 
 // ----------------------------------------------------------------------------
 } // end of wxChoice::Create
 
 // ----------------------------------------------------------------------------
@@ -97,7 +111,7 @@ int wxChoice::DoAppend(
 )
 {
     int                             nIndex;
 )
 {
     int                             nIndex;
-    SHORT                           nIndexType = 0;
+    LONG                            nIndexType = 0;
 
     if (m_windowStyle & wxLB_SORT)
         nIndexType = LIT_SORTASCENDING;
 
     if (m_windowStyle & wxLB_SORT)
         nIndexType = LIT_SORTASCENDING;
@@ -112,7 +126,7 @@ int wxChoice::DoAppend(
 } // end of wxChoice::DoAppend
 
 int wxChoice::DoInsert(
 } // end of wxChoice::DoAppend
 
 int wxChoice::DoInsert(
-  const wxString&                   rsItem
+  const wxString&                   rsItem,
   int                               pos
 )
 {
   int                               pos
 )
 {
@@ -120,10 +134,10 @@ int wxChoice::DoInsert(
     wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
 
     if (pos == GetCount())
     wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
 
     if (pos == GetCount())
-        return DoAppend(item);
+        return DoAppend(rsItem);
 
     int                             nIndex;
 
     int                             nIndex;
-    SHORT                           nIndexType = 0;
+    LONG                            nIndexType = 0;
 
     if (m_windowStyle & wxLB_SORT)
         nIndexType = LIT_SORTASCENDING;
 
     if (m_windowStyle & wxLB_SORT)
         nIndexType = LIT_SORTASCENDING;
@@ -180,38 +194,10 @@ int wxChoice::GetCount() const
     return((int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0)));
 } // end of wxChoice::GetCount
 
     return((int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0)));
 } // end of wxChoice::GetCount
 
-int wxChoice::FindString(
-  const wxString&                   rsStr
-) const
-{
-    int                             nPos;
-    int                             nTextLength;
-    PSZ                             zStr;
-    int                             nItemCount;
-
-    nItemCount = (int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0));
-    for (nPos = 0; nPos < nItemCount; nPos++)
-    {
-        nTextLength = (int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)nPos, (MPARAM)0));
-        zStr = new char[nTextLength + 1];
-        ::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXT, MPFROM2SHORT((SHORT)nPos, (SHORT)nTextLength), (MPARAM)zStr);
-        if (rsStr == (char*)zStr)
-        {
-            delete [] zStr;
-            break;
-        }
-        delete [] zStr;
-    }
-    return nPos;
-} // end of wxChoice::FindString
-
-void wxChoice::SetString(
-  int                               n
-, const wxString&                   rsStr
-)
+void wxChoice::SetString( int n, const wxString& rsStr )
 {
 {
-    SHORT                           nIndexType = 0;
-    void*                           pData;
+    LONG  nIndexType = 0;
+    void* pData;
 
     if ( m_clientDataItemsType != wxClientData_None )
     {
 
     if ( m_clientDataItemsType != wxClientData_None )
     {
@@ -242,18 +228,16 @@ void wxChoice::SetString(
     }
 } // end of wxChoice::SetString
 
     }
 } // end of wxChoice::SetString
 
-wxString wxChoice::GetString(
-  int                               n
-) const
+wxString wxChoice::GetString(int n) const
 {
 {
-    size_t                          nLen = 0;
-    wxString                        sStr = "";
-    char*                           zBuf;
+    int      nLen = 0;
+    wxString sStr = wxEmptyString;
+    wxChar*  zBuf;
 
     nLen = (size_t)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)n, (MPARAM)0));
     if (nLen != LIT_ERROR && nLen > 0)
     {
 
     nLen = (size_t)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)n, (MPARAM)0));
     if (nLen != LIT_ERROR && nLen > 0)
     {
-        zBuf = new char[nLen + 1];
+        zBuf = new wxChar[nLen + 1];
         ::WinSendMsg( GetHwnd()
                      ,LM_QUERYITEMTEXT
                      ,MPFROM2SHORT((SHORT)n, (SHORT)nLen)
         ::WinSendMsg( GetHwnd()
                      ,LM_QUERYITEMTEXT
                      ,MPFROM2SHORT((SHORT)n, (SHORT)nLen)
@@ -306,25 +290,23 @@ wxClientData* wxChoice::DoGetItemClientObject(
 // wxOS2 specific helpers
 // ----------------------------------------------------------------------------
 
 // wxOS2 specific helpers
 // ----------------------------------------------------------------------------
 
-void wxChoice::DoSetSize(
-  int                               nX
-, int                               nY
-, int                               nWidth
-, int                               nHeight
-, int                               nSizeFlags
-)
+void wxChoice::DoSetSize(int nX,
+                         int nY,
+                         int nWidth,
+                         int WXUNUSED(nHeight),
+                         int nSizeFlags)
 {
     //
     // Ignore height parameter because height doesn't mean 'initially
     // displayed' height, it refers to the drop-down menu as well. The
 {
     //
     // Ignore height parameter because height doesn't mean 'initially
     // displayed' height, it refers to the drop-down menu as well. The
-    // wxWindows interpretation is different; also, getting the size returns
+    // wxWidgets interpretation is different; also, getting the size returns
     // the _displayed_ size (NOT the drop down menu size) so
     // setting-getting-setting size would not work.
     //
     wxControl::DoSetSize( nX
                          ,nY
                          ,nWidth
     // the _displayed_ size (NOT the drop down menu size) so
     // setting-getting-setting size would not work.
     //
     wxControl::DoSetSize( nX
                          ,nY
                          ,nWidth
-                         ,-1
+                         ,wxDefaultCoord
                          ,nSizeFlags
                         );
 } // end of wxChoice::DoSetSize
                          ,nSizeFlags
                         );
 } // end of wxChoice::DoSetSize
@@ -339,6 +321,7 @@ wxSize wxChoice::DoGetBestSize() const
     int                             nItems = GetCount();
     int                             nCx;
     int                             nCy;
     int                             nItems = GetCount();
     int                             nCx;
     int                             nCy;
+    wxFont                          vFont = (wxFont)GetFont();
 
     for (int i = 0; i < nItems; i++)
     {
 
     for (int i = 0; i < nItems; i++)
     {
@@ -365,7 +348,7 @@ wxSize wxChoice::DoGetBestSize() const
     wxGetCharSize( GetHWND()
                   ,&nCx
                   ,&nCy
     wxGetCharSize( GetHWND()
                   ,&nCx
                   ,&nCy
-                  ,(wxFont*)&GetFont()
+                  ,&vFont
                  );
     nChoiceWidth += 5 * nCx;
 
                  );
     nChoiceWidth += 5 * nCx;
 
@@ -402,7 +385,7 @@ bool wxChoice::OS2Command(
         //
         // "selection changed" is the only event we're after
         //
         //
         // "selection changed" is the only event we're after
         //
-        return FALSE;
+        return false;
     }
     int                             n = GetSelection();
 
     }
     int                             n = GetSelection();
 
@@ -414,14 +397,14 @@ bool wxChoice::OS2Command(
 
         vEvent.SetInt(n);
         vEvent.SetEventObject(this);
 
         vEvent.SetInt(n);
         vEvent.SetEventObject(this);
-        vEvent.SetString((char*)GetStringSelection().c_str());
+        vEvent.SetString(GetStringSelection());
         if (HasClientObjectData())
             vEvent.SetClientObject(GetClientObject(n));
         else if (HasClientUntypedData())
             vEvent.SetClientData(GetClientData(n));
         ProcessCommand(vEvent);
     }
         if (HasClientObjectData())
             vEvent.SetClientObject(GetClientObject(n));
         else if (HasClientUntypedData())
             vEvent.SetClientData(GetClientData(n));
         ProcessCommand(vEvent);
     }
-    return TRUE;
+    return true;
 } // end of wxChoice::OS2Command
 
 void wxChoice::Free()
 } // end of wxChoice::OS2Command
 
 void wxChoice::Free()
@@ -435,4 +418,6 @@ void wxChoice::Free()
             delete GetClientObject(n);
         }
     }
             delete GetClientObject(n);
         }
     }
-} // end of wxhoice::Free
+} // end of wxChoice::Free
+
+#endif // wxUSE_CHOICE