+#include <msp/gltk/button.h>
+#include <msp/gltk/label.h>
+#include <msp/strings/format.h>
+#include "buttondemo.h"
+
+using namespace std;
+using namespace Msp;
+
+ButtonDemo::ButtonDemo()
+{
+ set_layout(new GLtk::Layout);
+
+ GLtk::Label *lbl_message = new GLtk::Label;
+ add(*lbl_message);
+
+ vector<GLtk::Button *> buttons;
+ for(unsigned i=0; i<5; ++i)
+ {
+ string text = format("Button %d", i+1);
+ GLtk::Button *btn = new GLtk::Button(text);
+ btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(lbl_message, &GLtk::Label::set_text), text+" was clicked"));
+ buttons.push_back(btn);
+ add(*btn);
+ if(i>0)
+ {
+ layout->add_constraint(*btn, GLtk::Layout::COPY_WIDTH, *buttons[0]);
+ layout->add_constraint(*btn, GLtk::Layout::COPY_HEIGHT, *buttons[0]);
+
+ if(i>=3)
+ {
+ layout->add_constraint(*btn, GLtk::Layout::RIGHT_OF, *buttons[i-1]);
+ layout->add_constraint(*btn, GLtk::Layout::ALIGN_TOP, *buttons[i-1]);
+ }
+ else
+ {
+ layout->add_constraint(*btn, GLtk::Layout::BELOW, *buttons[i-1]);
+ layout->add_constraint(*btn, GLtk::Layout::ALIGN_LEFT, *buttons[i-1]);
+ }
+ }
+ }
+
+ layout->add_constraint(*buttons[0], GLtk::Layout::BELOW, *lbl_message);
+
+ GLtk::Button *btn = new GLtk::Button("A big one");
+ btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(lbl_message, &GLtk::Label::set_text), "The big button was clicked"));
+ buttons.push_back(btn);
+ add(*btn);
+ layout->add_constraint(*btn, GLtk::Layout::ALIGN_TOP, *buttons[0]);
+ layout->add_constraint(*btn, GLtk::Layout::ALIGN_BOTTOM, *buttons[1]);
+ layout->add_constraint(*btn, GLtk::Layout::ALIGN_LEFT, *buttons[3]);
+ layout->add_constraint(*btn, GLtk::Layout::ALIGN_RIGHT, *buttons[4]);
+}