]> git.saurik.com Git - wxWidgets.git/commitdiff
wxButton::GetDefaultSize() fix
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 4 Aug 1999 22:07:01 +0000 (22:07 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 4 Aug 1999 22:07:01 +0000 (22:07 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/controls/controls.cpp
src/common/dlgcmn.cpp
src/generic/extdlgg.cpp
src/msw/button.cpp

index bae85a92ace7b7c166f32fe498273005f4a8740d..ed3755f463ba63d5acced6cfacc452ae3e788761 100644 (file)
@@ -84,6 +84,8 @@ public:
     void OnPageChanging( wxNotebookEvent &event );
     void OnSliderUpdate( wxCommandEvent &event );
 #ifndef wxUSE_SPINBUTTON
+    void OnSpinUp( wxSpinEvent &event );
+    void OnSpinDown( wxSpinEvent &event );
     void OnSpinUpdate( wxSpinEvent &event );
     void OnUpdateShowProgress( wxUpdateUIEvent& event );
     void OnShowProgress( wxCommandEvent &event );
@@ -279,6 +281,8 @@ EVT_BUTTON    (ID_SET_FONT,             MyPanel::OnSetFont)
 EVT_SLIDER    (ID_SLIDER,               MyPanel::OnSliderUpdate)
 #ifndef wxUSE_SPINBUTTON
 EVT_SPIN      (ID_SPIN,                 MyPanel::OnSpinUpdate)
+EVT_SPIN_UP   (ID_SPIN,                 MyPanel::OnSpinUp)
+EVT_SPIN_DOWN (ID_SPIN,                 MyPanel::OnSpinDown)
 EVT_UPDATE_UI (ID_BTNPROGRESS,          MyPanel::OnUpdateShowProgress)
 EVT_BUTTON    (ID_BTNPROGRESS,          MyPanel::OnShowProgress)
 #endif
@@ -452,15 +456,18 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
                             "\n"
                             "This is also supposed to demonstrate how\n"
                             "to use static controls.\n",
-                           wxPoint(228,25),
-                           wxSize(240, 110)
+                            wxPoint(228,25),
+                            wxSize(240, 110)
                           );
 #endif
-    m_spintext = new wxTextCtrl( panel, -1, "-5", wxPoint(20,160), wxSize(80,-1) );
+    int initialSpinValue = -5;
+    wxString s;
+    s << initialSpinValue;
+    m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) );
 #ifndef wxUSE_SPINBUTTON
     m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) );
     m_spinbutton->SetRange(-10,30);
-    m_spinbutton->SetValue(-5);
+    m_spinbutton->SetValue(initialSpinValue);
 
     m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "Show progress dialog",
                                   wxPoint(208, 159) );
@@ -511,14 +518,16 @@ void MyPanel::OnPageChanging( wxNotebookEvent &event )
     int selOld = event.GetOldSelection();
     if ( selOld == 2 )
     {
-        wxMessageBox("This demonstrates how a program may prevent the "
-                     "page change from taking place - \n the current page will "
-                     "stay the third one", "Control sample",
-                     wxICON_INFORMATION | wxOK);
-
-        event.Veto();
+        if ( wxMessageBox("This demonstrates how a program may prevent the "
+                          "page change from taking place - if you select "
+                          "[No] the current page will stay the third one",
+                          "Control sample",
+                          wxICON_QUESTION | wxYES_NO) != wxYES )
+        {
+            event.Veto();
 
-        return;
+            return;
+        }
     }
 
     *m_text << "Notebook selection is being changed from " << selOld << "\n";
@@ -566,13 +575,13 @@ void MyPanel::OnListBoxButtons( wxCommandEvent &event )
         case ID_LISTBOX_SEL_NUM:
             {
                 m_listbox->SetSelection( 2 );
-               m_lbSelectThis->WarpPointer( 40, 14 );
+                m_lbSelectThis->WarpPointer( 40, 14 );
                 break;
             }
         case ID_LISTBOX_SEL_STR:
             {
                 m_listbox->SetStringSelection( "This" );
-               m_lbSelectNum->WarpPointer( 40, 14 );
+                m_lbSelectNum->WarpPointer( 40, 14 );
                 break;
             }
         case ID_LISTBOX_CLEAR:
@@ -752,6 +761,38 @@ void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
 }
 
 #ifndef wxUSE_SPINBUTTON
