]> git.saurik.com Git - wxWidgets.git/commitdiff
Extract default grid header renderers from wxGridCellAttrProvider.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 23 Sep 2009 14:28:55 +0000 (14:28 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 23 Sep 2009 14:28:55 +0000 (14:28 +0000)
We must be able to use them even when we have no attributes at all
and even when we have no associated table, so use default renderers in wxGrid
implementation of Draw{Row,Column}Label()/DrawBorder() in this case.

Closes #11230.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62037 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/grid.h
src/generic/grid.cpp

index 4c3ed510df07914be00170e09c4b8cee1b743f50..f2404fcd9d47fe7ad15329a640c1a7ce051745ff 100644 (file)
@@ -549,39 +549,15 @@ public:
     // get renderers for the given row/column header label and the corner
     // window: unlike cell renderers, these objects are not reference counted
     // and are never NULL so they are returned by reference
-    virtual const wxGridColumnHeaderRenderer&
-        GetColumnHeaderRenderer(int WXUNUSED(col))
-    {
-        return m_defaultHeaderRenderers.colRenderer;
-    }
-
-    virtual const wxGridRowHeaderRenderer&
-        GetRowHeaderRenderer(int WXUNUSED(row))
-    {
-        return m_defaultHeaderRenderers.rowRenderer;
-    }
-
-    virtual const wxGridCornerHeaderRenderer& GetCornerRenderer()
-    {
-        return m_defaultHeaderRenderers.cornerRenderer;
-    }
+    virtual const wxGridColumnHeaderRenderer& GetColumnHeaderRenderer(int col);
+    virtual const wxGridRowHeaderRenderer& GetRowHeaderRenderer(int row);
+    virtual const wxGridCornerHeaderRenderer& GetCornerRenderer();
 
 private:
     void InitData();
 
     wxGridCellAttrProviderData *m_data;
 
-    // this struct simply combines together the default header renderers
-    //
-    // FIXME-VC6: this struct must be named because of VC6 bug, it fails
-    //            with error C2639 on this struct declaration without it
-    struct DefaultHeaderRenderers
-    {
-        wxGridColumnHeaderRendererDefault colRenderer;
-        wxGridRowHeaderRendererDefault rowRenderer;
-        wxGridCornerHeaderRendererDefault cornerRenderer;
-    } m_defaultHeaderRenderers;
-
     wxDECLARE_NO_COPY_CLASS(wxGridCellAttrProvider);
 };
 
index 1130b4177fff6b171574fc9b00956fde6b4fb9ff..d19952c91906320724fe09f3aa2586476748d5dc 100644 (file)
@@ -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
 // ----------------------------------------------------------------------------
@@ -943,6 +959,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
 // ----------------------------------------------------------------------------
@@ -5408,8 +5441,11 @@ void wxGrid::DrawRowLabel( wxDC& dc, int row )
     if ( GetRowHeight(row) <= 0 || m_rowLabelWidth <= 0 )
         return;
 
+    wxGridCellAttrProvider * const
+        attrProvider = m_table ? m_table->GetAttrProvider() : NULL;
     const wxGridRowHeaderRenderer&
-        rend = m_table->GetAttrProvider()->GetRowHeaderRenderer(row);
+        rend = attrProvider ? attrProvider->GetRowHeaderRenderer(row)
+                            : gs_defaultHeaderRenderers.rowRenderer;
     wxRect rect(0, GetRowTop(row), m_rowLabelWidth, GetRowHeight(row));
     rend.DrawBorder(*this, dc, rect);
 
@@ -5478,8 +5514,11 @@ 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()
+                                : gs_defaultHeaderRenderers.cornerRenderer;
 
         rend.DrawBorder(*this, dc, rect);
     }
@@ -5493,8 +5532,11 @@ 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)
+                            : gs_defaultHeaderRenderers.colRenderer;
 
     if ( m_nativeColumnLabels )
     {