]>
git.saurik.com Git - wxWidgets.git/blob - samples/dataview/dataview.cpp
a6259d29b1b5ec7d6785cd4f5428b6b346fc81e7
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxDataViewCtrl wxWidgets sample
4 // Author: Robert Roebling
5 // Modified by: Francesco Montorsi
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
23 #include "wx/datetime.h"
24 #include "wx/splitter.h"
25 #include "wx/aboutdlg.h"
26 #include "wx/choicdlg.h"
27 #include "wx/numdlg.h"
28 #include "wx/dataview.h"
29 #include "wx/spinctrl.h"
32 #include "../sample.xpm"
38 #define DEFAULT_ALIGN wxALIGN_LEFT
39 #define DATAVIEW_DEFAULT_STYLE (wxDV_MULTIPLE|wxDV_HORIZ_RULES|wxDV_VERT_RULES)
43 // -------------------------------------
45 // -------------------------------------
48 Implement this data model
50 -------------------------------------------------------------
53 3: You are not alone Michael Jackson 1995
54 4: Take a bow Madonna 1994
56 6: Ninth Symphony Ludwig v. Beethoven 1824
57 7: German Requiem Johannes Brahms 1868
61 class MyMusicModel
: public wxDataViewModel
66 virtual unsigned int GetColumnCount() const
71 virtual wxString
GetColumnType( unsigned int col
) const
76 virtual void GetValue( wxVariant
&variant
,
77 const wxDataViewItem
&item
, unsigned int col
) const
79 variant
= wxString("");
80 int ID
= item
.GetID();
83 case 1: if (col
== 0) variant
= wxString("My Music"); break;
84 case 2: if (col
== 0) variant
= wxString("Pop music"); break;
85 case 5: if (col
== 0) variant
= wxString("Classical music"); break;
90 case 0: variant
= wxString("You are not alone"); break;
91 case 1: variant
= wxString("Michael Jackson"); break;
92 case 2: variant
= wxString("1995");
100 case 0: variant
= wxString("Take a bow"); break;
101 case 1: variant
= wxString("Madonna"); break;
102 case 2: variant
= wxString("1994");
110 case 0: variant
= wxString("Ninth symphony"); break;
111 case 1: variant
= wxString("Ludwig v. Beethoven"); break;
112 case 2: variant
= wxString("1824");
120 case 0: variant
= wxString("German requiem"); break;
121 case 1: variant
= wxString("Johannes Brahms"); break;
122 case 2: variant
= wxString("1868");
130 virtual bool SetValue( const wxVariant
&variant
,
131 const wxDataViewItem
&item
, unsigned int col
)
137 /*****************************************************************
138 If wxDataViewItem is not valid in the two methods I quote above
139 then it means "return the child item from the invisible root".
140 ******************************************************************/
142 virtual bool HasChildren( const wxDataViewItem
&item
) const
144 int ID
= item
.GetID();
145 return ((ID
== 1) || (ID
== 2) || (ID
== 5) || (ID
== 0));
148 virtual wxDataViewItem
GetFirstChild( const wxDataViewItem
&parent
) const
150 int ID
= parent
.GetID();
153 case 0: return wxDataViewItem( 1 );
154 case 1: return wxDataViewItem( 2 );
155 case 2: return wxDataViewItem( 3 );
156 case 5: return wxDataViewItem( 6 );
159 return wxDataViewItem(0);
161 virtual wxDataViewItem
GetNextSibling( const wxDataViewItem
&item
) const
163 int ID
= item
.GetID();
166 case 2: return wxDataViewItem( 5 );
167 case 3: return wxDataViewItem( 4 );
168 case 6: return wxDataViewItem( 7 );
171 return wxDataViewItem(0);
175 // -------------------------------------
177 // -------------------------------------
179 class MyApp
: public wxApp
186 // -------------------------------------
188 // -------------------------------------
190 class MyFrame
: public wxFrame
193 MyFrame(wxFrame
*frame
, wxChar
*title
, int x
, int y
, int w
, int h
);
196 void OnQuit(wxCommandEvent
& event
);
197 void OnAbout(wxCommandEvent
& event
);
200 wxDataViewCtrl
* m_dataview
;
203 DECLARE_EVENT_TABLE()
206 // -------------------------------------
208 // -------------------------------------
212 bool MyApp::OnInit(void)
214 if ( !wxApp::OnInit() )
217 // build the first frame
219 new MyFrame(NULL
, wxT("wxDataViewCtrl feature test"), 10, 10, 800, 340);
232 // -------------------------------------
234 // -------------------------------------
239 ID_ABOUT
= wxID_ABOUT
,
243 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
244 EVT_MENU( ID_ABOUT
, MyFrame::OnAbout
)
245 EVT_MENU( ID_EXIT
, MyFrame::OnQuit
)
248 MyFrame::MyFrame(wxFrame
*frame
, wxChar
*title
, int x
, int y
, int w
, int h
):
249 wxFrame(frame
, wxID_ANY
, title
, wxPoint(x
, y
), wxSize(w
, h
))
251 SetIcon(wxICON(sample
));
255 wxMenu
*file_menu
= new wxMenu
;
256 file_menu
->Append(ID_ABOUT
, "&About");
257 file_menu
->AppendSeparator();
258 file_menu
->Append(ID_EXIT
, "E&xit");
260 wxMenuBar
*menu_bar
= new wxMenuBar
;
261 menu_bar
->Append(file_menu
, "&File");
263 SetMenuBar(menu_bar
);
266 m_dataview
= new wxDataViewCtrl( this, wxID_ANY
, wxDefaultPosition
,
269 wxObjectDataPtr
<MyMusicModel
> model(new MyMusicModel
);
270 m_dataview
->AssociateModel( model
.get() );
272 m_dataview
->AppendTextColumn( "Title", 0, wxDATAVIEW_CELL_INERT
, 200,
273 DEFAULT_ALIGN
, wxDATAVIEW_COL_SORTABLE
);
274 m_dataview
->AppendTextColumn( "Artist", 1, wxDATAVIEW_CELL_INERT
, 200,
275 DEFAULT_ALIGN
, wxDATAVIEW_COL_SORTABLE
);
276 m_dataview
->AppendTextColumn( "Year", 2, wxDATAVIEW_CELL_INERT
, 50,
280 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
) )
285 void MyFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
) )
287 wxAboutDialogInfo info
;
288 info
.SetName(_("DataView sample"));
289 info
.SetDescription(_("This sample demonstrates the dataview control handling"));
290 info
.SetCopyright(_T("(C) 2007 Robert Roebling"));