2 #include <wx/dataview.h>
3 #include <boost/bind.hpp>
8 class Model : public wxDataViewModel
13 _content.push_back ("cock");
14 _content.push_back ("piss");
15 _content.push_back ("partridge");
20 unsigned int GetColumnCount () const {
24 wxString GetColumnType (unsigned int) const {
28 void GetValue (wxVariant& val, const wxDataViewItem& item, unsigned int column) const {
29 val = wxVariant (_content[((size_t) item.GetID()) - 1]);
32 bool SetValue (const wxVariant &, const wxDataViewItem &, unsigned int) {
36 wxDataViewItem GetParent(const wxDataViewItem& item) const {
37 return wxDataViewItem (0);
40 bool IsContainer(const wxDataViewItem &) const {
44 unsigned GetChildren(const wxDataViewItem& item, wxDataViewItemArray& children) const {
49 for (int i = 0; i < _data.GetCount(); ++i) {
50 children.Add (_data[i]);
53 return _data.GetCount ();
56 void set_search (wxTextCtrl* search)
59 update (search->GetValue ());
62 void update (wxString search)
67 for (size_t i = 0; i < _content.size(); ++i) {
68 if (search.IsEmpty() || _content[i].Find(search) != wxNOT_FOUND) {
69 _data.Add (wxDataViewItem ((void *) (i + 1)));
73 ItemsAdded (wxDataViewItem (0), _data);
77 std::vector<wxString> _content;
78 wxDataViewItemArray _data;
81 class App : public wxApp
85 if (!wxApp::OnInit()) {
89 wxFrame* frame = new wxFrame (0, wxID_ANY, "Test");
91 wxDataViewCtrl* ctrl = new wxDataViewCtrl (frame, wxID_ANY, wxDefaultPosition, wxSize (300, 600), wxDV_NO_HEADER);
92 wxDataViewTextRenderer* renderer = new wxDataViewTextRenderer ("string", wxDATAVIEW_CELL_INERT);
93 wxDataViewColumn* column = new wxDataViewColumn ("string", renderer, 0, 100, wxAlignment(wxALIGN_LEFT));
94 Model* model = new Model;
95 ctrl->AssociateModel (model);
96 ctrl->AppendColumn (column);
97 ctrl->SetExpanderColumn (column);
99 wxTextCtrl* search = new wxTextCtrl (frame, wxID_ANY);
100 search->Bind (wxEVT_TEXT, boost::bind (&Model::set_search, model, search));
102 wxSizer* sizer = new wxBoxSizer (wxVERTICAL);
105 frame->SetSizerAndFit (sizer);