+
+ virtual void GetValue( wxVariant &variant, unsigned int col, unsigned int row ) const
+ {
+ if (col == 6)
+ {
+ variant = (wxDateTime) m_dates[row];
+ } else
+ if (col == 5)
+ {
+ variant = (long) m_progress[row];
+ } else
+ if (col == 4)
+ {
+ variant = m_colours[row];
+ } else
+ if (col == 3)
+ {
+ variant = (bool) (m_bools[row] != 0);
+ } else
+ if (col == 2)
+ {
+ variant = m_list[row];
+ }
+ else
+ {
+ wxString tmp;
+ tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col );
+ variant = tmp;
+ }
+ }
+ virtual bool SetValue( const wxVariant &value, unsigned int col, unsigned int row )
+ {
+ if (col == 6)
+ {
+ m_dates[row] = value.GetDateTime();
+ } else
+ if (col == 3)
+ {
+ m_bools[row] = (int) value.GetBool();
+ } else
+ if (col == 2)
+ {
+ m_list[row] = value.GetString();
+ }
+ return true;
+ }
+
+ virtual void GetAttr( wxListItemAttr &attr, unsigned int col, unsigned int row )
+ {
+ if (row == 4)
+ attr.SetBackgroundColour( *wxGREEN );
+ }
+
+ wxArrayString m_list;
+ wxArrayInt m_bools;
+ wxArrayString m_colours;
+ wxArrayInt m_progress;
+ wxArrayDate m_dates;
+};
+
+// -------------------------------------
+// MyTextRenderer
+// -------------------------------------
+
+class MyTextRenderer: public wxDataViewTextRenderer
+{
+public:
+ MyTextRenderer( const wxString varianttype = wxT("string"),
+ wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT )
+ : wxDataViewTextRenderer( varianttype, mode ) { }
+
+ virtual bool Validate( wxVariant &value )
+ {
+ wxString str = value;
+ if (str.Length() > 10)
+ {
+ wxMessageDialog dlg( NULL, wxT("string too long") , wxT("Error") );
+ dlg.ShowModal();
+ return false;
+ }
+
+ return true;
+ }
+};
+
+
+// -------------------------------------
+// MyCustomRenderer
+// -------------------------------------
+
+class MyCustomRenderer: public wxDataViewCustomRenderer
+{
+public:
+ MyCustomRenderer() :
+ wxDataViewCustomRenderer( wxT("string"), wxDATAVIEW_CELL_ACTIVATABLE )
+ {
+ m_colour = wxT("black");
+ }
+ bool SetValue( const wxVariant &value )
+ {
+ m_colour = value.GetString();
+ return true;
+ }
+
+ bool GetValue( wxVariant &value ) const
+ {
+ value = m_colour;
+ return true;
+ }
+
+ bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) )
+ {
+ dc->SetPen( *wxBLACK_PEN );
+ if (m_colour == wxT("red"))
+ dc->SetBrush( *wxRED_BRUSH );
+ else if (m_colour == wxT("green"))
+ dc->SetBrush( *wxGREEN_BRUSH );
+ else
+ dc->SetBrush( *wxBLACK_BRUSH );
+ dc->DrawRectangle( rect );
+ return true;
+ }
+ wxSize GetSize() const
+ {
+ return wxSize(20,8);
+ }
+ bool Activate( wxRect WXUNUSED(rect),
+ wxDataViewListModel *WXUNUSED(model),
+ unsigned int WXUNUSED(col),
+ unsigned int WXUNUSED(row) )
+ {
+ return false;
+ }
+
+private:
+ wxString m_colour;
+};
+
+// -------------------------------------
+// MySpinCtrlInPlaceRenderer
+// -------------------------------------
+
+class MySpinCtrlInPlaceRenderer: public wxDataViewCustomRenderer
+{
+public:
+ MySpinCtrlInPlaceRenderer() :
+ wxDataViewCustomRenderer( wxT("long"), wxDATAVIEW_CELL_EDITABLE ) { }
+
+
+ virtual bool HasEditorCtrl()
+ {
+ return true;
+ }
+ virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value )
+ {
+ long l = value;
+ return new wxSpinCtrl( parent, wxID_ANY, wxEmptyString,
+ labelRect.GetTopLeft(), labelRect.GetSize(), 0, 0, 100, l );
+ }
+ virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value )
+ {
+ wxSpinCtrl *sc = (wxSpinCtrl*) editor;
+ long l = sc->GetValue();
+ value = l;
+ return true;
+ }
+
+ bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) )
+ {
+ wxString str;
+ str.Printf( wxT("%d"), (int) m_data );
+ dc->SetTextForeground( *wxBLACK );
+ dc->DrawText( str, rect.x, rect.y );
+ return true;
+ }
+ wxSize GetSize() const
+ {
+ return wxSize(80,16);
+ }
+ bool SetValue( const wxVariant &value )
+ {
+ m_data = value.GetLong();
+ return true;
+ }
+ bool GetValue( wxVariant &value ) const
+ {
+ value = m_data;
+ return true;
+ }
+
+
+private:
+ long m_data;
+};
+
+// -------------------------------------
+// MyUnsortedTextModel
+// -------------------------------------
+
+class MyUnsortedTextModel: public wxDataViewListModel
+{
+public:
+ MyUnsortedTextModel()
+ {
+ m_list.Add( wxT("This") );
+ m_list.Add( wxT("is") );
+ m_list.Add( wxT("an") );
+ m_list.Add( wxT("unsorted") );
+ m_list.Add( wxT("list") );
+ m_list.Add( wxT("of") );
+ m_list.Add( wxT("words.") );
+
+ m_ilist.Add( 0 );
+ m_ilist.Add( 1);
+ m_ilist.Add( 2 );
+ m_ilist.Add( 3 );
+ m_ilist.Add( 4 );
+ m_ilist.Add( 5 );
+ m_ilist.Add( 6 );
+
+ m_bitmap = wxBitmap( null_xpm );
+ }
+
+ virtual unsigned int GetRowCount() const
+ {
+ return m_list.GetCount();
+ }
+
+ virtual unsigned int GetColumnCount() const
+ {
+ return 4;
+ }
+
+ virtual wxString GetColumnType( unsigned int WXUNUSED(col) ) const
+ {
+ return wxT("string");
+ }
+
+ virtual void GetValue( wxVariant &variant, unsigned int col, unsigned int row ) const
+ {
+ if (col == 0)
+ {
+ variant = m_list[row];
+ return;
+ } else
+ if ((col == 2) || (col == 3))
+ {
+ variant << m_bitmap;
+ return;
+ } else
+ if (col == 4)
+ {
+ variant = (long) m_ilist[row];
+ return;
+ }
+
+ wxString tmp;
+ tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col );
+ variant = tmp;
+ }
+
+ virtual bool SetValue( const wxVariant &variant, unsigned int col, unsigned int row )
+ {
+ if (col == 0)
+ {
+ m_list[row] = variant.GetString();
+ return true;
+ } else
+ if (col == 4)
+ {
+ m_ilist[row] = variant.GetLong();
+ return true;
+ }
+ return false;
+
+ }
+
+ void AppendRow( const wxString &text )
+ {
+ m_list.Add( text );
+ m_ilist.Add( 0 );
+ RowAppended();
+ }
+
+ void PrependRow( const wxString &text )
+ {
+ m_list.Insert( text, 0 );
+ m_ilist.Insert( 0, 0 );
+ RowPrepended();
+ }
+
+ void InsertRowAt1( const wxString &text )
+ {
+ m_list.Insert( text, 1 );
+ m_ilist.Insert( 0, 1 );
+ RowInserted( 1 );
+ }
+
+ void DeleteRow( unsigned int index )
+ {
+ m_list.RemoveAt( index );
+ m_ilist.RemoveAt( index );
+ RowDeleted( index );
+ }
+
+ wxArrayString m_list;
+ wxArrayInt m_ilist;
+ wxBitmap m_bitmap;
+};