]> git.tdb.fi Git - libs/gltk.git/blob - examples/widgetdemo/demoselector.cpp
Add another example application to demonstrate various widgets
[libs/gltk.git] / examples / widgetdemo / demoselector.cpp
1 #include <msp/gltk/column.h>
2 #include <msp/gltk/label.h>
3 #include "demoselector.h"
4
5 using namespace std;
6 using namespace Msp;
7
8 DemoSelector::DemoSelector():
9         demos(&get_demo_title),
10         current_demo(0)
11 {
12         set_layout(new GLtk::Layout);
13         layout->set_margin(GLtk::Sides(8));
14
15         GLtk::Column col(*layout);
16
17         GLtk::Label *lbl = new GLtk::Label("Select a widget:");
18         add(*lbl);
19
20         list.set_data(demos);
21         list.signal_item_selected.connect(sigc::mem_fun(this, &DemoSelector::item_selected));
22         add(list);
23         layout->set_expand(list, true, true);
24 }
25
26 void DemoSelector::add_demo(const string &t, GLtk::Panel *p)
27 {
28         Demo demo;
29         demo.title = t;
30         demo.panel = p;
31         demos.append(demo);
32 }
33
34 void DemoSelector::item_selected(unsigned i)
35 {
36         if(current_demo)
37                 current_demo->panel->set_visible(false);
38         current_demo = &demos.get(i);
39         current_demo->panel->set_visible(true);
40 }
41
42 string DemoSelector::get_demo_title(const Demo &demo)
43 {
44         return demo.title;
45 }