void NumValidatorTestCase::NoTrailingZeroes() { // We need a locale with point as decimal separator. wxLocale loc(wxLANGUAGE_ENGLISH_UK, wxLOCALE_DONT_LOAD_DEFAULT); double value = 1.2; m_text->SetValidator( wxMakeFloatingPointValidator(3, &value, wxNUM_VAL_NO_TRAILING_ZEROES)); wxValidator * const val = m_text->GetValidator(); CPPUNIT_ASSERT( val->TransferToWindow() ); CPPUNIT_ASSERT_EQUAL( "1.2", m_text->GetValue() ); value = 1.234; CPPUNIT_ASSERT( val->TransferToWindow() ); CPPUNIT_ASSERT_EQUAL( "1.234", m_text->GetValue() ); }
MyDialog::MyDialog( wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long WXUNUSED(style) ) : wxDialog(parent, VALIDATE_DIALOG_ID, title, pos, size, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { // setup the flex grid sizer // ------------------------- 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 // currently no easy way to substitute a different validator or a // different transfer variable after a control has been constructed. // Pointers to some of these controls are saved in member variables // so that we can use them elsewhere, like this one. 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); // 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, wxDefaultPosition, wxDefaultSize, 3, g_listbox_choices, wxLB_MULTIPLE, wxGenericValidator(&g_data.m_listbox_choices)), 1, wxGROW); m_combobox = new wxComboBox(this, VALIDATE_COMBO, wxEmptyString, 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); // setup the button sizer // ---------------------- wxStdDialogButtonSizer *btn = new wxStdDialogButtonSizer(); btn->AddButton(new wxButton(this, wxID_OK)); btn->AddButton(new wxButton(this, wxID_CANCEL)); btn->Realize(); // setup a sizer with the controls for numeric validators // ------------------------------------------------------ wxIntegerValidator<int> 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 // -------------------- wxBoxSizer *mainsizer = new wxBoxSizer( wxVERTICAL ); mainsizer->Add(flexgridsizer, 1, wxGROW | wxALL, 10); mainsizer->Add(new wxRadioBox((wxWindow*)this, VALIDATE_RADIO, wxT("Pick a color"), 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); mainsizer->SetSizeHints(this); // make the dialog a bit bigger than its minimal size: SetSize(GetBestSize()*1.5); }