]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/numdlgg.cpp
add wxTE_AUTO_SCROLL
[wxWidgets.git] / src / generic / numdlgg.cpp
index 90b4776656c6fbcbd1adf31f0461a72e4c55583b..c6100c88ffcd862523c3bcb89b44c8b0c7ac692a 100644 (file)
     #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
 
 // this is where wxGetNumberFromUser() is declared
@@ -95,80 +100,56 @@ 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();
-
-    int wPrompt, hPrompt;
-    GetTextExtent(prompt, &wPrompt, &hPrompt);
-
-    long wText = wxMax(2*sizeBtn.GetWidth(),
-                       wxMax(wPrompt, sizeText.GetWidth()));
-    long hText = GetStandardTextHeight();
-
-    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;
-
-    // create the controls
-    // -------------------
+    wxBeginBusyCursor();
+    
+    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
+
+    // 1) text message
+    topsizer->Add( CreateTextSizer( message ), 0, wxALL, 10 );
+    
+    // 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(_T("%lu"), m_value);
+    m_spinctrl = new wxTextCtrl(this, -1, valStr, wxDefaultPosition, wxSize( 140, -1 ) );
+    inputsizer->Add( m_spinctrl, 1, wxCENTER | wxLEFT | wxRIGHT, 10 );
+    // add both    
+    topsizer->Add( inputsizer, 1, wxEXPAND | wxLEFT|wxRIGHT, 5 );
+
+#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 );
+    
+    SetSizer( topsizer );
+    SetAutoLayout( TRUE );
 
-    y += 2*LAYOUT_X_MARGIN;
+    topsizer->SetSizeHints( this );
+    topsizer->Fit( this );
 
-    // prompt
-    (void)new wxStaticText(this, -1, prompt,
-                           wxPoint(x, y),
-                           wxSize(wPrompt, hPrompt));
-
-    // 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)
 {
-    if ( (sscanf(m_spinctrl->GetValue(), "%lu", &m_value) != 1) ||
+    if ( (wxSscanf(m_spinctrl->GetValue(), _T("%lu"), &m_value) != 1) ||
          (m_value < m_min) || (m_value > m_max) )
     {
         // not a number or out of range