]> git.tdb.fi Git - libs/gltk.git/blob - examples/widgetdemo/buttondemo.cpp
Add another example application to demonstrate various widgets
[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         set_layout(new GLtk::Layout);
12
13         GLtk::Label *lbl_message = new GLtk::Label;
14         add(*lbl_message);
15
16         vector<GLtk::Button *> buttons;
17         for(unsigned i=0; i<5; ++i)
18         {
19                 string text = format("Button %d", i+1);
20                 GLtk::Button *btn = new GLtk::Button(text);
21                 btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(lbl_message, &GLtk::Label::set_text), text+" was clicked"));
22                 buttons.push_back(btn);
23                 add(*btn);
24                 if(i>0)
25                 {
26                         layout->add_constraint(*btn, GLtk::Layout::COPY_WIDTH, *buttons[0]);
27                         layout->add_constraint(*btn, GLtk::Layout::COPY_HEIGHT, *buttons[0]);
28
29                         if(i>=3)
30                         {
31                                 layout->add_constraint(*btn, GLtk::Layout::RIGHT_OF, *buttons[i-1]);
32                                 layout->add_constraint(*btn, GLtk::Layout::ALIGN_TOP, *buttons[i-1]);
33                         }
34                         else
35                         {
36                                 layout->add_constraint(*btn, GLtk::Layout::BELOW, *buttons[i-1]);
37                                 layout->add_constraint(*btn, GLtk::Layout::ALIGN_LEFT, *buttons[i-1]);
38                         }
39                 }
40         }
41
42         layout->add_constraint(*buttons[0], GLtk::Layout::BELOW, *lbl_message);
43
44         GLtk::Button *btn = new GLtk::Button("A big one");
45         btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(lbl_message, &GLtk::Label::set_text), "The big button was clicked"));
46         buttons.push_back(btn);
47         add(*btn);
48         layout->add_constraint(*btn, GLtk::Layout::ALIGN_TOP, *buttons[0]);
49         layout->add_constraint(*btn, GLtk::Layout::ALIGN_BOTTOM, *buttons[1]);
50         layout->add_constraint(*btn, GLtk::Layout::ALIGN_LEFT, *buttons[3]);
51         layout->add_constraint(*btn, GLtk::Layout::ALIGN_RIGHT, *buttons[4]);
52 }