From: Stefan Neis Date: Sun, 6 Jul 2008 16:30:51 +0000 (+0000) Subject: Make AutoSizing in wxGrid's SetCol/RowSize work and use it from corresponding X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ad7502d8612afcc113eaffffeb6c1c6f8e9d0f58 Make AutoSizing in wxGrid's SetCol/RowSize work and use it from corresponding AutoSize functions. This fixes #4107. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54514 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index d0288aebc0..4b73fdedf9 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -10352,6 +10352,19 @@ void wxGrid::SetRowSize( int row, int height ) { wxCHECK_RET( row >= 0 && row < m_numRows, _T("invalid row index") ); + // if < 0 then calculate new height from label + if ( height < 0 ) + { + long w, h; + wxArrayString lines; + wxClientDC dc(m_rowLabelWin); + dc.SetFont(GetLabelFont()); + StringToLines(GetRowLabelValue( row ), lines); + GetTextBoxSize( dc, lines, &w, &h ); + //check that it is not less than the minimal height + height = wxMax(h, GetRowMinimalAcceptableHeight()); + } + // See comment in SetColSize if ( height < GetRowMinimalAcceptableHeight()) return; @@ -10397,6 +10410,23 @@ void wxGrid::SetColSize( int col, int width ) { wxCHECK_RET( col >= 0 && col < m_numCols, _T("invalid column index") ); + // if < 0 then calculate new width from label + if ( width < 0 ) + { + long w, h; + wxArrayString lines; + wxClientDC dc(m_colLabelWin); + dc.SetFont(GetLabelFont()); + StringToLines(GetColLabelValue(col), lines); + if ( GetColLabelTextOrientation() == wxHORIZONTAL ) + GetTextBoxSize( dc, lines, &w, &h ); + else + GetTextBoxSize( dc, lines, &h, &w ); + width = w + 6; + //check that it is not less than the minimal width + width = wxMax(width, GetColMinimalAcceptableWidth()); + } + // should we check that it's bigger than GetColMinimalWidth(col) here? // (VZ) // No, because it is reasonable to assume the library user know's @@ -10414,18 +10444,6 @@ void wxGrid::SetColSize( int col, int width ) InitColWidths(); } - // if < 0 then calculate new width from label - if ( width < 0 ) - { - long w, h; - wxArrayString lines; - wxClientDC dc(m_colLabelWin); - dc.SetFont(GetLabelFont()); - StringToLines(GetColLabelValue(col), lines); - GetTextBoxSize(dc, lines, &w, &h); - width = w + 6; - } - int w = wxMax( 0, width ); int diff = w - m_colWidths[col]; m_colWidths[col] = w; @@ -10793,9 +10811,6 @@ void wxGrid::AutoSize() void wxGrid::AutoSizeRowLabelSize( int row ) { - wxArrayString lines; - long w, h; - // Hide the edit control, so it // won't interfere with drag-shrinking. if ( IsCellEditControlShown() ) @@ -10805,20 +10820,12 @@ void wxGrid::AutoSizeRowLabelSize( int row ) } // autosize row height depending on label text - StringToLines( GetRowLabelValue( row ), lines ); - wxClientDC dc( m_rowLabelWin ); - GetTextBoxSize( dc, lines, &w, &h ); - if ( h < m_defaultRowHeight ) - h = m_defaultRowHeight; - SetRowSize(row, h); + SetRowSize(row, -1); ForceRefresh(); } void wxGrid::AutoSizeColLabelSize( int col ) { - wxArrayString lines; - long w, h; - // Hide the edit control, so it // won't interfere with drag-shrinking. if ( IsCellEditControlShown() ) @@ -10828,15 +10835,7 @@ void wxGrid::AutoSizeColLabelSize( int col ) } // autosize column width depending on label text - StringToLines( GetColLabelValue( col ), lines ); - wxClientDC dc( m_colLabelWin ); - if ( GetColLabelTextOrientation() == wxHORIZONTAL ) - GetTextBoxSize( dc, lines, &w, &h ); - else - GetTextBoxSize( dc, lines, &h, &w ); - if ( w < m_defaultColWidth ) - w = m_defaultColWidth; - SetColSize(col, w); + SetColSize(col, -1); ForceRefresh(); }