X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e7a6b030c35cea910af2cfd7f1b20f2518b76a5..20125017a4bccd0920ee21e178950b0de0e4d63b:/samples/validate/validate.cpp diff --git a/samples/validate/validate.cpp b/samples/validate/validate.cpp index 3a0166a8ae..82736d8a79 100644 --- a/samples/validate/validate.cpp +++ b/samples/validate/validate.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // See online help for an overview of validators. In general, a @@ -31,8 +31,9 @@ #include "wx/sizer.h" #include "wx/valgen.h" #include "wx/valtext.h" +#include "wx/valnum.h" -#ifndef __WXMSW__ +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #endif @@ -61,10 +62,12 @@ MyData::MyData() // will complain because spaces aren't alpha. Note that validation // is performed only when 'OK' is pressed. m_string = wxT("Spaces are invalid here"); + m_string2 = "Valid text"; m_listbox_choices.Add(0); + m_intValue = 0; + m_doubleValue = 12354.31; } - // ---------------------------------------------------------------------------- // MyComboBoxValidator // ---------------------------------------------------------------------------- @@ -136,7 +139,7 @@ bool MyApp::OnInit() MyFrame *frame = new MyFrame((wxFrame *) NULL, wxT("Validator Test"), 50, 50, 300, 250); frame->Show(true); - SetTopWindow(frame); + return true; } @@ -158,11 +161,11 @@ MyFrame::MyFrame(wxFrame *frame, const wxString&title, int x, int y, int w, int // Create a listbox to display the validated data. m_listbox = new wxListBox(this, wxID_ANY); - m_listbox->Append(wxString(_T("Try 'File|Test' to see how validators work."))); + m_listbox->Append(wxString(wxT("Try 'File|Test' to see how validators work."))); wxMenu *file_menu = new wxMenu; - file_menu->Append(VALIDATE_TEST_DIALOG, wxT("&Test"), wxT("Demonstrate validators")); + file_menu->Append(VALIDATE_TEST_DIALOG, wxT("&Test dialog..."), wxT("Demonstrate validators")); file_menu->AppendCheckItem(VALIDATE_TOGGLE_BELL, wxT("&Bell on error"), wxT("Toggle bell on error")); file_menu->AppendSeparator(); file_menu->Append(wxID_EXIT, wxT("E&xit")); @@ -173,7 +176,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString&title, int x, int y, int w, int // All validators share a common (static) flag that controls // whether they beep on error. Here we turn it off: - wxValidator::SetBellOnError(m_silent); + wxValidator::SuppressBellOnError(m_silent); file_menu->Check(VALIDATE_TOGGLE_BELL, !wxValidator::IsSilent()); #if wxUSE_STATUSBAR @@ -202,24 +205,29 @@ void MyFrame::OnTestDialog(wxCommandEvent& WXUNUSED(event)) // automatically transferred to the variables we specified // when we created the validators. m_listbox->Clear(); - m_listbox->Append(wxString(_T("string: ")) + g_data.m_string); + m_listbox->Append(wxString(wxT("string: ")) + g_data.m_string); + m_listbox->Append(wxString(wxT("string #2: ")) + g_data.m_string2); + for(unsigned int i = 0; i < g_data.m_listbox_choices.GetCount(); ++i) { int j = g_data.m_listbox_choices[i]; - m_listbox->Append(wxString(_T("listbox choice(s): ")) + g_listbox_choices[j]); + m_listbox->Append(wxString(wxT("listbox choice(s): ")) + g_listbox_choices[j]); } - wxString checkbox_state(g_data.m_checkbox_state ? _T("checked") : _T("unchecked")); - m_listbox->Append(wxString(_T("checkbox: ")) + checkbox_state); - m_listbox->Append(wxString(_T("combobox: ")) + g_data.m_combobox_choice); - m_listbox->Append(wxString(_T("radiobox: ")) + g_radiobox_choices[g_data.m_radiobox_choice]); + wxString checkbox_state(g_data.m_checkbox_state ? wxT("checked") : wxT("unchecked")); + m_listbox->Append(wxString(wxT("checkbox: ")) + checkbox_state); + m_listbox->Append(wxString(wxT("combobox: ")) + g_data.m_combobox_choice); + m_listbox->Append(wxString(wxT("radiobox: ")) + g_radiobox_choices[g_data.m_radiobox_choice]); + + m_listbox->Append(wxString::Format("integer value: %d", g_data.m_intValue)); + m_listbox->Append(wxString::Format("double value: %.3f", g_data.m_doubleValue)); } } void MyFrame::OnToggleBell(wxCommandEvent& event) { m_silent = !m_silent; - wxValidator::SetBellOnError(m_silent); + wxValidator::SuppressBellOnError(m_silent); event.Skip(); } @@ -234,7 +242,7 @@ MyDialog::MyDialog( wxWindow *parent, const wxString& title, // setup the flex grid sizer // ------------------------- - wxFlexGridSizer *flexgridsizer = new wxFlexGridSizer(2, 2, 5, 5); + wxFlexGridSizer *flexgridsizer = new wxFlexGridSizer(3, 2, 5, 5); // Create and add controls to sizers. Note that a member variable // of g_data is bound to each control upon construction. There is @@ -246,29 +254,41 @@ MyDialog::MyDialog( wxWindow *parent, const wxString& title, m_text = new wxTextCtrl(this, VALIDATE_TEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxTextValidator(wxFILTER_ALPHA, &g_data.m_string)); + m_text->SetToolTip("uses wxTextValidator with wxFILTER_ALPHA"); flexgridsizer->Add(m_text, 1, wxGROW); - // This wxCheckBox* doesn't need to be assigned to any pointer - // because we don't use it elsewhere--it can be anonymous. - // We don't need any such pointer to query its state, which - // can be gotten directly from g_data. - flexgridsizer->Add(new wxCheckBox(this, VALIDATE_CHECK, wxT("Sample checkbox"), - wxPoint(130, 10), wxSize(120, wxDefaultCoord), 0, - wxGenericValidator(&g_data.m_checkbox_state)), - 1, wxALIGN_CENTER); + + // Now set a wxTextValidator with an explicit list of characters NOT allowed: + wxTextValidator textVal(wxFILTER_EMPTY|wxFILTER_EXCLUDE_LIST, &g_data.m_string2); + textVal.SetCharExcludes("bcwyz"); + wxTextCtrl* txt2 = + new wxTextCtrl(this, VALIDATE_TEXT2, wxEmptyString, + wxDefaultPosition, wxDefaultSize, 0, textVal); + txt2->SetToolTip("uses wxTextValidator with wxFILTER_EMPTY|wxFILTER_EXCLUDE_LIST (to exclude 'bcwyz')"); + flexgridsizer->Add(txt2, 1, wxGROW); flexgridsizer->Add(new wxListBox((wxWindow*)this, VALIDATE_LIST, - wxPoint(10, 30), wxSize(120, wxDefaultCoord), + wxDefaultPosition, wxDefaultSize, 3, g_listbox_choices, wxLB_MULTIPLE, wxGenericValidator(&g_data.m_listbox_choices)), 1, wxGROW); m_combobox = new wxComboBox(this, VALIDATE_COMBO, wxEmptyString, - wxPoint(130, 30), wxSize(120, wxDefaultCoord), + wxDefaultPosition, wxDefaultSize, 3, g_combobox_choices, 0L, MyComboBoxValidator(&g_data.m_combobox_choice)); + m_combobox->SetToolTip("uses a custom validator (MyComboBoxValidator)"); flexgridsizer->Add(m_combobox, 1, wxALIGN_CENTER); + // This wxCheckBox* doesn't need to be assigned to any pointer + // because we don't use it elsewhere--it can be anonymous. + // We don't need any such pointer to query its state, which + // can be gotten directly from g_data. + flexgridsizer->Add(new wxCheckBox(this, VALIDATE_CHECK, wxT("Sample checkbox"), + wxDefaultPosition, wxDefaultSize, 0, + wxGenericValidator(&g_data.m_checkbox_state)), + 1, wxALIGN_CENTER|wxALL, 15); + flexgridsizer->AddGrowableCol(0); flexgridsizer->AddGrowableCol(1); flexgridsizer->AddGrowableRow(1); @@ -282,6 +302,49 @@ MyDialog::MyDialog( wxWindow *parent, const wxString& title, btn->AddButton(new wxButton(this, wxID_CANCEL)); btn->Realize(); + // setup a sizer with the controls for numeric validators + // ------------------------------------------------------ + + wxIntegerValidator valInt(&g_data.m_intValue, + wxNUM_VAL_THOUSANDS_SEPARATOR | + wxNUM_VAL_ZERO_AS_BLANK); + valInt.SetMin(0); // Only allow positive numbers + + m_numericTextInt = new wxTextCtrl + ( + this, + wxID_ANY, + "", + wxDefaultPosition, + wxDefaultSize, + wxTE_RIGHT, + valInt + ); + m_numericTextInt->SetToolTip("uses wxIntegerValidator to accept positive " + "integers only"); + + m_numericTextDouble = new wxTextCtrl + ( + this, + wxID_ANY, + "", + wxDefaultPosition, + wxDefaultSize, + wxTE_RIGHT, + wxMakeFloatingPointValidator + ( + 3, + &g_data.m_doubleValue, + wxNUM_VAL_THOUSANDS_SEPARATOR | + wxNUM_VAL_NO_TRAILING_ZEROES + ) + ); + m_numericTextDouble->SetToolTip("uses wxFloatingPointValidator with 3 decimals"); + wxBoxSizer *numSizer = new wxBoxSizer( wxHORIZONTAL ); + numSizer->Add( m_numericTextInt, 1, wxALL, 10 ); + numSizer->Add( m_numericTextDouble, 1, wxALL, 10 ); + + // setup the main sizer // -------------------- @@ -291,11 +354,13 @@ MyDialog::MyDialog( wxWindow *parent, const wxString& title, mainsizer->Add(flexgridsizer, 1, wxGROW | wxALL, 10); mainsizer->Add(new wxRadioBox((wxWindow*)this, VALIDATE_RADIO, wxT("Pick a color"), - wxPoint(10, 100), wxDefaultSize, + wxDefaultPosition, wxDefaultSize, 3, g_radiobox_choices, 1, wxRA_SPECIFY_ROWS, wxGenericValidator(&g_data.m_radiobox_choice)), 0, wxGROW | wxLEFT|wxBOTTOM|wxRIGHT, 10); + mainsizer->Add( numSizer, 0, wxGROW | wxALL ); + mainsizer->Add(btn, 0, wxGROW | wxALL, 10); SetSizer(mainsizer);