]> git.tdb.fi Git - libs/gltk.git/blob - source/panel.h
79e8bd455a3b36cbd76f9f113641cb81baa79731
[libs/gltk.git] / source / panel.h
1 #ifndef MSP_GLTK_PANEL_H_
2 #define MSP_GLTK_PANEL_H_
3
4 #include "container.h"
5 #include "layout.h"
6
7 namespace Msp {
8 namespace GLtk {
9
10 /**
11 Panels are containers for other widgets.  Panel styles should have a special
12 part "children" to render the child widgets.  All properties of this part are
13 ignored.
14 */
15 class Panel: public Container
16 {
17 public:
18         class Loader: public DataFile::DerivedObjectLoader<Panel, Widget::Loader>
19         {
20         public:
21                 typedef std::map<std::string, Widget *> WidgetMap;
22
23         protected:
24                 WidgetMap &wdg_map;
25                 Widget *last_widget;
26         
27         public:
28                 Loader(Panel &, WidgetMap &);
29         private:
30                 Layout &get_layout();
31                 Widget &get_last_widget();
32                 template<typename T>
33                 void arrangement();
34                 template<typename T>
35                 void child(const std::string &);
36                 void constraint(Layout::ConstraintType, const std::string &);
37                 void expand(bool, bool);
38                 void gravity(int, int);
39                 void grid(unsigned);
40                 void layout();
41                 void panel(const std::string &);
42         };
43
44 private:
45         template<typename T>
46         class ArrangedLoader: public DataFile::Loader
47         {
48         private:
49                 typename T::Loader arr_loader;
50
51         public:
52                 ArrangedLoader(Loader &, T &);
53         };
54
55 protected:
56         Layout *layout;
57
58         Panel(const Panel &);
59         Panel &operator=(const Panel &);
60 public:
61         Panel();
62         virtual ~Panel();
63
64         virtual const char *get_class() const { return "panel"; }
65
66         void set_layout(Layout *);
67         virtual void autosize();
68
69 protected:
70         virtual void render_special(const Part &, GL::Renderer &) const;
71
72         virtual void on_geometry_change();
73         virtual void on_child_added(Widget &);
74         virtual void on_child_removed(Widget &);
75 };
76
77 } // namespace GLtk
78 } // namespace Msp
79
80 #endif