]> git.tdb.fi Git - libs/gltk.git/blob - examples/widgetdemo/widgetdemo.cpp
Rework how widget ownership works in Container
[libs/gltk.git] / examples / widgetdemo / widgetdemo.cpp
1 #include <msp/gl/framebuffer.h>
2 #include <msp/gltk/layout.h>
3 #include "buttondemo.h"
4 #include "dialogdemo.h"
5 #include "dropdowndemo.h"
6 #include "entrydemo.h"
7 #include "toggledemo.h"
8 #include "widgetdemo.h"
9
10 using namespace std;
11 using namespace Msp;
12
13 WidgetDemo::WidgetDemo(int, char **):
14         window(800, 600),
15         gl_device(window),
16         view(window),
17         resources("basic.skin"),
18         root(resources, window)
19 {
20         window.set_title("GLtk widget demo");
21         window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &WidgetDemo::exit), 0));
22
23         GLtk::Layout &root_layout = root.get_or_create_layout();
24
25         root.add(selector);
26         root_layout.set_expand(selector, false, true);
27
28         add_demo<ButtonDemo>("Button");
29         add_demo<DialogDemo>("Dialog");
30         add_demo<DropdownDemo>("Dropdown");
31         add_demo<EntryDemo>("Entry");
32         add_demo<ToggleDemo>("Toggle");
33
34         view.set_content(&root);
35 }
36
37 int WidgetDemo::main()
38 {
39         window.show();
40         return Application::main();
41 }
42
43 void WidgetDemo::tick()
44 {
45         window.tick();
46         view.render();
47 }
48
49 template<typename T>
50 void WidgetDemo::add_demo(const string &title)
51 {
52         GLtk::Layout &root_layout = root.get_or_create_layout();
53
54         T &demo = root.add_new<T>();
55         demo.set_visible(false);
56         root_layout.add_constraint(demo, GLtk::Layout::RIGHT_OF, selector);
57         root_layout.set_expand(demo, true, true);
58
59         selector.add_demo(title, &demo);
60 }