]> git.saurik.com Git - wxWidgets.git/commitdiff
Make generic wxDataViewProgressRenderer fill the entire cell.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Oct 2009 22:44:09 +0000 (22:44 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Oct 2009 22:44:09 +0000 (22:44 +0000)
After the fixes in the previous commit it is finally possibly to make the
progress renderer expand to the entire cell area instead of taking a
fixed width, it is enough to simply override RenderWithAttr() instead of
Render() and ignore the alignment as this avoids the use of (arbitrary and
hardcoded) wxDataViewProgressRenderer::GetSize().

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

include/wx/generic/dataview.h
src/generic/datavgen.cpp

index 3e32fa8ffac9e0d0e7976e3b031d4d1a46206507..66090fa892c8b13c085dd5d8a4729c06f1a069db 100644 (file)
@@ -93,12 +93,23 @@ public:
     // implementation
     int CalculateAlignment() const;
 
+protected:
+    // This is just a convenience for the derived classes overriding
+    // RenderWithAttr() to avoid repeating the same wxFAIL_MSG() in all of them
+    bool DummyRender(wxRect WXUNUSED(cell),
+                     wxDC * WXUNUSED(dc),
+                     int WXUNUSED(state))
+    {
+        wxFAIL_MSG("shouldn't be called at all, use RenderWithAttr() instead");
+
+        return false;
+    }
+
 private:
     wxDC                        *m_dc;
     int                          m_align;
     wxDataViewCellMode           m_mode;
 
-protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
 };
 
@@ -149,12 +160,9 @@ public:
                                 int align,
                                 const wxDataViewItemAttr *attr,
                                 int state);
-    virtual bool Render(wxRect WXUNUSED(cell),
-                        wxDC * WXUNUSED(dc),
-                        int WXUNUSED(state))
+    virtual bool Render(wxRect cell, wxDC *dc, int state)
     {
-        wxFAIL_MSG("only RenderWithAttr() should be called");
-        return false;
+        return DummyRender(cell, dc, state);
     }
 
     wxSize GetSize() const;
@@ -234,12 +242,19 @@ public:
                                 const wxString &varianttype = wxT("long"),
                                 wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                                 int align = wxDVR_DEFAULT_ALIGNMENT );
-    virtual ~wxDataViewProgressRenderer();
 
     bool SetValue( const wxVariant &value );
     bool GetValue( wxVariant& value ) const;
 
-    virtual bool Render( wxRect cell, wxDC *dc, int state );
+    virtual bool RenderWithAttr(wxDC& dc,
+                                const wxRect& rect,
+                                int align,
+                                const wxDataViewItemAttr *attr,
+                                int state);
+    virtual bool Render(wxRect cell, wxDC *dc, int state)
+    {
+        return DummyRender(cell, dc, state);
+    }
     virtual wxSize GetSize() const;
 
 private:
index d407c8228561094cfaa5b7deebe9b6fc3e62292b..1653ebfcca868805fd5942f444058d1abac8598b 100644 (file)
@@ -938,10 +938,6 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label,
     m_value = 0;
 }
 
-wxDataViewProgressRenderer::~wxDataViewProgressRenderer()
-{
-}
-
 bool wxDataViewProgressRenderer::SetValue( const wxVariant &value )
 {
     m_value = (long) value;
@@ -958,18 +954,24 @@ bool wxDataViewProgressRenderer::GetValue( wxVariant &value ) const
     return true;
 }
 
-bool wxDataViewProgressRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state) )
+bool wxDataViewProgressRenderer::RenderWithAttr(wxDC& dc,
+                                                const wxRect& rect,
+                                                int WXUNUSED(align),
+                                                const wxDataViewItemAttr *attr,
+                                                int WXUNUSED(state))
 {
-    double pct = (double)m_value / 100.0;
-    wxRect bar = cell;
-    bar.width = (int)(cell.width * pct);
-    dc->SetPen( *wxTRANSPARENT_PEN );
-    dc->SetBrush( *wxBLUE_BRUSH );
-    dc->DrawRectangle( bar );
+    // deflat the rect to leave a small border between bars in adjacent rows
+    wxRect bar = rect.Deflate(0, 1);
 
-    dc->SetBrush( *wxTRANSPARENT_BRUSH );
-    dc->SetPen( *wxBLACK_PEN );
-    dc->DrawRectangle( cell );
+    dc.SetBrush( *wxTRANSPARENT_BRUSH );
+    dc.SetPen( *wxBLACK_PEN );
+    dc.DrawRectangle( bar );
+
+    bar.width = (int)(bar.width * m_value / 100.);
+    dc.SetPen( *wxTRANSPARENT_PEN );
+    dc.SetBrush( attr && attr->HasColour() ? wxBrush(attr->GetColour())
+                                           : *wxBLUE_BRUSH );
+    dc.DrawRectangle( bar );
 
     return true;
 }