]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/numdlgg.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / generic / numdlgg.cpp
index 90b4776656c6fbcbd1adf31f0461a72e4c55583b..d40d36daad16116194e976deea898416cf81b8e9 100644 (file)
@@ -18,8 +18,8 @@
 // ----------------------------------------------------------------------------
 
 #ifdef __GNUG__
-    #pragma interface "numdlgg.h"
-    #pragma implementation "numdlgg.h"
+    #pragma interface "numdlgg.cpp"
+    #pragma implementation "numdlgg.cpp"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
     #include "wx/stattext.h"
     #include "wx/textctrl.h"
     #include "wx/intl.h"
+    #include "wx/sizer.h"
 #endif
 
+#if wxUSE_STATLINE
+  #include "wx/statline.h"
+#endif
+
+#include "wx/spinctrl.h"
+
 // this is where wxGetNumberFromUser() is declared
-#include "wx/generic/textdlgg.h"
+#include "wx/textdlg.h"
+
+#if !wxUSE_SPINCTRL
+    // wxTextCtrl will do instead of wxSpinCtrl if we don't have it
+    #define wxSpinCtrl wxTextCtrl
+#endif
 
 // ----------------------------------------------------------------------------
 // private classes
@@ -64,7 +76,7 @@ public:
     void OnCancel(wxCommandEvent& event);
 
 protected:
-    wxTextCtrl *m_spinctrl; // TODO replace it with wxSpinCtrl once it's done
+    wxSpinCtrl *m_spinctrl;
 
     long m_value, m_min, m_max;
 
@@ -95,81 +107,67 @@ wxNumberEntryDialog::wxNumberEntryDialog(wxWindow *parent,
                                          const wxPoint& pos)
                    : wxDialog(parent, -1, caption,
                               pos, wxDefaultSize,
-                              wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
+                              wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL )
 {
-    // init members
-    // ------------
-
     m_value = value;
     m_max = max;
     m_min = min;
 
-    // calculate the sizes
-    // -------------------
-
-    wxArrayString lines;
-    wxSize sizeText = SplitTextMessage(message, &lines);
-
-    wxSize sizeBtn = GetStandardButtonSize();
+    wxBeginBusyCursor();
 
-    int wPrompt, hPrompt;
-    GetTextExtent(prompt, &wPrompt, &hPrompt);
+    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
 
-    long wText = wxMax(2*sizeBtn.GetWidth(),
-                       wxMax(wPrompt, sizeText.GetWidth()));
-    long hText = GetStandardTextHeight();
+    // 1) text message
+    topsizer->Add( CreateTextSizer( message ), 0, wxALL, 10 );
 
-    long wDialog = 5*LAYOUT_X_MARGIN + wText + wPrompt;
-    long hDialog = 2*LAYOUT_Y_MARGIN +
-                   sizeText.GetHeight() * lines.GetCount() +
-                   2*LAYOUT_Y_MARGIN +
-                   hText +
-                   2*LAYOUT_Y_MARGIN +
-                   sizeBtn.GetHeight() +
-                   2*LAYOUT_Y_MARGIN;
+    // 2) prompt and text ctrl
+    wxBoxSizer *inputsizer = new wxBoxSizer( wxHORIZONTAL );
+    // prompt if any
+    if (!prompt.IsEmpty())
+        inputsizer->Add( new wxStaticText( this, -1, prompt ), 0, wxCENTER | wxLEFT, 10 );
+    // spin ctrl
+    wxString valStr;
+    valStr.Printf(wxT("%lu"), m_value);
+    m_spinctrl = new wxSpinCtrl(this, -1, valStr, wxDefaultPosition, wxSize( 140, -1 ) );
+#ifndef __WIN16__
+    m_spinctrl->SetRange((int)m_min, (int)m_max);
+#endif
+    inputsizer->Add( m_spinctrl, 1, wxCENTER | wxLEFT | wxRIGHT, 10 );
+    // add both
+    topsizer->Add( inputsizer, 1, wxEXPAND | wxLEFT|wxRIGHT, 5 );
 
-    // create the controls
-    // -------------------
+#if wxUSE_STATLINE
+    // 3) static line
+    topsizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
+#endif
 
-    // message
-    long x = 2*LAYOUT_X_MARGIN;
-    long y = CreateTextMessage(lines,
-                               wxPoint(x, 2*LAYOUT_Y_MARGIN),
-                               sizeText);
+    // 4) buttons
+    topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxCENTRE | wxALL, 10 );
 
-    y += 2*LAYOUT_X_MARGIN;
+    SetSizer( topsizer );
+    SetAutoLayout( TRUE );
 
-    // prompt
-    (void)new wxStaticText(this, -1, prompt,
-                           wxPoint(x, y),
-                           wxSize(wPrompt, hPrompt));
+    topsizer->SetSizeHints( this );
+    topsizer->Fit( this );
 
-    // spin ctrl
-    wxString valStr;
-    valStr.Printf("%lu", m_value);
-    m_spinctrl = new wxTextCtrl(this, -1, valStr,
-                                wxPoint(x + wPrompt + LAYOUT_X_MARGIN, y),
-                                wxSize(wText, hText));
-    y += hText + 2*LAYOUT_X_MARGIN;
-
-    // and buttons
-    CreateStandardButtons(wDialog, y, sizeBtn.GetWidth(), sizeBtn.GetHeight());
-
-    // set the dialog size and position
-    SetClientSize(wDialog, hDialog);
-    if ( pos == wxDefaultPosition )
-    {
-        // centre the dialog if no explicit position given
-        Centre(wxBOTH | wxCENTER_FRAME);
-    }
+    Centre( wxBOTH );
 
     m_spinctrl->SetFocus();
+
+    wxEndBusyCursor();
 }
 
-void wxNumberEntryDialog::OnOK(wxCommandEvent& event)
+void wxNumberEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event))
 {
-    if ( (sscanf(m_spinctrl->GetValue(), "%lu", &m_value) != 1) ||
-         (m_value < m_min) || (m_value > m_max) )
+#if !wxUSE_SPINCTRL
+    wxString tmp = m_spinctrl->GetValue();
+    if ( wxSscanf(tmp, _T("%ld"), &m_value) != 1 )
+        m_value = -1;
+    else
+#else
+    m_value = m_spinctrl->GetValue();
+#endif
+    if ( m_value < m_min || m_value > m_max )
     {
         // not a number or out of range
         m_value = -1;
@@ -178,7 +176,7 @@ void wxNumberEntryDialog::OnOK(wxCommandEvent& event)
     EndModal(wxID_OK);
 }
 
-void wxNumberEntryDialog::OnCancel(wxCommandEvent& event)
+void wxNumberEntryDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
 {
     m_value = -1;