]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/button.cpp
fixed crash introduced by recently applied autowidth patch (patch 1171455)
[wxWidgets.git] / src / os2 / button.cpp
index 397ee99edaaa70bedd6871c5e89739d536aa8387..d75aa8258af152a2274f71c7900c935866cf8958 100644 (file)
@@ -23,6 +23,7 @@
     #include "wx/scrolwin.h"
 #endif
 
     #include "wx/scrolwin.h"
 #endif
 
+#include "wx/stockitem.h"
 #include "wx/os2/private.h"
 
 #define BUTTON_HEIGHT_FROM_CHAR_HEIGHT(cy) (11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)/10)
 #include "wx/os2/private.h"
 
 #define BUTTON_HEIGHT_FROM_CHAR_HEIGHT(cy) (11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)/10)
@@ -43,7 +44,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
 bool wxButton::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
 bool wxButton::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
-, const wxString&                   rsLabel
+, const wxString&                   rsLbl
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
 , long                              lStyle
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
 , long                              lStyle
@@ -51,6 +52,12 @@ bool wxButton::Create(
 , const wxString&                   rsName
 )
 {
 , const wxString&                   rsName
 )
 {
+    wxString rsLabel(rsLbl);
+    if (rsLabel.empty() && wxIsStockID(vId))
+        rsLabel = wxGetStockLabel(vId);
+
+    wxString                        sLabel = ::wxPMTextToLabel(rsLabel);
+
     SetName(rsName);
 #if wxUSE_VALIDATORS
     SetValidator(rValidator);
     SetName(rsName);
 #if wxUSE_VALIDATORS
     SetValidator(rValidator);
@@ -73,7 +80,7 @@ bool wxButton::Create(
 
     m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)   // Parent handle
                                        ,WC_BUTTON            // A Button class window
 
     m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent)   // Parent handle
                                        ,WC_BUTTON            // A Button class window
-                                       ,(PSZ)rsLabel.c_str() // Button text
+                                       ,(PSZ)sLabel.c_str()  // Button text
                                        ,lStyle               // Button style
                                        ,0, 0, 0, 0           // Location and size
                                        ,GetHwndOf(pParent)   // Owner handle
                                        ,lStyle               // Button style
                                        ,0, 0, 0, 0           // Location and size
                                        ,GetHwndOf(pParent)   // Owner handle
@@ -134,6 +141,7 @@ wxSize wxButton::DoGetBestSize() const
     int                             nWidthButton;
     int                             nWidthChar;
     int                             nHeightChar;
     int                             nWidthButton;
     int                             nWidthChar;
     int                             nHeightChar;
+    wxFont                          vFont = (wxFont)GetFont();
 
     GetTextExtent( rsLabel
                   ,&nWidthButton
 
     GetTextExtent( rsLabel
                   ,&nWidthButton
@@ -143,7 +151,7 @@ wxSize wxButton::DoGetBestSize() const
     wxGetCharSize( GetHWND()
                   ,&nWidthChar
                   ,&nHeightChar
     wxGetCharSize( GetHWND()
                   ,&nWidthChar
                   ,&nHeightChar
-                  ,(wxFont*)&GetFont()
+                  ,&vFont
                  );
 
     //
                  );
 
     //
@@ -159,7 +167,7 @@ wxSize wxButton::DoGetBestSize() const
     //
     // Need a little extra to make it look right
     //
     //
     // Need a little extra to make it look right
     //
-    nHeightButton += nHeightChar/1.5;
+    nHeightButton += (int)(nHeightChar/1.5);
 
     if (!HasFlag(wxBU_EXACTFIT))
     {
 
     if (!HasFlag(wxBU_EXACTFIT))
     {
@@ -230,7 +238,7 @@ void wxButton::SetDefault()
     wxCHECK_RET( pParent, _T("button without parent?") );
 
     //
     wxCHECK_RET( pParent, _T("button without parent?") );
 
     //
-    // Set this one as the default button both for wxWindows and Windows
+    // Set this one as the default button both for wxWidgets and Windows
     //
     wxWindow*                       pWinOldDefault = pParent->SetDefaultItem(this);
 
     //
     wxWindow*                       pWinOldDefault = pParent->SetDefaultItem(this);
 
@@ -311,7 +319,7 @@ void wxButton::SetDefaultStyle(
         if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
         {
             if (bOn)
         if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
         {
             if (bOn)
-                lStyle | BS_DEFAULT;
+                lStyle |= BS_DEFAULT;
             else
                 lStyle &= ~BS_DEFAULT;
             ::WinSetWindowULong(GetHwndOf(pBtn), QWL_STYLE, lStyle);
             else
                 lStyle &= ~BS_DEFAULT;
             ::WinSetWindowULong(GetHwndOf(pBtn), QWL_STYLE, lStyle);