]>
Commit | Line | Data |
---|---|---|
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 | #include "wx/datetime.h" | |
24 | ||
25 | #ifndef __WXMSW__ | |
26 | #include "mondrian.xpm" | |
27 | #endif | |
28 | ||
29 | #include "wx/dataview.h" | |
30 | ||
31 | // ------------------------------------- | |
32 | // MyTextModel | |
33 | // ------------------------------------- | |
34 | ||
35 | WX_DECLARE_LIST(wxDateTime,wxArrayDate); | |
36 | #include <wx/listimpl.cpp> | |
37 | WX_DEFINE_LIST(wxArrayDate); | |
38 | ||
39 | class MyTextModel: public wxDataViewListModel | |
40 | { | |
41 | public: | |
42 | MyTextModel() | |
43 | { | |
44 | size_t i; | |
45 | for (i = 0; i < 1000; i++) | |
46 | m_list.Add( wxT("Test") ); | |
47 | for (i = 0; i < 500; i++) | |
48 | { m_bools.Add( 0 ); m_bools.Add( 1 ); } | |
49 | for (i = 0; i < 500; i++) | |
50 | { m_colours.Add( wxT("red") ); m_colours.Add( wxT("green") ); } | |
51 | for (i = 0; i < 1000; i++) | |
52 | { m_progress.Add( i/10 ); } | |
53 | for (i = 0; i < 1000; i++) | |
54 | { | |
55 | wxDateTime *date = new wxDateTime( wxDateTime::Now() ); | |
56 | m_dates.Append( date ); | |
57 | } | |
58 | } | |
59 | ||
60 | virtual size_t GetNumberOfRows() | |
61 | { return 1000; } | |
62 | virtual size_t GetNumberOfCols() | |
63 | { return 7; } | |
64 | ||
65 | // as reported by wxVariant | |
66 | virtual wxString GetColType( size_t col ) | |
67 | { | |
68 | if (col == 6) | |
69 | return wxT("datetime"); | |
70 | ||
71 | if (col == 5) | |
72 | return wxT("long"); | |
73 | ||
74 | if (col == 3) | |
75 | return wxT("bool"); | |
76 | ||
77 | return wxT("string"); | |
78 | } | |
79 | ||
80 | virtual void GetValue( wxVariant &variant, size_t col, size_t row ) | |
81 | { | |
82 | if (col == 6) | |
83 | { | |
84 | variant = (wxDateTime) *m_dates[row]; | |
85 | } else | |
86 | if (col == 5) | |
87 | { | |
88 | variant = (long) m_progress[row]; | |
89 | } else | |
90 | if (col == 4) | |
91 | { | |
92 | variant = m_colours[row]; | |
93 | } else | |
94 | if (col == 3) | |
95 | { | |
96 | variant = (bool) m_bools[row]; | |
97 | } else | |
98 | if (col == 2) | |
99 | { | |
100 | variant = m_list[row]; | |
101 | } | |
102 | else | |
103 | { | |
104 | wxString tmp; | |
105 | tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col ); | |
106 | variant = tmp; | |
107 | } | |
108 | } | |
109 | virtual bool SetValue( wxVariant &value, size_t col, size_t row ) | |
110 | { | |
111 | if (col == 6) | |
112 | { | |
113 | *m_dates[row] = value.GetDateTime(); | |
114 | } else | |
115 | if (col == 3) | |
116 | { | |
117 | m_bools[row] = (int) value.GetBool(); | |
118 | } else | |
119 | if (col == 2) | |
120 | { | |
121 | m_list[row] = value.GetString(); | |
122 | } | |
123 | return true; | |
124 | } | |
125 | ||
126 | wxArrayString m_list; | |
127 | wxArrayInt m_bools; | |
128 | wxArrayString m_colours; | |
129 | wxArrayInt m_progress; | |
130 | wxArrayDate m_dates; | |
131 | }; | |
132 | ||
133 | // ------------------------------------- | |
134 | // MyCustomCell | |
135 | // ------------------------------------- | |
136 | ||
137 | class MyCustomCell: public wxDataViewCustomCell | |
138 | { | |
139 | public: | |
140 | MyCustomCell() : | |
141 | wxDataViewCustomCell( wxT("string"), wxDATAVIEW_CELL_ACTIVATABLE ) | |
142 | { | |
143 | m_colour = wxT("black"); | |
144 | } | |
145 | bool SetValue( const wxVariant &value ) | |
146 | { | |
147 | m_colour = value.GetString(); | |
148 | return true; | |
149 | } | |
150 | bool Render( wxRect rect, wxDC *dc, int WXUNUSED(state) ) | |
151 | { | |
152 | dc->SetPen( *wxBLACK_PEN ); | |
153 | if (m_colour == wxT("red")) | |
154 | dc->SetBrush( *wxRED_BRUSH ); | |
155 | else if (m_colour == wxT("green")) | |
156 | dc->SetBrush( *wxGREEN_BRUSH ); | |
157 | else | |
158 | dc->SetBrush( *wxBLACK_BRUSH ); | |
159 | dc->DrawRectangle( rect ); | |
160 | return true; | |
161 | } | |
162 | wxSize GetSize() | |
163 | { | |
164 | return wxSize(20,8); | |
165 | } | |
166 | bool Activate( wxRect WXUNUSED(rect), | |
167 | wxDataViewListModel *WXUNUSED(model), | |
168 | size_t WXUNUSED(col), | |
169 | size_t WXUNUSED(row) ) | |
170 | { | |
171 | return false; | |
172 | } | |
173 | ||
174 | private: | |
175 | wxString m_colour; | |
176 | }; | |
177 | ||
178 | // ------------------------------------- | |
179 | // MyUnsortedTextModel | |
180 | // ------------------------------------- | |
181 | ||
182 | class MyUnsortedTextModel: public wxDataViewListModel | |
183 | { | |
184 | public: | |
185 | MyUnsortedTextModel() | |
186 | { | |
187 | m_list.Add( wxT("This") ); | |
188 | m_list.Add( wxT("is") ); | |
189 | m_list.Add( wxT("an") ); | |
190 | m_list.Add( wxT("unsorted") ); | |
191 | m_list.Add( wxT("list") ); | |
192 | m_list.Add( wxT("of") ); | |
193 | m_list.Add( wxT("words.") ); | |
194 | } | |
195 | ||
196 | virtual size_t GetNumberOfRows() { return m_list.GetCount(); } | |
197 | virtual size_t GetNumberOfCols() { return 2; } | |
198 | virtual wxString GetColType( size_t WXUNUSED(col) ) { return wxT("string"); } | |
199 | virtual void GetValue( wxVariant &variant, size_t col, size_t row ) | |
200 | { | |
201 | if (col == 0) | |
202 | { | |
203 | variant = m_list[row]; | |
204 | return; | |
205 | } | |
206 | wxString tmp; | |
207 | tmp.Printf( wxT("item(%d;%d)"), (int)row, (int)col ); | |
208 | variant = tmp; | |
209 | } | |
210 | virtual bool SetValue( wxVariant &variant, size_t col, size_t row ) | |
211 | { | |
212 | if (col == 0) | |
213 | { | |
214 | m_list[row] = variant.GetString(); | |
215 | return true; | |
216 | } | |
217 | return false; | |
218 | ||
219 | } | |
220 | ||
221 | wxArrayString m_list; | |
222 | }; | |
223 | ||
224 | // ------------------------------------- | |
225 | // MyApp | |
226 | // ------------------------------------- | |
227 | ||
228 | class MyApp: public wxApp | |
229 | { | |
230 | public: | |
231 | bool OnInit(void); | |
232 | }; | |
233 | ||
234 | // ------------------------------------- | |
235 | // MyFrame | |
236 | // ------------------------------------- | |
237 | ||
238 | class MyFrame: public wxFrame | |
239 | { | |
240 | public: | |
241 | MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h); | |
242 | ||
243 | public: | |
244 | void OnQuit(wxCommandEvent& event); | |
245 | void OnAbout(wxCommandEvent& event); | |
246 | ||
247 | private: | |
248 | wxDataViewCtrl* dataview_left; | |
249 | wxDataViewCtrl* dataview_right; | |
250 | }; | |
251 | ||
252 | // ------------------------------------- | |
253 | // MySortingFrame | |
254 | // ------------------------------------- | |
255 | ||
256 | enum my_events | |
257 | { | |
258 | ID_APPEND_ROW_LEFT = 1000, | |
259 | ID_PREPEND_ROW_LEFT, | |
260 | ID_INSERT_ROW_LEFT, | |
261 | ID_DELETE_ROW_LEFT, | |
262 | ID_EDIT_ROW_LEFT, | |
263 | ||
264 | ID_APPEND_ROW_RIGHT, | |
265 | ID_PREPEND_ROW_RIGHT, | |
266 | ID_INSERT_ROW_RIGHT, | |
267 | ID_DELETE_ROW_RIGHT, | |
268 | ID_EDIT_ROW_RIGHT | |
269 | }; | |
270 | ||
271 | class MySortingFrame: public wxFrame | |
272 | { | |
273 | public: | |
274 | MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h); | |
275 | ||
276 | public: | |
277 | void OnQuit(wxCommandEvent& event); | |
278 | void OnAbout(wxCommandEvent& event); | |
279 | ||
280 | void OnAppendRowLeft(wxCommandEvent& event); | |
281 | void OnPrependRowLeft(wxCommandEvent& event); | |
282 | void OnInsertRowLeft(wxCommandEvent& event); | |
283 | void OnDeleteRowLeft(wxCommandEvent& event); | |
284 | void OnEditRowLeft(wxCommandEvent& event); | |
285 | ||
286 | void OnAppendRowRight(wxCommandEvent& event); | |
287 | void OnPrependRowRight(wxCommandEvent& event); | |
288 | void OnInsertRowRight(wxCommandEvent& event); | |
289 | void OnDeleteRowRight(wxCommandEvent& event); | |
290 | void OnEditRowRight(wxCommandEvent& event); | |
291 | ||
292 | private: | |
293 | wxDataViewCtrl* dataview_left; | |
294 | wxDataViewCtrl* dataview_right; | |
295 | ||
296 | DECLARE_EVENT_TABLE() | |
297 | }; | |
298 | ||
299 | // ------------------------------------- | |
300 | // MyApp | |
301 | // ------------------------------------- | |
302 | ||
303 | #define DYNAMIC_QUIT wxID_EXIT | |
304 | #define DYNAMIC_ABOUT wxID_ABOUT | |
305 | ||
306 | IMPLEMENT_APP (MyApp) | |
307 | ||
308 | bool MyApp::OnInit(void) | |
309 | { | |
310 | MyFrame *frame = new MyFrame(NULL, wxT("wxDataViewCtrl feature test"), 10, 10, 800, 340); | |
311 | frame->Show(true); | |
312 | ||
313 | MySortingFrame *frame2 = new MySortingFrame(NULL, wxT("wxDataViewCtrl sorting test"), 10, 350, 600, 300); | |
314 | frame2->Show(true); | |
315 | ||
316 | SetTopWindow(frame); | |
317 | ||
318 | return true; | |
319 | } | |
320 | ||
321 | // ------------------------------------- | |
322 | // MyFrame | |
323 | // ------------------------------------- | |
324 | ||
325 | MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h): | |
326 | wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h)) | |
327 | { | |
328 | #ifdef __WXMSW__ | |
329 | SetIcon(wxIcon(_T("mondrian"))); | |
330 | #else | |
331 | SetIcon(wxIcon(mondrian_xpm)); | |
332 | #endif | |
333 | ||
334 | wxMenu *file_menu = new wxMenu; | |
335 | ||
336 | file_menu->Append(DYNAMIC_ABOUT, _T("&About")); | |
337 | file_menu->Append(DYNAMIC_QUIT, _T("E&xit")); | |
338 | wxMenuBar *menu_bar = new wxMenuBar; | |
339 | menu_bar->Append(file_menu, _T("&File")); | |
340 | SetMenuBar(menu_bar); | |
341 | ||
342 | // You used to have to do some casting for param 4, but now there are type-safe handlers | |
343 | Connect( DYNAMIC_QUIT, wxID_ANY, | |
344 | wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) ); | |
345 | Connect( DYNAMIC_ABOUT, wxID_ANY, | |
346 | wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnAbout) ); | |
347 | ||
348 | CreateStatusBar(); | |
349 | ||
350 | ||
351 | // Left wxDataViewCtrl | |
352 | dataview_left = new wxDataViewCtrl( this, wxID_ANY ); | |
353 | ||
354 | MyTextModel *model = new MyTextModel; | |
355 | dataview_left->AssociateModel( model ); | |
356 | ||
357 | dataview_left->AppendTextColumn( wxT("first"), 0 ); | |
358 | dataview_left->AppendTextColumn( wxT("second"), 1 ); | |
359 | ||
360 | wxDataViewTextCell *text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE ); | |
361 | wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 2 ); | |
362 | dataview_left->AppendColumn( column ); | |
363 | ||
364 | dataview_left->AppendToggleColumn( wxT("fourth"), 3 ); | |
365 | ||
366 | MyCustomCell *custom_cell = new MyCustomCell; | |
367 | column = new wxDataViewColumn( wxT("custom"), custom_cell, 4 ); | |
368 | dataview_left->AppendColumn( column ); | |
369 | ||
370 | dataview_left->AppendProgressColumn( wxT("progress"), 5 ); | |
371 | ||
372 | dataview_left->AppendDateColumn( wxT("date"), 6 ); | |
373 | ||
374 | // Right wxDataViewCtrl using the same model | |
375 | dataview_right = new wxDataViewCtrl( this, wxID_ANY ); | |
376 | dataview_right->AssociateModel( model ); | |
377 | ||
378 | text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE ); | |
379 | column = new wxDataViewColumn( wxT("editable"), text_cell, 2 ); | |
380 | dataview_right->AppendColumn( column ); | |
381 | dataview_right->AppendTextColumn( wxT("first"), 0 ); | |
382 | dataview_right->AppendTextColumn( wxT("second"), 1 ); | |
383 | wxDataViewToggleCell *toggle_cell = new wxDataViewToggleCell( wxT("bool"), wxDATAVIEW_CELL_ACTIVATABLE ); | |
384 | column = new wxDataViewColumn( wxT("bool"), toggle_cell, 3 ); | |
385 | dataview_right->AppendColumn( column ); | |
386 | ||
387 | dataview_right->AppendDateColumn( wxT("date"), 6 ); | |
388 | ||
389 | // layout dataview controls. | |
390 | ||
391 | wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL ); | |
392 | sizer->Add( dataview_left, 3, wxGROW ); | |
393 | sizer->Add(10,10); | |
394 | sizer->Add( dataview_right, 2, wxGROW ); | |
395 | SetSizer( sizer ); | |
396 | } | |
397 | ||
398 | void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) | |
399 | { | |
400 | Close(true); | |
401 | } | |
402 | ||
403 | void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) | |
404 | { | |
405 | wxMessageDialog dialog(this, _T("This demonstrates the dataview control handling"), | |
406 | _T("About DataView"), wxOK); | |
407 | ||
408 | dialog.ShowModal(); | |
409 | } | |
410 | ||
411 | // ------------------------------------- | |
412 | // MySortingFrame | |
413 | // ------------------------------------- | |
414 | ||
415 | BEGIN_EVENT_TABLE(MySortingFrame,wxFrame) | |
416 | EVT_BUTTON( ID_APPEND_ROW_LEFT, MySortingFrame::OnAppendRowLeft ) | |
417 | END_EVENT_TABLE() | |
418 | ||
419 | MySortingFrame::MySortingFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h): | |
420 | wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h)) | |
421 | { | |
422 | #ifdef __WXMSW__ | |
423 | SetIcon(wxIcon(_T("mondrian"))); | |
424 | #else | |
425 | SetIcon(wxIcon(mondrian_xpm)); | |
426 | #endif | |
427 | ||
428 | wxMenu *file_menu = new wxMenu; | |
429 | ||
430 | file_menu->Append(DYNAMIC_ABOUT, _T("&About")); | |
431 | file_menu->Append(DYNAMIC_QUIT, _T("E&xit")); | |
432 | wxMenuBar *menu_bar = new wxMenuBar; | |
433 | menu_bar->Append(file_menu, _T("&File")); | |
434 | SetMenuBar(menu_bar); | |
435 | ||
436 | // You used to have to do some casting for param 4, but now there are type-safe handlers | |
437 | Connect( DYNAMIC_QUIT, wxID_ANY, | |
438 | wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MySortingFrame::OnQuit) ); | |
439 | Connect( DYNAMIC_ABOUT, wxID_ANY, | |
440 | wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MySortingFrame::OnAbout) ); | |
441 | ||
442 | CreateStatusBar(); | |
443 | ||
444 | ||
445 | // Left wxDataViewCtrl | |
446 | dataview_left = new wxDataViewCtrl( this, wxID_ANY ); | |
447 | ||
448 | MyUnsortedTextModel *model = new MyUnsortedTextModel; | |
449 | dataview_left->AssociateModel( model ); | |
450 | wxDataViewTextCell *text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE ); | |
451 | wxDataViewColumn *column = new wxDataViewColumn( wxT("editable"), text_cell, 0 ); | |
452 | dataview_left->AppendColumn( column ); | |
453 | dataview_left->AppendTextColumn( wxT("second"), 1 ); | |
454 | ||
455 | // Right wxDataViewCtrl using the sorting model | |
456 | dataview_right = new wxDataViewCtrl( this, wxID_ANY ); | |
457 | wxDataViewSortedListModel *sorted_model = | |
458 | new wxDataViewSortedListModel( model ); | |
459 | dataview_right->AssociateModel( sorted_model ); | |
460 | text_cell = new wxDataViewTextCell( wxT("string"), wxDATAVIEW_CELL_EDITABLE ); | |
461 | column = new wxDataViewColumn( wxT("editable"), text_cell, 0 ); | |
462 | dataview_right->AppendColumn( column ); | |
463 | dataview_right->AppendTextColumn( wxT("second"), 1 ); | |
464 | ||
465 | // layout dataview controls. | |
466 | ||
467 | wxBoxSizer *top_sizer = new wxBoxSizer( wxHORIZONTAL ); | |
468 | top_sizer->Add( dataview_left, 1, wxGROW ); | |
469 | top_sizer->Add(10,10); | |
470 | top_sizer->Add( dataview_right, 1, wxGROW ); | |
471 | ||
472 | wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL ); | |
473 | button_sizer->Add( 10, 10, 1 ); | |
474 | wxFlexGridSizer *left_sizer = new wxFlexGridSizer( 2 ); | |
475 | left_sizer->Add( new wxButton( this, ID_APPEND_ROW_LEFT, wxT("Append") ), 0, wxALL, 5 ); | |
476 | left_sizer->Add( new wxButton( this, ID_PREPEND_ROW_LEFT, wxT("Prepend") ), 0, wxALL, 5 ); | |
477 | left_sizer->Add( new wxButton( this, ID_INSERT_ROW_LEFT, wxT("Insert") ), 0, wxALL, 5 ); | |
478 | left_sizer->Add( new wxButton( this, ID_DELETE_ROW_LEFT, wxT("Delete") ), 0, wxALL, 5 ); | |
479 | left_sizer->Add( new wxButton( this, ID_EDIT_ROW_LEFT, wxT("Edit") ), 0, wxALL, 5 ); | |
480 | button_sizer->Add( left_sizer ); | |
481 | button_sizer->Add( 10, 10, 2 ); | |
482 | wxFlexGridSizer *right_sizer = new wxFlexGridSizer( 2 ); | |
483 | right_sizer->Add( new wxButton( this, ID_APPEND_ROW_RIGHT, wxT("Append") ), 0, wxALL, 5 ); | |
484 | right_sizer->Add( new wxButton( this, ID_PREPEND_ROW_RIGHT, wxT("Prepend") ), 0, wxALL, 5 ); | |
485 | right_sizer->Add( new wxButton( this, ID_INSERT_ROW_RIGHT, wxT("Insert") ), 0, wxALL, 5 ); | |
486 | right_sizer->Add( new wxButton( this, ID_DELETE_ROW_RIGHT, wxT("Delete") ), 0, wxALL, 5 ); | |
487 | right_sizer->Add( new wxButton( this, ID_EDIT_ROW_RIGHT, wxT("Edit") ), 0, wxALL, 5 ); | |
488 | button_sizer->Add( right_sizer ); | |
489 | button_sizer->Add( 10, 10, 1 ); | |
490 | ||
491 | wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL ); | |
492 | main_sizer->Add( top_sizer, 1, wxGROW ); | |
493 | main_sizer->Add( button_sizer, 0, wxGROW ); | |
494 | ||
495 | SetSizer( main_sizer ); | |
496 | } | |
497 | ||
498 | void MySortingFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) | |
499 | { | |
500 | Close(true); | |
501 | } | |
502 | ||
503 | void MySortingFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) | |
504 | { | |
505 | wxMessageDialog dialog(this, _T("This demonstrates the dataview control sorting"), | |
506 | _T("About DataView"), wxOK); | |
507 | ||
508 | dialog.ShowModal(); | |
509 | } | |
510 | ||
511 | void MySortingFrame::OnAppendRowLeft(wxCommandEvent& WXUNUSED(event)) | |
512 | { | |
513 | } | |
514 | ||
515 | void MySortingFrame::OnPrependRowLeft(wxCommandEvent& WXUNUSED(event)) | |
516 | { | |
517 | } | |
518 | ||
519 | void MySortingFrame::OnInsertRowLeft(wxCommandEvent& WXUNUSED(event)) | |
520 | { | |
521 | } | |
522 | ||
523 | void MySortingFrame::OnDeleteRowLeft(wxCommandEvent& WXUNUSED(event)) | |
524 | { | |
525 | } | |
526 | ||
527 | void MySortingFrame::OnEditRowLeft(wxCommandEvent& WXUNUSED(event)) | |
528 | { | |
529 | } | |
530 | ||
531 | void MySortingFrame::OnAppendRowRight(wxCommandEvent& WXUNUSED(event)) | |
532 | { | |
533 | } | |
534 | ||
535 | void MySortingFrame::OnPrependRowRight(wxCommandEvent& WXUNUSED(event)) | |
536 | { | |
537 | } | |
538 | ||
539 | void MySortingFrame::OnInsertRowRight(wxCommandEvent& WXUNUSED(event)) | |
540 | { | |
541 | } | |
542 | ||
543 | void MySortingFrame::OnDeleteRowRight(wxCommandEvent& WXUNUSED(event)) | |
544 | { | |
545 | } | |
546 | ||
547 | void MySortingFrame::OnEditRowRight(wxCommandEvent& WXUNUSED(event)) | |
548 | { | |
549 | } | |
550 |