]> git.tdb.fi Git - libs/gltk.git/blob - examples/widgetdemo/dialogdemo.cpp
63fb68e5b085bcf7c074e4303a6bea1515648e31
[libs/gltk.git] / examples / widgetdemo / dialogdemo.cpp
1 #include <msp/gltk/button.h>
2 #include <msp/gltk/dialog.h>
3 #include <msp/gltk/entry.h>
4 #include <msp/gltk/root.h>
5 #include "dialogdemo.h"
6
7 using namespace std;
8 using namespace Msp;
9
10 class PromptDialog: public GLtk::Dialog
11 {
12 public:
13         sigc::signal<void, string> signal_text_response;
14
15 private:
16         GLtk::Entry ent_text;
17
18 public:
19         PromptDialog();
20
21 protected:
22         void on_response(int) override;
23 };
24
25
26 DialogDemo::DialogDemo()
27 {
28         get_or_create_layout();
29
30         GLtk::Button *btn_prompt = new GLtk::Button("Enter some text");
31         add(*btn_prompt);
32         btn_prompt->signal_clicked.connect(sigc::mem_fun(this, &DialogDemo::button_clicked));
33
34         add(lbl_text);
35         layout->add_constraint(lbl_text, GLtk::Layout::BELOW, *btn_prompt);
36         layout->set_expand(lbl_text, true, false);
37 }
38
39 void DialogDemo::button_clicked()
40 {
41         GLtk::Root *root = find_ancestor<GLtk::Root>();
42         PromptDialog *dialog = GLtk::AutoDialog<PromptDialog>::create();
43         root->add(*dialog);
44         root->get_or_create_layout().set_gravity(*dialog, 0, 0);
45         dialog->signal_text_response.connect(sigc::mem_fun(this, &DialogDemo::got_response));
46 }
47
48 void DialogDemo::got_response(const string &text)
49 {
50         lbl_text.set_text(text);
51 }
52
53
54 PromptDialog::PromptDialog()
55 {
56         get_or_create_layout();
57
58         ent_text.set_edit_size(50, 1);
59         add(ent_text);
60         layout->set_expand(ent_text, true, false);
61
62         GLtk::Button *btn_ok = new GLtk::Button("OK");
63         add_button(*btn_ok, 1);
64         layout->add_constraint(*btn_ok, GLtk::Layout::FAR_BELOW, ent_text);
65         layout->set_gravity(*btn_ok, 1, -1);
66 }
67
68 void PromptDialog::on_response(int)
69 {
70         signal_text_response.emit(ent_text.get_text());
71 }