]> git.tdb.fi Git - libs/gltk.git/blob - source/arrangement.h
284d3f7edd7079279848ce4f9e1371e29d484b77
[libs/gltk.git] / source / arrangement.h
1 #ifndef MSP_GLTK_ARRANGEMENT_H_
2 #define MSP_GLTK_ARRANGEMENT_H_
3
4 #include <list>
5 #include "layout.h"
6
7 namespace Msp {
8 namespace GLtk {
9
10 class Widget;
11
12 class Arrangement
13 {
14 protected:
15         enum Side
16         {
17                 TOP,
18                 RIGHT,
19                 BOTTOM,
20                 LEFT
21         };
22
23         struct Edge
24         {
25                 std::list<Widget *> widgets;
26                 bool aligned;
27
28                 Edge();
29
30                 bool empty() { return widgets.empty(); }
31                 void clear();
32                 void add(Widget &, bool);
33         };
34
35         Layout &layout;
36         Arrangement *parent;
37         Edge edges[4];
38
39         Arrangement(Layout &);
40 public:
41         virtual ~Arrangement();
42
43         void arrange(Widget &);
44         void arrange(Arrangement &);
45
46 protected:
47         virtual void process_widget(Widget &, Side, bool) = 0;
48         virtual void finish_widget(Widget &) = 0;
49         virtual void finish_slot() = 0;
50         const Edge &get_edge(Side s) const { return edges[s]; }
51         void add_constraint(Widget &, Layout::ConstraintType, Side);
52         void add_constraint(Widget &, Layout::ConstraintType, const Edge &);
53 };
54
55 } // namespace GLtk
56 } // namespace Msp
57
58 #endif