X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ba9574c310e8930a0e71547507c9811e22633f30..3e97b55017ab8fee83025a7573deb3bb48577d87:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 1130b4177f..707ebedabc 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -80,12 +80,28 @@ WX_DECLARE_HASH_SET_WITH_DECL(int, wxIntegerHash, wxIntegerEqual, // globals // ---------------------------------------------------------------------------- +namespace +{ + //#define DEBUG_ATTR_CACHE #ifdef DEBUG_ATTR_CACHE static size_t gs_nAttrCacheHits = 0; static size_t gs_nAttrCacheMisses = 0; #endif +// this struct simply combines together the default header renderers +// +// as the renderers ctors are trivial, there is no problem with making them +// globals +struct DefaultHeaderRenderers +{ + wxGridColumnHeaderRendererDefault colRenderer; + wxGridRowHeaderRendererDefault rowRenderer; + wxGridCornerHeaderRendererDefault cornerRenderer; +} gs_defaultHeaderRenderers; + +} // anonymous namespace + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -460,6 +476,15 @@ void wxGridCellAttr::GetAlignment(int *hAlign, int *vAlign) const } } +void wxGridCellAttr::GetNonDefaultAlignment(int *hAlign, int *vAlign) const +{ + if ( hAlign && m_hAlign != wxALIGN_INVALID ) + *hAlign = m_hAlign; + + if ( vAlign && m_vAlign != wxALIGN_INVALID ) + *vAlign = m_vAlign; +} + void wxGridCellAttr::GetSize( int *num_rows, int *num_cols ) const { if ( num_rows ) @@ -943,6 +968,23 @@ void wxGridCellAttrProvider::UpdateAttrCols( size_t pos, int numCols ) } } +const wxGridColumnHeaderRenderer& +wxGridCellAttrProvider::GetColumnHeaderRenderer(int WXUNUSED(col)) +{ + return gs_defaultHeaderRenderers.colRenderer; +} + +const wxGridRowHeaderRenderer& +wxGridCellAttrProvider::GetRowHeaderRenderer(int WXUNUSED(row)) +{ + return gs_defaultHeaderRenderers.rowRenderer; +} + +const wxGridCornerHeaderRenderer& wxGridCellAttrProvider::GetCornerRenderer() +{ + return gs_defaultHeaderRenderers.cornerRenderer; +} + // ---------------------------------------------------------------------------- // wxGridTableBase // ---------------------------------------------------------------------------- @@ -3540,7 +3582,7 @@ void wxGrid::ChangeCursorMode(CursorMode mode, bool captureMouse) { #if wxUSE_LOG_TRACE - static const wxChar *cursorModes[] = + static const wxChar *const cursorModes[] = { wxT("SELECT_CELL"), wxT("RESIZE_ROW"), @@ -5408,8 +5450,17 @@ void wxGrid::DrawRowLabel( wxDC& dc, int row ) if ( GetRowHeight(row) <= 0 || m_rowLabelWidth <= 0 ) return; + wxGridCellAttrProvider * const + attrProvider = m_table ? m_table->GetAttrProvider() : NULL; + + // notice that an explicit static_cast is needed to avoid a compilation + // error with VC7.1 which, for some reason, tries to instantiate (abstract) + // wxGridRowHeaderRenderer class without it const wxGridRowHeaderRenderer& - rend = m_table->GetAttrProvider()->GetRowHeaderRenderer(row); + rend = attrProvider ? attrProvider->GetRowHeaderRenderer(row) + : static_cast + (gs_defaultHeaderRenderers.rowRenderer); + wxRect rect(0, GetRowTop(row), m_rowLabelWidth, GetRowHeight(row)); rend.DrawBorder(*this, dc, rect); @@ -5478,8 +5529,12 @@ void wxGrid::DrawCornerLabel(wxDC& dc) rect.width++; rect.height++; + wxGridCellAttrProvider * const + attrProvider = m_table ? m_table->GetAttrProvider() : NULL; const wxGridCornerHeaderRenderer& - rend = m_table->GetAttrProvider()->GetCornerRenderer(); + rend = attrProvider ? attrProvider->GetCornerRenderer() + : static_cast + (gs_defaultHeaderRenderers.cornerRenderer); rend.DrawBorder(*this, dc, rect); } @@ -5493,8 +5548,12 @@ void wxGrid::DrawColLabel(wxDC& dc, int col) int colLeft = GetColLeft(col); wxRect rect(colLeft, 0, GetColWidth(col), m_colLabelHeight); + wxGridCellAttrProvider * const + attrProvider = m_table ? m_table->GetAttrProvider() : NULL; const wxGridColumnHeaderRenderer& - rend = m_table->GetAttrProvider()->GetColumnHeaderRenderer(col); + rend = attrProvider ? attrProvider->GetColumnHeaderRenderer(col) + : static_cast + (gs_defaultHeaderRenderers.colRenderer); if ( m_nativeColumnLabels ) {