]> git.tdb.fi Git - libs/gltk.git/blob - source/dialog.h
e910085ca19af8c0ae3c0cd49f927827ebcf6fe1
[libs/gltk.git] / source / dialog.h
1 #ifndef MSP_GLTK_DIALOG_H_
2 #define MSP_GLTK_DIALOG_H_
3
4 #include "panel.h"
5
6 namespace Msp {
7 namespace GLtk {
8
9 class Button;
10
11 /**
12 A Dialog is used for temporary interaction with the user.  When any of the
13 Dialog's action buttons are clicked, it will emit a signal and delete itself.
14 */
15 class Dialog: public Panel
16 {
17 public:
18         class Loader: public DataFile::DerivedObjectLoader<Dialog, Panel::Loader>
19         {
20         public:
21                 Loader(Dialog &, WidgetMap &);
22         private:
23                 void action_button(const std::string &, int);
24         };
25
26         sigc::signal<void, int> signal_response;
27
28 private:
29         bool stale;
30
31 public:
32         Dialog();
33
34         virtual const char *get_class() const { return "dialog"; }
35
36         /** Adds an action button to the dialog.  Pressing the button will invoke
37         response handlers and delete the dialog. */
38         void add_button(Button &, int);
39
40         /** Sets the modality of the dialog.  When modal, the user can't navigate
41         away from the dialog. */
42         void set_modal(bool);
43
44         virtual void button_release(int, int, unsigned);
45         virtual bool key_release(unsigned, unsigned);
46         virtual bool navigate(Navigation);
47 protected:
48         void response(int);
49         void check_stale();
50
51         /** Called when an action button is pressed. */
52         virtual void on_response(int) { }
53 };
54
55 } // namespace GLtk
56 } // namespace Msp
57
58 #endif