]> git.tdb.fi Git - libs/gltk.git/blob - examples/widgetdemo/buttondemo.cpp
Rework how widget ownership works in Container
[libs/gltk.git] / examples / widgetdemo / buttondemo.cpp
1 #include <msp/gltk/button.h>
2 #include <msp/gltk/label.h>
3 #include <msp/strings/format.h>
4 #include "buttondemo.h"
5
6 using namespace std;
7 using namespace Msp;
8
9 ButtonDemo::ButtonDemo()
10 {
11         get_or_create_layout();
12
13         GLtk::Label *lbl_message = &add_new<GLtk::Label>();
14
15         vector<GLtk::Button *> buttons;
16         for(unsigned i=0; i<5; ++i)
17         {
18                 string text = format("Button %d", i+1);
19                 GLtk::Button *btn = &add_new<GLtk::Button>(text);
20                 btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(lbl_message, &GLtk::Label::set_text), text+" was clicked"));
21                 buttons.push_back(btn);
22                 if(i>0)
23                 {
24                         layout->add_constraint(*btn, GLtk::Layout::COPY_WIDTH, *buttons[0]);
25                         layout->add_constraint(*btn, GLtk::Layout::COPY_HEIGHT, *buttons[0]);
26
27                         if(i>=3)
28                         {
29                                 layout->add_constraint(*btn, GLtk::Layout::RIGHT_OF, *buttons[i-1]);
30                                 layout->add_constraint(*btn, GLtk::Layout::ALIGN_TOP, *buttons[i-1]);
31                         }
32                         else
33                         {
34                                 layout->add_constraint(*btn, GLtk::Layout::BELOW, *buttons[i-1]);
35                                 layout->add_constraint(*btn, GLtk::Layout::ALIGN_LEFT, *buttons[i-1]);
36                         }
37                 }
38         }
39
40         layout->add_constraint(*buttons[0], GLtk::Layout::BELOW, *lbl_message);
41
42         GLtk::Button *btn = &add_new<GLtk::Button>("A big one");
43         btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(lbl_message, &GLtk::Label::set_text), "The big button was clicked"));
44         buttons.push_back(btn);
45         layout->add_constraint(*btn, GLtk::Layout::ALIGN_TOP, *buttons[0]);
46         layout->add_constraint(*btn, GLtk::Layout::ALIGN_BOTTOM, *buttons[1]);
47         layout->add_constraint(*btn, GLtk::Layout::ALIGN_LEFT, *buttons[3]);
48         layout->add_constraint(*btn, GLtk::Layout::ALIGN_RIGHT, *buttons[4]);
49 }