X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c6707d16fe619ce3a2146cb1f7cc00527a7bd966..cfce733e1732b46ebb076ef10fae5a7d552dc2f9:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 6493205259..8cda3b1549 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3074,10 +3074,14 @@ bool wxGridStringTable::DeleteRows( size_t pos, size_t numRows ) if ( pos >= curNumRows ) { - wxString errmsg; - errmsg.Printf(wxT("Called wxGridStringTable::DeleteRows(pos=%d, N=%d)\nPos value is invalid for present table with %d rows"), - pos, numRows, curNumRows ); - wxFAIL_MSG( errmsg ); + wxFAIL_MSG( wxString::Format + ( + wxT("Called wxGridStringTable::DeleteRows(pos=%lu, N=%lu)\nPos value is invalid for present table with %lu rows"), + (unsigned long)pos, + (unsigned long)numRows, + (unsigned long)curNumRows + ) ); + return FALSE; } @@ -3182,10 +3186,13 @@ bool wxGridStringTable::DeleteCols( size_t pos, size_t numCols ) if ( pos >= curNumCols ) { - wxString errmsg; - errmsg.Printf( wxT("Called wxGridStringTable::DeleteCols(pos=%d, N=%d)...\nPos value is invalid for present table with %d cols"), - pos, numCols, curNumCols ); - wxFAIL_MSG( errmsg ); + wxFAIL_MSG( wxString::Format + ( + wxT("Called wxGridStringTable::DeleteCols(pos=%lu, N=%lu)\nPos value is invalid for present table with %lu cols"), + (unsigned long)pos, + (unsigned long)numCols, + (unsigned long)curNumCols + ) ); return FALSE; } @@ -4007,7 +4014,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) // removed, not only if the cell "underneath" it actually changes. // For now, I intentionally do not save the editor's content as the // cell it might want to save that stuff to might no longer exist. - DisableCellEditControl(); + HideCellEditControl(); #if 0 // if we were using the default widths/heights so far, we must change them // now @@ -5760,41 +5767,90 @@ void wxGrid::OnPaint( wxPaintEvent& WXUNUSED(event) ) wxPaintDC dc(this); // needed to prevent zillions of paint events on MSW } -void wxGrid::Refresh(bool eraseb, wxRect* rect) +void wxGrid::Refresh(bool eraseb, const wxRect* rect) { // Don't do anything if between Begin/EndBatch... // EndBatch() will do all this on the last nested one anyway. if (! GetBatchCount()) { + // Refresh to get correct scrolled position: wxScrolledWindow::Refresh(eraseb,rect); - int off_x=0 ,off_y=0; - wxRect * anotherrect = NULL ; - if (rect) { + int rect_x, rect_y, rectWidth, rectHeight; + int width_label, width_cell, height_label, height_cell; + int x, y; + //Copy rectangle can get scroll offsets.. - anotherrect = new wxRect(*rect); - CalcScrolledPosition( 0, 0, &off_x, &off_y ); - } - //Corner label Doesn't move from the origin. - m_cornerLabelWin->Refresh(eraseb,rect); + rect_x = rect->GetX(); + rect_y = rect->GetY(); + rectWidth = rect->GetWidth(); + rectHeight = rect->GetHeight(); - //Move Rect down for row labels... - if (rect) - rect->Offset(0,off_y); - m_rowLabelWin->Refresh(eraseb,rect); + width_label = m_rowLabelWidth - rect_x; + if (width_label > rectWidth) width_label = rectWidth; - //Move rect copy along for col labels... - if (anotherrect) - anotherrect->Offset(off_x,0); - m_colLabelWin->Refresh(eraseb,anotherrect); + height_label = m_colLabelHeight - rect_y; + if (height_label > rectHeight) height_label = rectHeight; - //Move main rect along (so it's down and across!) - // for cell window. - if (rect) - rect->Offset(off_x,0); - m_gridWin->Refresh(eraseb,rect); + if (rect_x > m_rowLabelWidth) + { + x = rect_x - m_rowLabelWidth; + width_cell = rectWidth; + } + else + { + x = 0; + width_cell = rectWidth - (m_rowLabelWidth - rect_x); + } + + if (rect_y > m_colLabelHeight) + { + y = rect_y - m_colLabelHeight; + height_cell = rectHeight; + } + else + { + y = 0; + height_cell = rectHeight - (m_colLabelHeight - rect_y); + } + + // Paint corner label part intersecting rect. + if ( width_label > 0 && height_label > 0 ) + { + wxRect anotherrect(rect_x, rect_y, width_label, height_label); + m_cornerLabelWin->Refresh(eraseb, &anotherrect); + } + + // Paint col labels part intersecting rect. + if ( width_cell > 0 && height_label > 0 ) + { + wxRect anotherrect(x, rect_y, width_cell, height_label); + m_colLabelWin->Refresh(eraseb, &anotherrect); + } + + // Paint row labels part intersecting rect. + if ( width_label > 0 && height_cell > 0 ) + { + wxRect anotherrect(rect_x, y, width_label, height_cell); + m_rowLabelWin->Refresh(eraseb, &anotherrect); + } + + // Paint cell area part intersecting rect. + if ( width_cell > 0 && height_cell > 0 ) + { + wxRect anotherrect(x, y, width_cell, height_cell); + m_gridWin->Refresh(eraseb, &anotherrect); + } + } + else + { + m_cornerLabelWin->Refresh(eraseb, NULL); + m_colLabelWin->Refresh(eraseb, NULL); + m_rowLabelWin->Refresh(eraseb, NULL); + m_gridWin->Refresh(eraseb, NULL); + } } } @@ -6264,8 +6320,8 @@ void wxGrid::HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCo bool wxGrid::GetModelValues() { - // Disable the editor, so it won't hide a changed value. - DisableCellEditControl(); + // Hide the editor, so it won't hide a changed value. + HideCellEditControl(); if ( m_table ) { @@ -6286,7 +6342,6 @@ bool wxGrid::SetModelValues() // Disable the editor, so it won't hide a changed value. // Do we also want to save the current value of the editor first? // I think so ... - SaveEditControlValue(); DisableCellEditControl(); if ( m_table )