X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/675a9c0de58fcbe045a22b2d00a0b6c3c4f6da14..4f433feff9251ded00bba26b633f93e660cd44c4:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 81f8324414..395e94ac5d 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -956,9 +956,9 @@ bool wxGridCellNumberEditor::IsAcceptedKey(wxKeyEvent& event) void wxGridCellNumberEditor::StartingKey(wxKeyEvent& event) { + int keycode = event.GetKeyCode(); if ( !HasRange() ) { - int keycode = event.GetKeyCode(); if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-') { wxGridCellTextEditor::StartingKey(event); @@ -967,7 +967,18 @@ void wxGridCellNumberEditor::StartingKey(wxKeyEvent& event) 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(); } @@ -1092,8 +1103,12 @@ void wxGridCellFloatEditor::StartingKey(wxKeyEvent& event) tmpbuf[0] = (char) keycode; tmpbuf[1] = '\0'; wxString strbuf(tmpbuf, *wxConvCurrent); +#if wxUSE_INTL bool is_decimal_point = ( strbuf == wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER) ); +#else + bool is_decimal_point = ( strbuf == _T(".") ); +#endif if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-' || is_decimal_point ) { @@ -1166,9 +1181,13 @@ bool wxGridCellFloatEditor::IsAcceptedKey(wxKeyEvent& event) tmpbuf[0] = (char) keycode; tmpbuf[1] = '\0'; wxString strbuf(tmpbuf, *wxConvCurrent); +#if wxUSE_INTL bool is_decimal_point = ( strbuf == wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER) ); +#else + bool is_decimal_point = ( strbuf == _T(".") ); +#endif if ( (keycode < 128) && (wxIsdigit(keycode) || tolower(keycode) == 'e' || is_decimal_point || keycode == '+' || keycode == '-') ) @@ -2123,8 +2142,8 @@ void wxGridCellAttr::MergeWith(wxGridCellAttr *mergefrom) mergefrom->GetAlignment( &hAlign, &vAlign); SetAlignment(hAlign, vAlign); } - - mergefrom->GetSize( &m_sizeRows, &m_sizeCols ); + if ( !HasSize() && mergefrom->HasSize() ) + mergefrom->GetSize( &m_sizeRows, &m_sizeCols ); // Directly access member functions as GetRender/Editor don't just return // m_renderer/m_editor @@ -2895,6 +2914,7 @@ wxGridCellAttr *wxGridTableBase::GetAttr(int row, int col, wxGridCellAttr::wxAtt return (wxGridCellAttr *)NULL; } + void wxGridTableBase::SetAttr(wxGridCellAttr* attr, int row, int col) { if ( m_attrProvider ) @@ -3750,6 +3770,9 @@ void wxGridWindow::ScrollWindow( int dx, int dy, const wxRect *rect ) void wxGridWindow::OnMouseEvent( wxMouseEvent& event ) { + if (event.ButtonDown(wxMOUSE_BTN_LEFT) && FindFocus() != this) + SetFocus(); + m_owner->ProcessGridCellMouseEvent( event ); } @@ -7138,8 +7161,10 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) int topRow = internalYToRow(top); int rightCol = internalXToCol(right); int bottomRow = internalYToRow(bottom); - wxRegion clippedcells(0, 0, cw, ch); +#ifndef __WXMAC__ + // CS: I don't know why suddenly unscrolled coordinates are used for clipping + wxRegion clippedcells(0, 0, cw, ch); int i, j, cell_rows, cell_cols; wxRect rect; @@ -7163,6 +7188,30 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & WXUNUSED(reg) ) } } } +#else + wxRegion clippedcells( left , top, right - left, bottom - top); + + int i, j, cell_rows, cell_cols; + wxRect rect; + + for (j=topRow; j 1) || (cell_cols > 1)) + { + rect = CellToRect(j,i); + clippedcells.Subtract(rect); + } + else if ((cell_rows < 0) || (cell_cols < 0)) + { + rect = CellToRect(j+cell_rows, i+cell_cols); + clippedcells.Subtract(rect); + } + } + } +#endif dc.SetClippingRegion( clippedcells ); dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) ); @@ -7221,11 +7270,11 @@ void wxGrid::DrawRowLabels( wxDC& dc ,const wxArrayInt& rows) void wxGrid::DrawRowLabel( wxDC& dc, int row ) { - if ( GetRowHeight(row) <= 0 ) + if ( GetRowHeight(row) <= 0 || m_rowLabelWidth <= 0 ) return; wxRect rect; -#ifdef __WXGTK__ +#ifdef __WXGTK20__ rect.SetX( 1 ); rect.SetY( GetRowTop(row) + 1 ); rect.SetWidth( m_rowLabelWidth - 2 ); @@ -7283,13 +7332,13 @@ void wxGrid::DrawColLabels( wxDC& dc,const wxArrayInt& cols ) void wxGrid::DrawColLabel( wxDC& dc, int col ) { - if ( GetColWidth(col) <= 0 ) + if ( GetColWidth(col) <= 0 || m_colLabelHeight <= 0 ) return; int colLeft = GetColLeft(col); wxRect rect; -#ifdef __WXGTK__ +#ifdef __WXGTK20__ rect.SetX( colLeft + 1 ); rect.SetY( 1 ); rect.SetWidth( GetColWidth(col) - 2 ); @@ -7780,6 +7829,10 @@ void wxGrid::HideCellEditControl() wxRect rect( CellToRect(row, col) ); CalcScrolledPosition(rect.x, rect.y, &rect.x, &rect.y ); rect.width = m_gridWin->GetClientSize().GetWidth() - rect.x; +#ifdef __WXMAC__ + // ensure that the pixels under the focus ring get refreshed as well + rect.Inflate(10,10); +#endif m_gridWin->Refresh( false, &rect ); } }