]> git.tdb.fi Git - libs/gltk.git/blobdiff - examples/widgetdemo/buttondemo.cpp
Add another example application to demonstrate various widgets
[libs/gltk.git] / examples / widgetdemo / buttondemo.cpp
diff --git a/examples/widgetdemo/buttondemo.cpp b/examples/widgetdemo/buttondemo.cpp
new file mode 100644 (file)
index 0000000..f189056
--- /dev/null
@@ -0,0 +1,52 @@
+#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]);
+}