X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b64845917a8aa2e6b6186ba6bd291debc2afc195..bbe28fbb8364c150e9e2dae9bafb05921aa5d63d:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 6590754456..d0288aebc0 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -953,7 +953,6 @@ void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid) bool wxGridCellNumberEditor::EndEdit(int row, int col, wxGrid* grid) { - bool changed; long value = 0; wxString text; @@ -961,26 +960,40 @@ bool wxGridCellNumberEditor::EndEdit(int row, int col, if ( HasRange() ) { value = Spin()->GetValue(); - changed = value != m_valueOld; - if (changed) - text = wxString::Format(wxT("%ld"), value); + if ( value == m_valueOld ) + return false; + + text.Printf(wxT("%ld"), value); } - else -#endif + else // using unconstrained input +#endif // wxUSE_SPINCTRL { + const wxString textOld(grid->GetCellValue(row, col)); text = Text()->GetValue(); - changed = (text.empty() || text.ToLong(&value)) && (value != m_valueOld); - } + if ( text.empty() ) + { + if ( textOld.empty() ) + return false; + } + else // non-empty text now (maybe 0) + { + if ( !text.ToLong(&value) ) + return false; - if ( changed ) - { - if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER)) - grid->GetTable()->SetValueAsLong(row, col, value); - else - grid->GetTable()->SetValue(row, col, text); + // if value == m_valueOld == 0 but old text was "" and new one is + // "0" something still did change + if ( value == m_valueOld && (value || !textOld.empty()) ) + return false; + } } - return changed; + wxGridTableBase * const table = grid->GetTable(); + if ( table->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER) ) + table->SetValueAsLong(row, col, value); + else + table->SetValue(row, col, text); + + return true; } void wxGridCellNumberEditor::Reset()