]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/button.cpp
Patch [ 688973 ] from William Gallafent: add missing wx/dc.h.
[wxWidgets.git] / src / os2 / button.cpp
index 1a7ab387c0957382b2e3b910e94516fd82189943..397ee99edaaa70bedd6871c5e89739d536aa8387 100644 (file)
@@ -13,6 +13,7 @@
 #include "wx/wxprec.h"
 
 #ifndef WX_PRECOMP
 #include "wx/wxprec.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
     #include "wx/button.h"
     #include "wx/brush.h"
     #include "wx/panel.h"
     #include "wx/button.h"
     #include "wx/brush.h"
     #include "wx/panel.h"
@@ -46,9 +47,7 @@ bool wxButton::Create(
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
 , long                              lStyle
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
 , long                              lStyle
-#if wxUSE_VALIDATORS
 , const wxValidator&                rValidator
 , const wxValidator&                rValidator
-#endif
 , const wxString&                   rsName
 )
 {
 , const wxString&                   rsName
 )
 {
@@ -162,13 +161,19 @@ wxSize wxButton::DoGetBestSize() const
     //
     nHeightButton += nHeightChar/1.5;
 
     //
     nHeightButton += nHeightChar/1.5;
 
-    wxSize                          vSize = GetDefaultSize();
+    if (!HasFlag(wxBU_EXACTFIT))
+    {
+        wxSize                      vSize = GetDefaultSize();
 
 
-    if (nWidthButton > vSize.x)
-        vSize.x = nWidthButton;
-    if (nHeightButton > vSize.y)
-        vSize.y = nHeightButton;
-    return vSize;
+        if (nWidthButton > vSize.x)
+            vSize.x = nWidthButton;
+        if (nHeightButton > vSize.y)
+            vSize.y = nHeightButton;
+        return vSize;
+    }
+    return wxSize( nWidthButton
+                  ,nHeightButton
+                 );
 } // end of wxButton::DoGetBestSize
 
 /* static */
 } // end of wxButton::DoGetBestSize
 
 /* static */
@@ -228,9 +233,13 @@ void wxButton::SetDefault()
     // Set this one as the default button both for wxWindows and Windows
     //
     wxWindow*                       pWinOldDefault = pParent->SetDefaultItem(this);
     // Set this one as the default button both for wxWindows and Windows
     //
     wxWindow*                       pWinOldDefault = pParent->SetDefaultItem(this);
-    UpdateDefaultStyle( this
-                       ,pWinOldDefault
-                      );
+
+    SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
+                    ,FALSE
+                   );
+    SetDefaultStyle( this
+                    ,TRUE
+                   );
 } // end of wxButton::SetDefault
 
 void wxButton::SetTmpDefault()
 } // end of wxButton::SetDefault
 
 void wxButton::SetTmpDefault()
@@ -240,14 +249,14 @@ void wxButton::SetTmpDefault()
     wxCHECK_RET( pParent, _T("button without parent?") );
 
     wxWindow*                       pWinOldDefault = pParent->GetDefaultItem();
     wxCHECK_RET( pParent, _T("button without parent?") );
 
     wxWindow*                       pWinOldDefault = pParent->GetDefaultItem();
+
     pParent->SetTmpDefaultItem(this);
     pParent->SetTmpDefaultItem(this);
-    if (pWinOldDefault != this)
-    {
-        UpdateDefaultStyle( this
-                           ,pWinOldDefault
-                          );
-    }
-    //else: no styles to update
+    SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
+                    ,FALSE
+                   );
+    SetDefaultStyle( this
+                    ,TRUE
+                   );
 } // end of wxButton::SetTmpDefault
 
 void wxButton::UnsetTmpDefault()
 } // end of wxButton::SetTmpDefault
 
 void wxButton::UnsetTmpDefault()
@@ -260,47 +269,60 @@ void wxButton::UnsetTmpDefault()
 
     wxWindow*                       pWinOldDefault = pParent->GetDefaultItem();
 
 
     wxWindow*                       pWinOldDefault = pParent->GetDefaultItem();
 
-    if (pWinOldDefault != this)
-    {
-        UpdateDefaultStyle( pWinOldDefault
-                           ,this
-                          );
-    }
-    //else: we had been default before anyhow
+    SetDefaultStyle( this
+                    ,FALSE
+                   );
+    SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
+                    ,TRUE
+                   );
 } // end of wxButton::UnsetTmpDefault
 
 } // end of wxButton::UnsetTmpDefault
 
-void wxButton::UpdateDefaultStyle(
-  wxWindow*                         pWinDefault
-, wxWindow*                         pWinOldDefault)
+void wxButton::SetDefaultStyle(
+  wxButton*                         pBtn
+, bool                              bOn
+)
 {
 {
-    wxButton*                       pBtnOldDefault = wxDynamicCast(pWinOldDefault, wxButton);
     long                            lStyle;
     long                            lStyle;
+    //
+    // We may be called with NULL pointer -- simpler to do the check here than
+    // in the caller which does wxDynamicCast()
+    //
+    if (!pBtn)
+        return;
+
+    //
+    // First, let DefDlgProc() know about the new default button
+    //
+    if (bOn)
+    {
+        if (!wxTheApp->IsActive())
+            return;
 
 
-    if ( pBtnOldDefault && pBtnOldDefault != pWinDefault )
+        //
+        // In OS/2 the dialog/panel doesn't really know it has a default
+        // button, the default button simply has that style.  We'll just
+        // simulate by setting focus to it
+        //
+        pBtn->SetFocus();
+    }
+    lStyle = ::WinQueryWindowULong(GetHwndOf(pBtn), QWL_STYLE);
+    if (!(lStyle & BS_DEFAULT) == bOn)
     {
     {
-        lStyle = ::WinQueryWindowULong(GetHwndOf(pBtnOldDefault), QWL_STYLE);
         if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
         {
         if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
         {
-            lStyle &= ~BS_DEFAULT;
-            ::WinSetWindowULong(GetHwndOf(pBtnOldDefault), QWL_STYLE, lStyle);
+            if (bOn)
+                lStyle | BS_DEFAULT;
+            else
+                lStyle &= ~BS_DEFAULT;
+            ::WinSetWindowULong(GetHwndOf(pBtn), QWL_STYLE, lStyle);
         }
         else
         {
         }
         else
         {
-            // redraw the button - it will notice itself that it's not the
+            //
+            // Redraw the button - it will notice itself that it's not the
             // default one any longer
             // default one any longer
-            pBtnOldDefault->Refresh();
-        }
-    }
-
-    wxButton*                       pBtnDefault = wxDynamicCast(pWinDefault, wxButton);
-
-    if (pBtnDefault)
-    {
-        lStyle = ::WinQueryWindowULong(GetHwndOf(pBtnDefault), QWL_STYLE);
-        if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
-        {
-            lStyle != BS_DEFAULT;
-            ::WinSetWindowULong(GetHwndOf(pBtnDefault), QWL_STYLE, lStyle);
+            //
+            pBtn->Refresh();
         }
     }
 } // end of wxButton::UpdateDefaultStyle
         }
     }
 } // end of wxButton::UpdateDefaultStyle