]> git.saurik.com Git - wxWidgets.git/commitdiff
Remove wxDataViewTextRendererAttr by merging it with wxDataViewTextRenderer.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Oct 2009 13:59:25 +0000 (13:59 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Oct 2009 13:59:25 +0000 (13:59 +0000)
There is no reason to have a separate class for rendering the text honouring
the attributes defined for it, wxDataViewTextRenderer itself already does this
perfectly well.

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

include/wx/dataview.h
include/wx/generic/dataview.h
include/wx/gtk/dataview.h
include/wx/osx/dataview.h
interface/wx/dataview.h
samples/dataview/dataview.cpp
src/generic/datavgen.cpp
src/gtk/dataview.cpp
src/osx/dataview_osx.cpp

index d4da5c66edf6c04a8bced5bb0fadc5afebf9fe7e..29c1f55d00117db9665f9a3ca9932404727f231a 100644 (file)
@@ -144,6 +144,7 @@ public:
     bool HasColour() const { return m_colour.Ok(); }
     const wxColour& GetColour() const { return m_colour; }
 
+    bool HasFont() const { return m_bold || m_italic; }
     bool GetBold() const { return m_bold; }
     bool GetItalic() const { return m_italic; }
 
@@ -983,6 +984,10 @@ private:
 
 #endif
 
+// this class is obsolete, its functionality was merged in
+// wxDataViewTextRenderer itself now, don't use it any more
+#define wxDataViewTextRendererAttr wxDataViewTextRenderer
+
 //-----------------------------------------------------------------------------
 // wxDataViewListStore
 //-----------------------------------------------------------------------------
index 032cd6259011269aa90ecbebf79d59d501842f98..c5351892ac2111a898fd4466112ecf449195efe6 100644 (file)
@@ -38,7 +38,22 @@ public:
                         int align = wxDVR_DEFAULT_ALIGNMENT );
     virtual ~wxDataViewRenderer();
 
+    // these methods are used to draw the cell contents, Render() doesn't care
+    // about the attributes while RenderWithAttr() does -- override it if you
+    // want to take the attributes defined for this cell into account, otherwise
+    // overriding Render() is enough
     virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0;
+
+    // NB: RenderWithAttr() also has more standard parameter order and types
+    virtual bool
+    RenderWithAttr(wxDC& dc,
+                   const wxRect& rect,
+                   const wxDataViewItemAttr * WXUNUSED(attr), // NULL if none
+                   int state)
+    {
+        return Render(rect, &dc, state);
+    }
+
     virtual wxSize GetSize() const = 0;
 
     virtual void SetAlignment( int align );
@@ -77,10 +92,6 @@ public:
     // Create DC on request
     virtual wxDC *GetDC();
 
-    void SetHasAttr( bool set )  { m_hasAttr = set; }
-    void SetAttr( const wxDataViewItemAttr &attr ) { m_attr = attr; }
-    bool GetWantsAttr() const { return m_wantsAttr; }
-
     // implementation
     int CalculateAlignment() const;
 
@@ -89,11 +100,6 @@ private:
     int                          m_align;
     wxDataViewCellMode           m_mode;
 
-protected:
-    bool                         m_wantsAttr;
-    bool                         m_hasAttr;
-    wxDataViewItemAttr           m_attr;
-
 protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
 };
@@ -109,6 +115,15 @@ public:
                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
                               int align = wxDVR_DEFAULT_ALIGNMENT );
 
+    // Draw the text using the provided attributes
+    void RenderText(wxDC& dc,
+                    const wxRect& rect,
+                    const wxString& text,
+                    const wxDataViewItemAttr *attr, // may be NULL if none
+                    int state,
+                    int xoffset = 0);
+
+    // Overload using standard attributes
     void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
 
 protected:
@@ -130,7 +145,15 @@ public:
     bool SetValue( const wxVariant &value );
     bool GetValue( wxVariant &value ) const;
 
-    bool Render( wxRect cell, wxDC *dc, int state );
+    virtual bool RenderWithAttr(wxDC& dc,
+                                const wxRect& rect,
+                                const wxDataViewItemAttr *attr,
+                                int state);
+    virtual bool Render( wxRect cell, wxDC *dc, int state )
+    {
+        return RenderWithAttr(*dc, cell, NULL, state);
+    }
+
     wxSize GetSize() const;
 
     // in-place editing
