+ // first page of the notebook
+ // --------------------------
+
+ m_notebook = new wxNotebook( this, wxID_ANY );
+
+ wxPanel *firstPanel = new wxPanel( m_notebook, wxID_ANY );
+ m_myMusicModelViewCtrl =
+ new wxDataViewCtrl( firstPanel, ID_MUSIC_CTRL, wxDefaultPosition,
+ wxDefaultSize, wxDV_MULTIPLE|wxDV_VARIABLE_LINE_HEIGHT );
+
+ m_music_model = new MyMusicTreeModel;
+ m_myMusicModelViewCtrl->AssociateModel( m_music_model.get() );
+
+ m_myMusicModelViewCtrl->EnableDragSource( wxDF_UNICODETEXT );
+ m_myMusicModelViewCtrl->EnableDropTarget( wxDF_UNICODETEXT );
+
+ // column 0 of the view control:
+
+ wxDataViewTextRenderer *tr =
+ new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_INERT );
+ wxDataViewColumn *column0 =
+ new wxDataViewColumn( wxT("title"), tr, 0, 200, wxALIGN_LEFT,
+ wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE );
+ m_myMusicModelViewCtrl->AppendColumn( column0 );
+#if 0
+ // Call this and sorting is enabled
+ // immediatly upon start up.
+ column0->SetAsSortKey();
+#endif
+
+ // column 1 of the view control:
+
+ tr = new wxDataViewTextRenderer( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
+ wxDataViewColumn *column1 =
+ new wxDataViewColumn( wxT("artist"), tr, 1, 150, wxALIGN_LEFT,
+ wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_REORDERABLE |
+ wxDATAVIEW_COL_RESIZABLE );
+ column1->SetMinWidth(150); // this column can't be resized to be smaller
+ m_myMusicModelViewCtrl->AppendColumn( column1 );
+
+ // column 2 of the view control:
+
+ wxDataViewSpinRenderer *sr =
+ new wxDataViewSpinRenderer( 0, 2010, wxDATAVIEW_CELL_EDITABLE, wxALIGN_RIGHT );
+ wxDataViewColumn *column2 =
+ new wxDataViewColumn( wxT("year"), sr, 2, 60, wxALIGN_LEFT,
+ wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_REORDERABLE );
+ m_myMusicModelViewCtrl->AppendColumn( column2 );
+
+ // column 3 of the view control:
+
+ wxArrayString choices;
+ choices.Add( "good" );
+ choices.Add( "bad" );
+ choices.Add( "lousy" );
+ wxDataViewChoiceRenderer *c =
+ new wxDataViewChoiceRenderer( choices, wxDATAVIEW_CELL_EDITABLE, wxALIGN_RIGHT );
+ wxDataViewColumn *column3 =
+ new wxDataViewColumn( wxT("rating"), c, 3, 100, wxALIGN_LEFT,
+ wxDATAVIEW_COL_REORDERABLE | wxDATAVIEW_COL_RESIZABLE );
+ m_myMusicModelViewCtrl->AppendColumn( column3 );
+
+ // column 4 of the view control:
+
+ m_myMusicModelViewCtrl->AppendProgressColumn( wxT("popularity"), 4, wxDATAVIEW_CELL_INERT, 80 );
+
+ // column 5 of the view control:
+
+ MyCustomRenderer *cr = new MyCustomRenderer( wxDATAVIEW_CELL_ACTIVATABLE, wxALIGN_RIGHT );
+ wxDataViewColumn *column5 =
+ new wxDataViewColumn( wxT("custom"), cr, 5, -1, wxALIGN_LEFT,
+ wxDATAVIEW_COL_RESIZABLE );
+ m_myMusicModelViewCtrl->AppendColumn( column5 );
+
+ // complete this page:
+
+ wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
+ button_sizer->Add( new wxButton( firstPanel, ID_ADD_MOZART, _("Add Mozart")), 0, wxALL, 10 );
+ button_sizer->Add( new wxButton( firstPanel, ID_DELETE_MUSIC,_("Delete selected")), 0, wxALL, 10 );
+ button_sizer->Add( new wxButton( firstPanel, ID_DELETE_YEAR, _("Delete \"Year\" column")), 0, wxALL, 10 );
+ button_sizer->Add( new wxButton( firstPanel, ID_SELECT_NINTH,_("Select Ninth")), 0, wxALL, 10 );
+
+ wxSizer *firstPanelSz = new wxBoxSizer( wxVERTICAL );
+ m_myMusicModelViewCtrl->SetMinSize(wxSize(-1, 200));
+ firstPanelSz->Add(m_myMusicModelViewCtrl, 1, wxGROW|wxALL, 5);
+ firstPanelSz->Add(button_sizer);
+ firstPanel->SetSizerAndFit(firstPanelSz);
+
+
+ // second page of the notebook
+ // ---------------------------
+
+ wxPanel *secondPanel = new wxPanel( m_notebook, wxID_ANY );
+
+ m_myListModelViewCtrl = new wxDataViewCtrl( secondPanel, wxID_ANY, wxDefaultPosition,
+ wxDefaultSize, wxDV_MULTIPLE | wxDV_ROW_LINES);
+
+ m_list_model = new MyListModel;
+ m_myListModelViewCtrl->AssociateModel( m_list_model.get() );
+
+ // the various columns
+#if 1
+ m_myListModelViewCtrl->AppendTextColumn (wxT("editable string"), 0, wxDATAVIEW_CELL_EDITABLE, 120 );
+ m_myListModelViewCtrl->AppendIconTextColumn(wxIcon(wx_small_xpm), 1, wxDATAVIEW_CELL_INERT )->SetTitle( wxT("icon") );
+#else
+ m_myListModelViewCtrl->AppendTextColumn (wxT("editable string"), 0, wxDATAVIEW_CELL_EDITABLE );
+ m_myListModelViewCtrl->AppendIconTextColumn(wxT("icon"), 1, wxDATAVIEW_CELL_INERT );
+#endif
+ m_myListModelViewCtrl->AppendColumn(
+ new wxDataViewColumn(wxT("attributes"), new wxDataViewTextRendererAttr, 2 ));
+
+ // complete this page:
+
+ wxBoxSizer *button_sizer2 = new wxBoxSizer( wxHORIZONTAL );
+ button_sizer2->Add( new wxButton( secondPanel, ID_PREPEND_LIST,_("Prepend")), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_DELETE_LIST, _("Delete selected")), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_GOTO, _("Goto 50")), 0, wxALL, 10 );
+ button_sizer2->Add( new wxButton( secondPanel, ID_ADD_MANY, _("Add 1000")), 0, wxALL, 10 );
+
+ wxSizer *secondPanelSz = new wxBoxSizer( wxVERTICAL );
+ secondPanelSz->Add(m_myListModelViewCtrl, 1, wxGROW|wxALL, 5);
+ secondPanelSz->Add(button_sizer2);
+ secondPanel->SetSizerAndFit(secondPanelSz);
+
+
+
+ // third page of the notebook
+ // ---------------------------
+
+ wxPanel *thirdPanel = new wxPanel( m_notebook, wxID_ANY );
+
+ m_listctrl = new wxDataViewListCtrl( thirdPanel, wxID_ANY );
+ m_listctrl->AppendToggleColumn( wxT("Toggle") );
+ m_listctrl->AppendTextColumn( wxT("Text") );
+
+ wxVector<wxVariant> data;
+ data.push_back( true );
+ data.push_back( "row 1" );
+ m_listctrl->AppendItem( data );
+
+ data.clear();
+ data.push_back( false );
+ data.push_back( "row 3" );
+ m_listctrl->AppendItem( data );
+
+ // complete this page:
+
+ wxSizer *thirdPanelSz = new wxBoxSizer( wxVERTICAL );
+ thirdPanelSz->Add(m_listctrl, 1, wxGROW|wxALL, 5);
+ thirdPanel->SetSizerAndFit(thirdPanelSz);
+
+
+ // fourth page of the notebook
+ // ---------------------------
+
+ wxPanel *fourthPanel = new wxPanel( m_notebook, wxID_ANY );
+
+ m_treectrl = new wxDataViewTreeCtrl( fourthPanel, wxID_ANY );
+
+ wxImageList *ilist = new wxImageList( 16, 16 );
+ ilist->Add( wxIcon(wx_small_xpm) );
+ m_treectrl->SetImageList( ilist );
+
+ wxDataViewItem parent2 = m_treectrl->AppendContainer( wxDataViewItem(0),wxT("Root 1"), 0 );
+ m_treectrl->AppendItem( parent2, wxT("Child 1"), 0 );
+ m_treectrl->AppendItem( parent2, wxT("Child 2"), 0 );
+ m_treectrl->AppendItem( parent2, wxT("Child 3, very long, long, long, long"), 0 );
+
+ // complete this page:
+
+ wxSizer *fourthPanelSz = new wxBoxSizer( wxVERTICAL );
+ fourthPanelSz->Add(m_treectrl, 1, wxGROW|wxALL, 5);
+ fourthPanel->SetSizerAndFit(fourthPanelSz);
+
+
+
+ // complete GUI
+ // ------------
+
+ m_notebook->AddPage(firstPanel, "MyMusicTreeModel");
+ m_notebook->AddPage(secondPanel, "MyListModel");
+ m_notebook->AddPage(thirdPanel, "wxDataViewListCtrl");
+ m_notebook->AddPage(fourthPanel, "wxDataViewTreeCtrl");