1 #include "lineararrangement.h"
6 LinearArrangement::LinearArrangement(Layout &l, Side p):
11 void LinearArrangement::set_uniform(bool u)
15 uniform_ref = nullptr;
18 void LinearArrangement::split()
21 throw arrangement_error("already split");
27 void LinearArrangement::expand()
30 throw arrangement_error("already split");
31 if(edges[primary].empty())
32 throw arrangement_error("no widgets");
34 add_constraint(*edges[primary].widgets.front(), get_align_constraint(primary), primary);
35 layout.set_expand(*edges[primary].widgets.front(), (primary==LEFT || primary==RIGHT), (primary==TOP || primary==BOTTOM));
36 edges[primary].align();
40 void LinearArrangement::spacing(unsigned s)
45 void LinearArrangement::process_widget(Widget &wdg, Side side, bool aligned)
49 bool snug = (internal_aligned && aligned && !split_here);
50 add_constraint(wdg, get_order_constraint(primary, !snug), primary, next_spacing);
52 edges[side].add(wdg, (aligned && gravity==opposite));
54 else if(side==primary)
55 next.add(wdg, aligned);
58 if(edges[side].aligned && aligned)
59 add_constraint(wdg, get_align_constraint(side), side);
60 edges[side].add(wdg, aligned);
64 void LinearArrangement::finish_widget(Widget &wdg)
72 Layout::ConstraintType ct = ((primary==LEFT || primary==RIGHT) ? Layout::COPY_WIDTH : Layout::COPY_HEIGHT);
73 layout.add_constraint(wdg, ct, *uniform_ref);
78 void LinearArrangement::finish_slot()
80 internal_aligned = next.aligned;
83 edges[primary] = next;
91 LinearArrangement::Loader::Loader(LinearArrangement &c):
92 DataFile::ObjectLoader<LinearArrangement>(c)
94 add("expand", &Loader::expand);
95 add("spacing", &Loader::spacing);
96 add("split", &Loader::split);
97 add("uniform", &Loader::uniform);
100 void LinearArrangement::Loader::expand()
105 void LinearArrangement::Loader::spacing(unsigned s)
110 void LinearArrangement::Loader::split()
115 void LinearArrangement::Loader::uniform(bool u)