X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/31528cd3cac75558beef4bce0ba21fd182a808ab..d728116a27b358e5b002337d96268fb51be128eb:/src/generic/numdlgg.cpp?ds=sidebyside diff --git a/src/generic/numdlgg.cpp b/src/generic/numdlgg.cpp index 90b4776656..9fa5693a4d 100644 --- a/src/generic/numdlgg.cpp +++ b/src/generic/numdlgg.cpp @@ -18,8 +18,7 @@ // ---------------------------------------------------------------------------- #ifdef __GNUG__ - #pragma interface "numdlgg.h" - #pragma implementation "numdlgg.h" + #pragma implementation "numdlgg.cpp" #endif // For compilers that support precompilation, includes "wx.h". @@ -29,6 +28,8 @@ #pragma hdrstop #endif +#if wxUSE_NUMBERDLG + #ifndef WX_PRECOMP #include @@ -38,10 +39,24 @@ #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 + +#if !defined(__WIN16__) && wxUSE_SPINCTRL +#include "wx/spinctrl.h" #endif // 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 +79,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 +110,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); + wxBeginBusyCursor(); - wxSize sizeBtn = GetStandardButtonSize(); + wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); - int wPrompt, hPrompt; - GetTextExtent(prompt, &wPrompt, &hPrompt); + // 1) text message + topsizer->Add( CreateTextSizer( message ), 0, wxALL, 10 ); - 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; + // 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 ) ); +#if !defined(__WIN16__) && wxUSE_SPINCTRL + 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 +179,7 @@ void wxNumberEntryDialog::OnOK(wxCommandEvent& event) EndModal(wxID_OK); } -void wxNumberEntryDialog::OnCancel(wxCommandEvent& event) +void wxNumberEntryDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) { m_value = -1; @@ -206,3 +207,5 @@ long wxGetNumberFromUser(const wxString& msg, return dialog.GetValue(); } + +#endif // wxUSE_NUMBERDLG