]> git.saurik.com Git - wxWidgets.git/blob - samples/dataview/dataview.cpp
wxDataViewCtrl now with editable text and multiple
[wxWidgets.git] / samples / dataview / dataview.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dataview.cpp
3 // Purpose: DataVewCtrl wxWidgets sample
4 // Author: Robert Roebling
5 // Modified by:
6 // Created: 06/01/06
7 // RCS-ID: $Id$
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #ifndef WX_PRECOMP
20 #include "wx/wx.h"
21 #endif
22
23 #ifndef __WXMSW__
24 #include "mondrian.xpm"
25 #endif
26
27 #include "wx/dataview.h"
28
29 // -------------------------------------
30 // MyTextModel
31 // -------------------------------------
32
33 class MyTextModel: public wxDataViewListModel
34 {
35 public:
36 MyTextModel()
37 {
38 size_t i;
39 for (i = 0; i < 1000; i++)
40 m_list.Add( wxT("Test") );
41 }
42
43 virtual size_t GetNumberOfRows()
44 { return 1000; }
45 virtual size_t GetNumberOfCols()
46 { return 3; }
47 // as reported by wxVariant
48 virtual wxString GetColType( size_t col )
49 { return wxT("string"); }
50
51 virtual wxVariant GetValue( size_t col, size_t row )
52 {
53 if (col == 2)
54 {
55 return m_list[row];
56 }
57 else
58 {
59 wxString tmp;
60 tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col );
61 return tmp;
62 }
63 }
64 virtual bool SetValue( wxVariant &value, size_t col, size_t row )
65 {
66 if (col == 2)
67 {
68 m_list[row] = value.GetString();
69 }
70 return true;
71 }
72
73 wxArrayString m_list;
74 };
75
76 // -------------------------------------
77 // MyApp
78 // -------------------------------------
79
80 class MyApp: public wxApp
81 {
82 public:
83 bool OnInit(void);
84 };
85
86 // -------------------------------------
87 // MyFrame
88 // -------------------------------------
89
90 class MyFrame: public wxFrame
91 {
92 public:
93 MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h);
94
95 public:
96 void OnQuit(wxCommandEvent& event);
97 void OnAbout(wxCommandEvent& event);
98
99 private:
100 wxDataViewCtrl* dataview_left;
101 wxDataViewCtrl* dataview_right;
102 };
103
104 // -------------------------------------
105 // MyApp
106 // -------------------------------------
107
108 #define DYNAMIC_QUIT wxID_EXIT
109 #define DYNAMIC_ABOUT wxID_ABOUT
110
111 IMPLEMENT_APP (MyApp)
112
113 bool MyApp::OnInit(void)
114 {
115 MyFrame *frame = new MyFrame(NULL, _T("Dynamic wxWidgets App"), 50, 50, 450, 340);
116
117 frame->Show(true);
118
119 SetTopWindow(frame);
120
121 return true;
122 }
123
124 // -------------------------------------
125 // MyFrame
126 // -------------------------------------
127
128 MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
129 wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
130 {
131 #ifdef __WXMSW__
132 SetIcon(wxIcon(_T("mondrian")));
133 #else
134 SetIcon(wxIcon(mondrian_xpm));
135 #endif
136
137 wxMenu *file_menu = new wxMenu;
138
139 file_menu->Append(DYNAMIC_ABOUT, _T("&About"));
140 file_menu->Append(DYNAMIC_QUIT, _T("E&xit"));
141 wxMenuBar *menu_bar = new wxMenuBar;
142 menu_bar->Append(file_menu, _T("&File"));
143 SetMenuBar(menu_bar);
144
145 // You used to have to do some casting for param 4, but now there are type-safe handlers
146 Connect( DYNAMIC_QUIT, wxID_ANY,
147 wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) );
148 Connect( DYNAMIC_ABOUT, wxID_ANY,
149 wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnAbout) );
150
151 CreateStatusBar();
152
153
154 // Left wxDataViewCtrl
155 dataview_left = new wxDataViewCtrl( this, -1 );
156
157 MyTextModel *model = new MyTextModel;
158 dataview_left->AssociateModel( model );
159
160 dataview_left->AppendStringColumn( wxT("first"), 0 );
161 dataview_left->AppendStringColumn( wxT("second"), 1 );
162 wxDataViewTextCell *cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
163 wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), cell, 2 );
164 dataview_left->AppendColumn( column );
165
166 // Right wxDataViewCtrl using the same model
167 dataview_right = new wxDataViewCtrl( this, -1 );
168 dataview_right->AssociateModel( model );
169
170 cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE );
171 column = new wxDataViewColumn( wxT("editable"), cell, 2 );
172 dataview_right->AppendColumn( column );
173 dataview_right->AppendStringColumn( wxT("first"), 0 );
174 dataview_right->AppendStringColumn( wxT("second"), 1 );
175
176 wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
177 sizer->Add( dataview_left, 1, wxGROW );
178 sizer->Add(10,10);
179 sizer->Add( dataview_right, 1, wxGROW );
180 SetSizer( sizer );
181 }
182
183 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
184 {
185 Close(true);
186 }
187
188 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
189 {
190 wxMessageDialog dialog(this, _T("This demonstrates the dataview control handling"),
191 _T("About DataView"), wxOK);
192
193 dialog.ShowModal();
194 }
195
196