////////////////////////////////////////////////////////////////////// // This file is part of Remere's Map Editor ////////////////////////////////////////////////////////////////////// // Remere's Map Editor is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Remere's Map Editor is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . ////////////////////////////////////////////////////////////////////// #include "main.h" #include "numbertextctrl.h" BEGIN_EVENT_TABLE(NumberTextCtrl, wxTextCtrl) EVT_KILL_FOCUS(NumberTextCtrl::OnKillFocus) EVT_TEXT_ENTER(wxID_ANY, NumberTextCtrl::OnTextEnter) END_EVENT_TABLE() NumberTextCtrl::NumberTextCtrl(wxWindow* parent, wxWindowID id, long value, long minvalue, long maxvalue, const wxPoint& pos, const wxSize& sz, long style, const wxString& name) : wxTextCtrl(parent, id, (wxString() << value), pos, sz, style, wxTextValidator(wxFILTER_NUMERIC), name), minval(minvalue), maxval(maxvalue), lastval(value) { //// } NumberTextCtrl::NumberTextCtrl(wxWindow* parent, wxWindowID id, long value, long minvalue, long maxvalue, long style, const wxString& name, const wxPoint& pos, const wxSize& sz) : wxTextCtrl(parent, id, (wxString() << value), pos, sz, style, wxTextValidator(wxFILTER_NUMERIC), name), minval(minvalue), maxval(maxvalue), lastval(value) { //// } NumberTextCtrl::~NumberTextCtrl() { //// } void NumberTextCtrl::OnKillFocus(wxFocusEvent& evt) { CheckRange(); evt.Skip(); } void NumberTextCtrl::OnTextEnter(wxCommandEvent& evt) { CheckRange(); } void NumberTextCtrl::SetIntValue(long value) { wxString sv; sv << value; // Will generate events SetValue(sv); } long NumberTextCtrl::GetIntValue() { long l; if(GetValue().ToLong(&l)) return l; return 0; } void NumberTextCtrl::SetMinValue(long value) { if(value == minval) return; minval = value; CheckRange(); } void NumberTextCtrl::SetMaxValue(long value) { if(value == maxval) return; maxval = value; CheckRange(); } void NumberTextCtrl::CheckRange() { wxString text = GetValue(); wxString ntext; for(size_t s = 0; s < text.size(); ++s) { if(text[s] >= '0' && text[s] <= '9') ntext.Append(text[s]); } // Check that value is in range long v; if(ntext.size() != 0 && ntext.ToLong(&v)) { if(v < minval) v = minval; else if(v > maxval) v = maxval; ntext.clear(); ntext << v; lastval = v; } else { ntext.clear(); ntext << lastval; } // Check if there was any change if(ntext != text) { // ChangeValue doesn't generate events ChangeValue(ntext); } }