+void MyPanel::OnSpinUp( wxSpinEvent &event )
+{
+    wxString value;
+    value.Printf( _T("Spin control up: current = %d\n"),
+                 m_spinbutton->GetValue());
+
+    if ( m_spinbutton->GetValue() > 17 )
+    {
+        value += _T("Preventing the spin button from going above 17.\n");
+
+        event.Veto();
+    }
+
+    m_text->AppendText(value);
+}
+
+void MyPanel::OnSpinDown( wxSpinEvent &event )
+{
+    wxString value;
+    value.Printf( _T("Spin control down: current = %d\n"),
+                 m_spinbutton->GetValue());
+
+    if ( m_spinbutton->GetValue() < -17 )
+    {
+        value += _T("Preventing the spin button from going below -17.\n");
+
+        event.Veto();
+    }
+
+    m_text->AppendText(value);
+}
+
 void MyPanel::OnSpinUpdate( wxSpinEvent &event )
 {
     wxString value;
@@ -777,7 +818,11 @@ void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
                             "An informative message",
                             max,    // range
                             this,   // parent
-                            wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME);
+                            wxPD_CAN_ABORT |
+                            wxPD_APP_MODAL |
+                            wxPD_ELAPSED_TIME |
+                            wxPD_ESTIMATED_TIME |
+                            wxPD_REMAINING_TIME);
 
 
     bool cont = TRUE;
index eccae2934a189fde363b7e6b89660b3c87ec78a8..f08d15caced8e963d9ee77eb6ca50180078a9454 100644 (file)
@@ -119,6 +119,7 @@ long wxDialogBase::CreateTextMessage(const wxArrayString& lines,
 
 wxSize wxDialogBase::GetStandardButtonSize(bool hasCancel)
 {
+#if 0
     int wButton = 0;
     GetTextExtent(_("OK"), &wButton, NULL);
 
@@ -145,6 +146,9 @@ wxSize wxDialogBase::GetStandardButtonSize(bool hasCancel)
     int hButton = (wButton * 23) / 75;
 
     return wxSize(wButton, hButton);
+#else
+    return wxButton::GetDefaultSize();
+#endif
 }
 
 void wxDialogBase::CreateStandardButtons(long wDialog,
index 7ae0ec2eecc283980b8b594bca8336b2925c3d9e..40b75527418d346f463c48335ea00bcf15ee2804 100644 (file)
@@ -65,7 +65,7 @@ bool wxExtDialog::Create( wxWindow *parent, wxWindowID id,
 {
     if (!wxDialog::Create( parent, id, title, pos, size, style, name ))
       return FALSE;
-      
+
     m_extraStyle = extraStyle;
     
     m_clientWindowMargin = 10;
index 307fad45d9478976eac17c093f3c9645958783ee..492f7d6eed849ad2d10beb6c04ee700a1f948481 100644 (file)
@@ -136,15 +136,26 @@ wxSize wxButton::DoGetBestSize()
 /* static */
 wxSize wxButton::GetDefaultSize()
 {
-    // the base unit is the height of the system GUI font
-    int wChar, hChar;
-    wxGetCharSize(0, &wChar, &hChar, NULL);
+    static wxSize s_sizeBtn;
 
-    // the button height is proportional to the height of the font used
-    int hBtn = BUTTON_HEIGHT_FROM_CHAR_HEIGHT(hChar);
+    if ( s_sizeBtn.x == 0 )
+    {
+        wxScreenDC dc;
+        dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+
+        // the size of a standard button in the dialog units is 50x14,
+        // translate this to pixels
+        // NB1: the multipliers come from the Windows convention
+        // NB2: the extra +1/+2 were needed to get the size be the same as the
+        //      size of the buttons in the standard dialog - I don't know how
+        //      this happens, but on my system this size is 75x23 in pixels and
+        //      23*8 isn't even divisible by 14... Would be nice to understand
+        //      why these constants are needed though!
+        s_sizeBtn.x = (50 * (dc.GetCharWidth() + 1))/4;
+        s_sizeBtn.y = ((14 * dc.GetCharHeight()) + 2)/8;
+    }
 
-    // and the width/height ration is 75/23
-    return wxSize((75 * hBtn) / 23, hBtn);
+    return s_sizeBtn;
 }
 
 // ----------------------------------------------------------------------------