]> git.saurik.com Git - wxWidgets.git/commitdiff
Add custom renderer column to the list model example in dataview sample.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 10 Nov 2009 17:40:37 +0000 (17:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 10 Nov 2009 17:40:37 +0000 (17:40 +0000)
Add a column using custom renderer to the example using a list model with
attributes to test attributes support -- currently they are ignored, but this
will be fixed soon.

Also make the custom renderer display somewhat more clear as previously it
didn't depend at all on its value.

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

samples/dataview/dataview.cpp
samples/dataview/mymodels.cpp
samples/dataview/mymodels.h

index dccee4f9e8b3bdca8623a1f6d272e6fa7d77897d..993fca294b29dfd759cee81991a2ecb66edbd42d 100644 (file)
@@ -150,15 +150,25 @@ private:
 class MyCustomRenderer: public wxDataViewCustomRenderer
 {
 public:
-    MyCustomRenderer( wxDataViewCellMode mode, int alignment ) :
-       wxDataViewCustomRenderer( wxString("long"), mode, alignment )
-       { m_height = 25; }
+    MyCustomRenderer()
+        : wxDataViewCustomRenderer("string",
+                                   wxDATAVIEW_CELL_ACTIVATABLE,
+                                   wxALIGN_CENTER)
+       { }
 
-    virtual bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) )
+    virtual bool Render( wxRect rect, wxDC *dc, int state )
     {
-        dc->SetBrush( *wxRED_BRUSH );
+        dc->SetBrush( *wxLIGHT_GREY_BRUSH );
         dc->SetPen( *wxTRANSPARENT_PEN );
-        dc->DrawRectangle( rect.Deflate(2) );
+
+        rect.Deflate(2);
+        dc->DrawRoundedRectangle( rect, 5 );
+
+        RenderText(m_value,
+                   0, // no offset
+                   wxRect(dc->GetTextExtent(m_value)).CentreIn(rect),
+                   dc,
+                   state);
         return true;
     }
 
@@ -182,20 +192,19 @@ public:
 
     virtual wxSize GetSize() const
     {
-        //return wxSize(60,m_height);
         return wxSize(60,20);
     }
 
     virtual bool SetValue( const wxVariant &value )
     {
-        m_height = value;
+        m_value = value.GetString();
         return true;
     }
 
     virtual bool GetValue( wxVariant &WXUNUSED(value) ) const { return true; }
 
 private:
-    long m_height;
+    wxString m_value;
 };
 
 
@@ -523,7 +532,7 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l
 
             // column 5 of the view control:
 
-            MyCustomRenderer *cr = new MyCustomRenderer( wxDATAVIEW_CELL_ACTIVATABLE, wxALIGN_RIGHT );
+            MyCustomRenderer *cr = new MyCustomRenderer;
             wxDataViewColumn *column5 =
                 new wxDataViewColumn( "custom", cr, 5, -1, wxALIGN_LEFT,
                                       wxDATAVIEW_COL_RESIZABLE );
@@ -556,6 +565,12 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l
                                      new wxDataViewTextRenderer,
                                      MyListModel::Col_TextWithAttr)
             );
+
+            m_ctrl[1]->AppendColumn(
+                new wxDataViewColumn("custom renderer",
+                                     new MyCustomRenderer,
+                                     MyListModel::Col_Custom)
+            );
         }
         break;
 
index c3bf1ff87a49770b81a3a5a843e35e0f83e3badc..85cca7a478b26d7eb37a4649d2814db1c44a704e 100644 (file)
@@ -203,18 +203,13 @@ void MyMusicTreeModel::GetValue( wxVariant &variant,
         variant = node->m_quality;
         break;
     case 4:
-        // wxMac doesn't conceal the popularity progress renderer, return 0 for containers
-        if (IsContainer(item))
-            variant = (long) 0;
-        else
-            variant = (long) 80;  // all music is very 80% popular
+        variant = 80L;  // all music is very 80% popular
         break;
     case 5:
-        // Make size of red square depend on year
         if (GetYear(item) < 1900)
-            variant = (long) 35;
+            variant = "old";
         else
-            variant = (long) 25;
+            variant = "new";
         break;
 
     default:
@@ -436,6 +431,10 @@ void MyListModel::GetValueByRow( wxVariant &variant,
             }
             break;
 
+        case Col_Custom:
+            variant = wxString::Format("%d", row % 100);
+            break;
+
         case Col_Max:
             wxFAIL_MSG( "invalid column" );
     }
@@ -456,7 +455,8 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col,
             break;
 
         case Col_TextWithAttr:
-            // do what the labels defined above hint at
+        case Col_Custom:
+            // do what the labels defined in GetValueByRow() hint at
             switch ( row % 5 )
             {
                 case 0:
@@ -517,6 +517,7 @@ bool MyListModel::SetValueByRow( const wxVariant &variant,
             return true;
 
         case Col_TextWithAttr:
+        case Col_Custom:
             wxLogError("Cannot edit the column %d", col);
             break;
 
index 6d110d645e9779ff20f4326430647611b1100828..a0b98bc83245624fc682e35e555e95f38372065f 100644 (file)
@@ -193,6 +193,7 @@ public:
         Col_EditableText,
         Col_IconText,
         Col_TextWithAttr,
+        Col_Custom,
         Col_Max
     };