]> git.tdb.fi Git - libs/gltk.git/blob - examples/widgetdemo/demoselector.cpp
Rework how widget ownership works in Container
[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         get_or_create_layout();
13         layout->set_margin(GLtk::Sides(8));
14
15         GLtk::Column col(*layout);
16
17         add_new<GLtk::Label>("Select a widget:");
18
19         list.set_data(demos);
20         list.signal_item_selected.connect(sigc::mem_fun(this, &DemoSelector::item_selected));
21         add(list);
22         layout->set_expand(list, true, true);
23 }
24
25 void DemoSelector::add_demo(const string &t, GLtk::Panel *p)
26 {
27         Demo demo;
28         demo.title = t;
29         demo.panel = p;
30         demos.append(demo);
31 }
32
33 void DemoSelector::item_selected(unsigned i)
34 {
35         if(current_demo)
36                 current_demo->panel->set_visible(false);
37         current_demo = &demos.get(i);
38         current_demo->panel->set_visible(true);
39 }
40
41 string DemoSelector::get_demo_title(const Demo &demo)
42 {
43         return demo.title;
44 }