@@ -146,23 +169,6 @@ protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
 };
 
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer
-{
-public:
-    wxDataViewTextRendererAttr( const wxString &varianttype = wxT("string"),
-                            wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                            int align = wxDVR_DEFAULT_ALIGNMENT );
-
-    bool Render( wxRect cell, wxDC *dc, int state );
-
-protected:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr)
-};
-
 // ---------------------------------------------------------
 // wxDataViewBitmapRenderer
 // ---------------------------------------------------------
index 486da22cdc6dfbbd949fc43051c9dc775945942a..f59d27ee7356146f2cc899c2ed1c0708f9cf8ca1 100644 (file)
@@ -40,7 +40,6 @@ public:
     // implementation
     GtkCellRenderer* GetGtkHandle() { return m_renderer; }
     void GtkInitHandlers();
-    virtual bool GtkHasAttributes() { return false; }
     void GtkUpdateAlignment();
 
 protected:
@@ -71,24 +70,6 @@ protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
 };
 
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer
-{
-public:
-    wxDataViewTextRendererAttr( const wxString &varianttype = wxT("string"),
-                            wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                            int align = wxDVR_DEFAULT_ALIGNMENT );
-
-    // implementation
-    bool GtkHasAttributes() { return true; }
-
-protected:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr)
-};
-
 // ---------------------------------------------------------
 // wxDataViewBitmapRenderer
 // ---------------------------------------------------------
index 679e229ba252afdfd57de179d373d6f830b52104..b9bc5c576f509abbca6e74c673297caca911c123 100644 (file)
@@ -191,22 +191,6 @@ private:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
 };
 
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer
-{
-public:
-//
-// constructors / destructor
-//
-    wxDataViewTextRendererAttr(wxString const& varianttype=wxT("string"), wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr)
-};
-
 // ---------------------------------------------------------
 // wxDataViewBitmapRenderer
 // ---------------------------------------------------------
index f7497f28d9eab5bbc9a63806b1b2b431cb82a2bd..4e6639b172d2da578119952fa39b541190475f77 100644 (file)
@@ -1033,7 +1033,6 @@ enum wxDataViewCellRenderState
     One instance of a renderer class is owned by a wxDataViewColumn.
     There is a number of ready-to-use renderers provided:
     - wxDataViewTextRenderer,
-    - wxDataViewTextRendererAttr,
     - wxDataViewIconTextRenderer,
     - wxDataViewToggleRenderer,
     - wxDataViewProgressRenderer,
@@ -1263,30 +1262,6 @@ public:
 
 
 
