X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/584ad2a32fec156c6049145d7ece9a33213aea28..781bdbb410f421a1c93655217f8729160b6f4aa5:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 9ad4536bc8..13be5b7883 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -41,6 +41,7 @@ #include "wx/checkbox.h" #include "wx/combobox.h" #include "wx/valtext.h" + #include "wx/intl.h" #endif #include "wx/textfile.h" @@ -1067,7 +1068,13 @@ void wxGridCellFloatEditor::Reset() void wxGridCellFloatEditor::StartingKey(wxKeyEvent& event) { int keycode = event.GetKeyCode(); - if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-' || keycode == '.' + char tmpbuf[2]; + tmpbuf[0] = (char) keycode; + tmpbuf[1] = '\0'; + bool is_decimal_point = ( wxString(tmpbuf, *wxConvCurrent) == + wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER) ); + if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-' + || is_decimal_point || keycode == WXK_NUMPAD0 || keycode == WXK_NUMPAD1 || keycode == WXK_NUMPAD2 @@ -1166,11 +1173,21 @@ bool wxGridCellFloatEditor::IsAcceptedKey(wxKeyEvent& event) case WXK_NUMPAD_DECIMAL: return TRUE; - default: - // additionally accept 'e' as in '1e+6' + default: + { + // additionally accept 'e' as in '1e+6', also '-', '+', and '.' + char tmpbuf[2]; + tmpbuf[0] = (char) keycode; + tmpbuf[1] = '\0'; + bool is_decimal_point = + ( wxString(tmpbuf, *wxConvCurrent) == + wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, + wxLOCALE_CAT_NUMBER) ); if ( (keycode < 128) && - (wxIsdigit(keycode) || tolower(keycode) == 'e') ) + (wxIsdigit(keycode) || tolower(keycode) == 'e' || + is_decimal_point || keycode == '+' || keycode == '-') ) return TRUE; + } } } @@ -2983,7 +3000,7 @@ wxString wxGridTableBase::GetColLabelValue( int col ) unsigned int i, n; for ( n = 1; ; n++ ) { - s += (_T('A') + (wxChar)( col%26 )); + s += (wxChar) (_T('A') + (wxChar)( col%26 )); col = col/26 - 1; if ( col < 0 ) break; } @@ -3462,7 +3479,7 @@ END_EVENT_TABLE() wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE ) + : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE|wxFULL_REPAINT_ON_RESIZE ) { m_owner = parent; } @@ -3528,7 +3545,7 @@ END_EVENT_TABLE() wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE ) + : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE|wxFULL_REPAINT_ON_RESIZE ) { m_owner = parent; } @@ -3593,7 +3610,7 @@ END_EVENT_TABLE() wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE ) + : wxWindow( parent, id, pos, size, wxWANTS_CHARS|wxBORDER_NONE|wxFULL_REPAINT_ON_RESIZE ) { m_owner = parent; } @@ -3665,7 +3682,7 @@ wxGridWindow::wxGridWindow( wxGrid *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ) - : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxCLIP_CHILDREN, + : wxWindow( parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE | wxCLIP_CHILDREN|wxFULL_REPAINT_ON_RESIZE, wxT("grid window") ) { @@ -6263,8 +6280,7 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) else { // at the bottom of a column - HideCellEditControl(); - SaveEditControlValue(); + DisableCellEditControl(); } } break; @@ -6283,8 +6299,7 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) else { // at left of grid - HideCellEditControl(); - SaveEditControlValue(); + DisableCellEditControl(); } } else @@ -6296,8 +6311,7 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) else { // at right of grid - HideCellEditControl(); - SaveEditControlValue(); + DisableCellEditControl(); } } break; @@ -6446,7 +6460,6 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords ) if ( m_currentCellCoords != wxGridNoCellCoords ) { - HideCellEditControl(); DisableCellEditControl(); if ( IsVisible( m_currentCellCoords, FALSE ) ) @@ -9507,6 +9520,10 @@ void wxGrid::AutoSizeColOrRow( int colOrRow, bool setAsMin, bool column ) { wxClientDC dc(m_gridWin); + //Cancel editting of cell + HideCellEditControl(); + SaveEditControlValue(); + // init both of them to avoid compiler warnings, even if weo nly need one int row = -1, col = -1;