namespace GLtk {
Column::Column(Layout &l):
- Arrangement(l),
- first(true),
- split_here(false),
- gravity(1)
+ LinearArrangement(l, BOTTOM)
{ }
-void Column::split()
-{
- if(gravity<0)
- throw arrangement_error("already split");
-
- split_here = true;
- gravity = -1;
-}
-
-void Column::process_widget(Widget &wdg, Side side, bool aligned)
-{
- if(side==TOP)
- {
- bool snug = (edges[BOTTOM].aligned && aligned && !split_here);
- add_constraint(wdg, (snug ? Layout::BELOW : Layout::FAR_BELOW), BOTTOM);
- if(first)
- edges[TOP].add(wdg, aligned);
- }
- else if(side==BOTTOM)
- next_bottom.add(wdg, (aligned && gravity<0));
- else
- {
- if(edges[side].aligned && aligned)
- add_constraint(wdg, (side==LEFT ? Layout::ALIGN_LEFT : Layout::ALIGN_RIGHT), side);
- edges[side].add(wdg, aligned);
- }
-}
-
void Column::finish_widget(Widget &wdg)
{
- layout.set_gravity(wdg, -1, gravity);
-}
-
-void Column::finish_slot()
-{
- edges[BOTTOM] = next_bottom;
- next_bottom.clear();
- split_here = false;
- first = false;
-}
-
-
-Column::Loader::Loader(Column &c):
- DataFile::ObjectLoader<Column>(c)
-{
- add("split", &Loader::split);
-}
-
-void Column::Loader::split()
-{
- obj.split();
+ layout.set_gravity(wdg, -1, (gravity==BOTTOM ? -1 : 1));
}
} // namespace GLtk