- int w, h;
- GetClientSize( &w, &h );
-
- wxAutoBufferedPaintDC dc( this );
-
- dc.SetBackground(GetBackgroundColour());
- dc.Clear();
-
- int xpix;
- m_owner->GetScrollPixelsPerUnit( &xpix, NULL );
-
- int x;
- m_owner->GetViewStart( &x, NULL );
-
- // account for the horz scrollbar offset
- dc.SetDeviceOrigin( -x * xpix, 0 );
-
- dc.SetFont( GetFont() );
-
- unsigned int cols = GetOwner()->GetColumnCount();
- unsigned int i;
- int xpos = 0;
- for (i = 0; i < cols; i++)
- {
- wxDataViewColumn *col = GetColumn( i );
- if (col->IsHidden())
- continue; // skip it!
-
- int cw = col->GetWidth();
- int ch = h;
-
- wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE;
- if (col->IsSortable() && GetOwner()->GetSortingColumn() == col)
- {
- if (col->IsSortOrderAscending())
- sortArrow = wxHDR_SORT_ICON_UP;
- else
- sortArrow = wxHDR_SORT_ICON_DOWN;
- }
-
- int state = 0;
- if (m_parent->IsEnabled())
- {
- if ((int) i == m_hover)
- state = wxCONTROL_CURRENT;
- }
- else
- {
- state = (int) wxCONTROL_DISABLED;
- }
-
- wxRendererNative::Get().DrawHeaderButton
- (
- this,
- dc,
- wxRect(xpos, 0, cw, ch-1),
- state,
- sortArrow
- );
-
- // align as required the column title:
- int x = xpos;
- wxSize titleSz = dc.GetTextExtent(col->GetTitle());
- switch (col->GetAlignment())
- {
- case wxALIGN_LEFT:
- x += HEADER_HORIZ_BORDER;
- break;
- case wxALIGN_RIGHT:
- x += cw - titleSz.GetWidth() - HEADER_HORIZ_BORDER;
- break;
- default:
- case wxALIGN_CENTER:
- case wxALIGN_CENTER_HORIZONTAL:
- x += (cw - titleSz.GetWidth() - 2 * HEADER_HORIZ_BORDER)/2;
- break;
- }