void wxGridCellNumberEditor::StartingKey(wxKeyEvent& event) { int keycode = event.GetKeyCode(); if ( !HasRange() ) { if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-') { wxGridCellTextEditor::StartingKey(event); // skip Skip() below return; } } #if wxUSE_SPINCTRL else { if ( wxIsdigit(keycode) ) { wxSpinCtrl* spin = (wxSpinCtrl*)m_control; spin->SetValue(keycode - '0'); spin->SetSelection(1,1); return; } } #endif event.Skip(); }
void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid) { // first get the value wxGridTableBase *table = grid->GetTable(); if ( table->CanGetValueAs(row, col, wxGRID_VALUE_NUMBER) ) { m_value = table->GetValueAsLong(row, col); } else { m_value = 0; wxString sValue = table->GetValue(row, col); if (! sValue.ToLong(&m_value) && ! sValue.empty()) { wxFAIL_MSG( wxT("this cell doesn't have numeric value") ); return; } } #if wxUSE_SPINCTRL if ( HasRange() ) { Spin()->SetValue((int)m_value); Spin()->SetFocus(); } else #endif { DoBeginEdit(GetString()); } }
void wxGridCellNumberEditor::Create(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler) { #if wxUSE_SPINCTRL if ( HasRange() ) { // create a spin ctrl m_control = new wxSpinCtrl(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, m_min, m_max); wxGridCellEditor::Create(parent, id, evtHandler); } else #endif { // just a text control wxGridCellTextEditor::Create(parent, id, evtHandler); #if wxUSE_VALIDATORS Text()->SetValidator(wxIntegerValidator<int>()); #endif } }
void InputSystem::AddRangeHandler(uint32_t range, InputRangeHandler handler) { if (HasRange(range)) { mRangeHandlers[range] = handler; } }
void wxGridCellNumberEditor::Reset() { #if wxUSE_SPINCTRL if ( HasRange() ) { Spin()->SetValue((int)m_value); } else #endif { DoReset(GetString()); } }
bool wxGridCellNumberEditor::EndEdit(int WXUNUSED(row), int WXUNUSED(col), const wxGrid* WXUNUSED(grid), const wxString& oldval, wxString *newval) { long value = 0; wxString text; #if wxUSE_SPINCTRL if ( HasRange() ) { value = Spin()->GetValue(); if ( value == m_value ) return false; text.Printf(wxT("%ld"), value); } else // using unconstrained input #endif // wxUSE_SPINCTRL { text = Text()->GetValue(); if ( text.empty() ) { if ( oldval.empty() ) return false; } else // non-empty text now (maybe 0) { if ( !text.ToLong(&value) ) return false; // if value == m_value == 0 but old text was "" and new one is // "0" something still did change if ( value == m_value && (value || !oldval.empty()) ) return false; } } m_value = value; if ( newval ) *newval = text; return true; }
// return the value in the spin control if it is there (the text control otherwise) wxString wxGridCellNumberEditor::GetValue() const { wxString s; #if wxUSE_SPINCTRL if ( HasRange() ) { long value = Spin()->GetValue(); s.Printf(wxT("%ld"), value); } else #endif { s = Text()->GetValue(); } return s; }