-/**
-    @class wxDataViewTextRendererAttr
-
-    The same as wxDataViewTextRenderer but with support for font attributes.
-    Font attributes are currently only supported under GTK+ and MSW.
-
-    @see wxDataViewModel::GetAttr and wxDataViewItemAttr.
-
-    @library{wxadv}
-    @category{dvc}
-*/
-class wxDataViewTextRendererAttr : public wxDataViewTextRenderer
-{
-public:
-    /**
-        The ctor.
-    */
-    wxDataViewTextRendererAttr(const wxString& varianttype = "string",
-                               wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
-                               int align = wxDVR_DEFAULT_ALIGNMENT);
-};
-
-
-
 /**
     @class wxDataViewCustomRenderer
 
index 8ebc6a8044003bf2fb92aeccef550935868e903d..101be7269d14187e737ea350e8d8207283f0eeaa 100644 (file)
@@ -553,7 +553,7 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l
             m_ctrl[1]->AppendIconTextColumn("icon", 1, wxDATAVIEW_CELL_INERT);
 #endif
             m_ctrl[1]->AppendColumn(
-                new wxDataViewColumn("attributes", new wxDataViewTextRendererAttr, 2 ));
+                new wxDataViewColumn("attributes", new wxDataViewTextRenderer, 2 ));
         }
         break;
 
index 462af9ddfcc51d507f20949954ce210dfd5e8581..7221c51138ded06de2d7c4ad034667df898e4089 100644 (file)
@@ -612,8 +612,6 @@ wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype,
     m_dc = NULL;
     m_align = align;
     m_mode = mode;
-    m_wantsAttr = false;
-    m_hasAttr = false;
 }
 
 wxDataViewRenderer::~wxDataViewRenderer()
@@ -674,14 +672,42 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
 void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset,
                                            wxRect cell, wxDC *dc, int state )
 {
-    wxDataViewCtrl *view = GetOwner()->GetOwner();
-    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
-                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
-                        view->GetForegroundColour();
-    dc->SetTextForeground(col);
-    dc->DrawText( text,
-                  cell.x + xoffset,
-                  cell.y + ((cell.height - dc->GetCharHeight()) / 2));
+    wxColour col = state & wxDATAVIEW_CELL_SELECTED
+                    ? wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT)
+                    : GetOwner()->GetOwner()->GetForegroundColour();
+
+    wxDataViewItemAttr attr;
+    attr.SetColour(col);
+    RenderText(*dc, cell, text, &attr, state, xoffset);
+}
+
+void
+wxDataViewCustomRenderer::RenderText(wxDC& dc,
+                                     const wxRect& rect,
+                                     const wxString& text,
+                                     const wxDataViewItemAttr *attr,
+                                     int WXUNUSED(state),
+                                     int xoffset)
+{
+    wxDCTextColourChanger changeFg(dc);
+    if ( attr && attr->HasColour() )
+        changeFg.Set(attr->GetColour());
+
+    wxDCFontChanger changeFont(dc);
+    if ( attr && attr->HasFont() )
+    {
+        wxFont font(dc.GetFont());
+        if ( attr->GetBold() )
+            font.MakeBold();
+        if ( attr->GetItalic() )
+            font.MakeItalic();
+
+        changeFont.Set(font);
+    }
+
+    dc.DrawText(text,
+                rect.x + xoffset,
+                rect.y + ((rect.height - dc.GetCharHeight()) / 2));
 }
 
 // ---------------------------------------------------------
@@ -734,9 +760,13 @@ bool wxDataViewTextRenderer::GetValueFromEditorCtrl( wxControl *editor, wxVarian
     return true;
 }
 
-bool wxDataViewTextRenderer::Render( wxRect cell, wxDC *dc, int state )
+bool
+wxDataViewTextRenderer::RenderWithAttr(wxDC& dc,
+                                       const wxRect& rect,
+                                       const wxDataViewItemAttr *attr,
+                                       int state)
 {
-    RenderText( m_text, 0, cell, dc, state );
+    RenderText(dc, rect, m_text, attr, state);
     return true;
 }
 
@@ -748,60 +778,6 @@ wxSize wxDataViewTextRenderer::GetSize() const
     return wxSize(wxDVC_DEFAULT_RENDERER_SIZE,wxDVC_DEFAULT_RENDERER_SIZE);
 }
 
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-
-IMPLEMENT_CLASS(wxDataViewTextRendererAttr, wxDataViewTextRenderer)
-
-wxDataViewTextRendererAttr::wxDataViewTextRendererAttr( const wxString &varianttype,
-                            wxDataViewCellMode mode, int align ) :
-    wxDataViewTextRenderer( varianttype, mode, align )
-{
-    m_wantsAttr = true;
-}
-
-bool wxDataViewTextRendererAttr::Render( wxRect cell, wxDC *dc, int WXUNUSED(state) )
-{
-    wxFont font;
-    wxColour colour;
-
-    if (m_hasAttr)
-    {
-        if (m_attr.HasColour())
-        {
-            colour = dc->GetTextForeground();
-            dc->SetTextForeground( m_attr.GetColour() );
-        }
-
-        if (m_attr.GetBold() || m_attr.GetItalic())
-        {
-            font = dc->GetFont();
-            wxFont myfont = font;
-            if (m_attr.GetBold())
-                myfont.SetWeight( wxFONTWEIGHT_BOLD );
-            if (m_attr.GetItalic())
-                myfont.SetStyle( wxFONTSTYLE_ITALIC );
-            dc->SetFont( myfont );
-        }
-    }
-
-    dc->DrawText( m_text, cell.x, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
-
-    // restore dc
-    if (m_hasAttr)
-    {
-        if (m_attr.HasColour())
-            dc->SetTextForeground( colour );
-
-        if (m_attr.GetBold() || m_attr.GetItalic())
-            dc->SetFont( font );
-    }
-
-    return true;
-}
-
-
 // ---------------------------------------------------------
 // wxDataViewBitmapRenderer
 // ---------------------------------------------------------
@@ -1602,15 +1578,6 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent )
         model->GetValue( value, item, column->GetModelColumn());
         cell->SetValue( value );
 
-        if (cell->GetWantsAttr())
-        {
-                wxDataViewItemAttr attr;
-                bool ret = model->GetAttr( item, column->GetModelColumn(), attr );
-                if (ret)
-                    cell->SetAttr( attr );
-                cell->SetHasAttr( ret );
-        }
-
         wxSize size = cell->GetSize();
         size.x = wxMin( 2*PADDING_RIGHTLEFT + size.x, width );
         size.y = height;
@@ -1638,7 +1605,10 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent )
         item_rect.width = size.x - 2 * PADDING_RIGHTLEFT;
 
         // dc.SetClippingRegion( item_rect );
-        cell->Render( item_rect, &dc, 0 );
+        wxDataViewItemAttr attr;
+        const bool
+            hasAttr = model->GetAttr(item, column->GetModelColumn(), attr);
+        cell->RenderWithAttr(dc, item_rect, hasAttr ? &attr : NULL, 0);
         // dc.DestroyClippingRegion();
 
         x += width;
@@ -1830,15 +1800,6 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
             model->GetValue( value, dataitem, col->GetModelColumn());
             cell->SetValue( value );
 
-            if (cell->GetWantsAttr())
-            {
-                wxDataViewItemAttr attr;
-                bool ret = model->GetAttr( dataitem, col->GetModelColumn(), attr );
-                if (ret)
-                    cell->SetAttr( attr );
-                cell->SetHasAttr( ret );
-            }
-
             // update cell_rect
             cell_rect.y = GetLineStart( item );
             cell_rect.height = GetLineHeight( item );
@@ -1936,7 +1897,12 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
             //       violating only the left & right coords - however the user can
             //       make its own renderer and thus we cannot be sure of that.
             dc.SetClippingRegion( item_rect );
-            cell->Render( item_rect, &dc, state );
+
+            wxDataViewItemAttr attr;
+            const bool
+                hasAttr = model->GetAttr(dataitem, col->GetModelColumn(), attr);
+            cell->RenderWithAttr(dc, item_rect, hasAttr ? &attr : NULL, state);
+
             dc.DestroyClippingRegion();
         }
 
index 7f03b9f81343364fe45ec858df026fbee498c5e3..3228e441f234bf4bfa9b3fccc036eb0713bd85bb 100644 (file)
@@ -1790,18 +1790,6 @@ void wxDataViewTextRenderer::SetAlignment( int align )
     g_value_unset( &gvalue );
 }
 
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-
-IMPLEMENT_CLASS(wxDataViewTextRendererAttr,wxDataViewTextRenderer)
-
-wxDataViewTextRendererAttr::wxDataViewTextRendererAttr( const wxString &varianttype,
-                            wxDataViewCellMode mode, int align ) :
-   wxDataViewTextRenderer( varianttype, mode, align )
-{
-}
-
 // ---------------------------------------------------------
 // wxDataViewBitmapRenderer
 // ---------------------------------------------------------
@@ -2580,77 +2568,60 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *WXUNUSED(column),
 
     cell->SetValue( value );
 
-    if (cell->GtkHasAttributes())
+    wxDataViewItemAttr attr;
+    if (wx_model->GetAttr( item, cell->GetOwner()->GetModelColumn(), attr ))
     {
-        wxDataViewItemAttr attr;
-        bool colour_set = false;
-        bool style_set = false;
-        bool weight_set = false;
-
-        if (wx_model->GetAttr( item, cell->GetOwner()->GetModelColumn(), attr ))
+        if (attr.HasColour())
         {
-            // this must be a GtkCellRendererText
-            wxColour colour = attr.GetColour();
-            if (colour.IsOk())
-            {
-                const GdkColor * const gcol = colour.GetColor();
-
-                GValue gvalue = { 0, };
-                g_value_init( &gvalue, GDK_TYPE_COLOR );
-                g_value_set_boxed( &gvalue, gcol );
-                g_object_set_property( G_OBJECT(renderer), "foreground_gdk", &gvalue );
-                g_value_unset( &gvalue );
+            const GdkColor * const gcol = attr.GetColour().GetColor();
 
-                colour_set = true;
-            }
-
-            if (attr.GetItalic())
-            {
-                GValue gvalue = { 0, };
-                g_value_init( &gvalue, PANGO_TYPE_STYLE );
-                g_value_set_enum( &gvalue, PANGO_STYLE_ITALIC );
-                g_object_set_property( G_OBJECT(renderer), "style", &gvalue );
-                g_value_unset( &gvalue );
-
-                style_set = true;
-            }
-
-            if (attr.GetBold())
-            {
-                GValue gvalue = { 0, };
-                g_value_init( &gvalue, PANGO_TYPE_WEIGHT );
-                g_value_set_enum( &gvalue, PANGO_WEIGHT_BOLD );
-                g_object_set_property( G_OBJECT(renderer), "weight", &gvalue );
-                g_value_unset( &gvalue );
-
-                weight_set = true;
-            }
+            GValue gvalue = { 0, };
+            g_value_init( &gvalue, GDK_TYPE_COLOR );
+            g_value_set_boxed( &gvalue, gcol );
+            g_object_set_property( G_OBJECT(renderer), "foreground_gdk", &gvalue );
+            g_value_unset( &gvalue );
         }
-
-        if (!style_set)
+        else
         {
             GValue gvalue = { 0, };
             g_value_init( &gvalue, G_TYPE_BOOLEAN );
             g_value_set_boolean( &gvalue, FALSE );
-            g_object_set_property( G_OBJECT(renderer), "style-set", &gvalue );
+            g_object_set_property( G_OBJECT(renderer), "foreground-set", &gvalue );
             g_value_unset( &gvalue );
         }
 
-        if (!weight_set)
+        if (attr.GetItalic())
+        {
+            GValue gvalue = { 0, };
+            g_value_init( &gvalue, PANGO_TYPE_STYLE );
+            g_value_set_enum( &gvalue, PANGO_STYLE_ITALIC );
+            g_object_set_property( G_OBJECT(renderer), "style", &gvalue );
+            g_value_unset( &gvalue );
+        }
+        else
         {
             GValue gvalue = { 0, };
             g_value_init( &gvalue, G_TYPE_BOOLEAN );
             g_value_set_boolean( &gvalue, FALSE );
-            g_object_set_property( G_OBJECT(renderer), "weight-set", &gvalue );
+            g_object_set_property( G_OBJECT(renderer), "style-set", &gvalue );
             g_value_unset( &gvalue );
         }
 
-        if (!colour_set)
+
+        if (attr.GetBold())
+        {
+            GValue gvalue = { 0, };
+            g_value_init( &gvalue, PANGO_TYPE_WEIGHT );
+            g_value_set_enum( &gvalue, PANGO_WEIGHT_BOLD );
+            g_object_set_property( G_OBJECT(renderer), "weight", &gvalue );
+            g_value_unset( &gvalue );
+        }
+        else
         {
             GValue gvalue = { 0, };
             g_value_init( &gvalue, G_TYPE_BOOLEAN );
             g_value_set_boolean( &gvalue, FALSE );
-            g_object_set_property( G_OBJECT(renderer), "foreground-set", &gvalue );
+            g_object_set_property( G_OBJECT(renderer), "weight-set", &gvalue );
             g_value_unset( &gvalue );
         }
     }
index f2140e4e369a5fc3a18c1f74ea35b4ba76017c86..b8f33a85a20d4b3f929d87daa4cb5a9dec4b3fea 100644 (file)
@@ -325,16 +325,6 @@ void wxDataViewCustomRenderer::SetDC(wxDC* newDCPtr)
   m_DCPtr = newDCPtr;
 }
 
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-wxDataViewTextRendererAttr::wxDataViewTextRendererAttr(wxString const& varianttype, wxDataViewCellMode mode, int align)
-                           :wxDataViewTextRenderer(varianttype,mode,align)
-{
-}
-
-IMPLEMENT_CLASS(wxDataViewTextRendererAttr,wxDataViewTextRenderer)
-
 //-----------------------------------------------------------------------------
 // wxDataViewCtrl
 //-----------------------------------------------------------------------------