]> git.tdb.fi Git - libs/gltk.git/blob - source/column.cpp
811185dfcb669b717db499d24882aa9e4be474b5
[libs/gltk.git] / source / column.cpp
1 #include "column.h"
2
3 namespace Msp {
4 namespace GLtk {
5
6 Column::Column(Layout &l):
7         Arrangement(l),
8         first(true),
9         split_here(false),
10         gravity(1)
11 { }
12
13 void Column::split()
14 {
15         if(gravity<0)
16                 throw arrangement_error("already split");
17
18         split_here = true;
19         gravity = -1;
20 }
21
22 void Column::process_widget(Widget &wdg, Side side, bool aligned)
23 {
24         if(side==TOP)
25         {
26                 bool snug = (edges[BOTTOM].aligned && aligned && !split_here);
27                 add_constraint(wdg, (snug ? Layout::BELOW : Layout::FAR_BELOW), BOTTOM);
28                 if(first)
29                         edges[TOP].add(wdg, aligned);
30         }
31         else if(side==BOTTOM)
32                 next_bottom.add(wdg, (aligned && gravity<0));
33         else
34         {
35                 if(edges[side].aligned && aligned)
36                         add_constraint(wdg, (side==LEFT ? Layout::ALIGN_LEFT : Layout::ALIGN_RIGHT), side);
37                 edges[side].add(wdg, aligned);
38         }
39 }
40
41 void Column::finish_widget(Widget &wdg)
42 {
43         layout.set_gravity(wdg, -1, gravity);
44 }
45
46 void Column::finish_slot()
47 {
48         edges[BOTTOM] = next_bottom;
49         next_bottom.clear();
50         split_here = false;
51         first = false;
52 }
53
54
55 Column::Loader::Loader(Column &c):
56         DataFile::ObjectLoader<Column>(c)
57 {
58         add("split", &Loader::split);
59 }
60
61 void Column::Loader::split()
62 {
63         obj.split();
64 }
65
66 } // namespace GLtk
67 } // namespace Msp