Merge branch 'grid-native-header-autosize'

Fixes for auto-sizing grid columns when using native header control.

Closes https://github.com/wxWidgets/wxWidgets/pull/1579
This commit is contained in:
Vadim Zeitlin
2019-10-07 22:26:02 +02:00
3 changed files with 34 additions and 21 deletions

View File

@@ -2282,6 +2282,7 @@ protected:
friend class wxGridWindow;
friend class wxGridHeaderRenderer;
friend class wxGridHeaderColumn;
friend class wxGridHeaderCtrl;
private:
@@ -2404,6 +2405,8 @@ private:
wxGridColLabelWindow* colLabelWin);
void ProcessCornerLabelMouseEvent(wxMouseEvent& event);
void HandleColumnAutosize(int col, const wxMouseEvent& event);
void DoColHeaderClick(int col);
void DoStartResizeCol(int col);

View File

@@ -95,7 +95,7 @@ public:
virtual wxString GetTitle() const wxOVERRIDE { return m_grid->GetColLabelValue(m_col); }
virtual wxBitmap GetBitmap() const wxOVERRIDE { return wxNullBitmap; }
virtual int GetWidth() const wxOVERRIDE { return m_grid->GetColSize(m_col); }
virtual int GetMinWidth() const wxOVERRIDE { return m_grid->GetColMinimalAcceptableWidth(); }
virtual int GetMinWidth() const wxOVERRIDE { return m_grid->GetColMinimalWidth(m_col); }
virtual wxAlignment GetAlignment() const wxOVERRIDE
{
int horz,
@@ -191,11 +191,9 @@ private:
}
// override to implement column auto sizing
virtual bool UpdateColumnWidthToFit(unsigned int idx, int widthTitle) wxOVERRIDE
virtual bool UpdateColumnWidthToFit(unsigned int idx, int WXUNUSED(widthTitle)) wxOVERRIDE
{
// TODO: currently grid doesn't support computing the column best width
// from its contents so we just use the best label width as is
GetOwner()->SetColSize(idx, widthTitle);
GetOwner()->HandleColumnAutosize(idx, GetDummyMouseEvent());
return true;
}

View File

@@ -3874,13 +3874,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo
}
else
{
// adjust column width depending on label text
//
// TODO: generate RESIZING event, see #10754
if ( !SendGridSizeEvent(wxEVT_GRID_COL_AUTO_SIZE, -1, colEdge, event) )
AutoSizeColLabelSize( colEdge );
SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, colEdge, event);
HandleColumnAutosize(colEdge, event);
ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, colLabelWin);
m_dragLastPos = -1;
@@ -4023,6 +4017,17 @@ void wxGrid::ProcessCornerLabelMouseEvent( wxMouseEvent& event )
}
}
void wxGrid::HandleColumnAutosize(int col, const wxMouseEvent& event)
{
// adjust column width depending on label text
//
// TODO: generate RESIZING event, see #10754
if ( !SendGridSizeEvent(wxEVT_GRID_COL_AUTO_SIZE, -1, col, event) )
AutoSizeColLabelSize(col);
SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, col, event);
}
void wxGrid::CancelMouseCapture()
{
// cancel operation currently in progress, whatever it is
@@ -9127,6 +9132,12 @@ void wxGrid::SetColSize( int col, int width )
// make the code more complex), and for them passing -1 simply means to
// show the column back using its old size.
if ( width == -1 && GetColWidth(col) != 0 )
{
if ( m_useNativeHeader )
{
width = GetGridColHeader()->GetColumnTitleWidth(col);
}
else
{
long w, h;
wxArrayString lines;
@@ -9138,6 +9149,7 @@ void wxGrid::SetColSize( int col, int width )
else
GetTextBoxSize( dc, lines, &h, &w );
width = w + 6;
}
// Check that it is not less than the minimal width and do use the
// possibly greater than minimal-acceptable-width minimal-width itself