X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farrangement.cpp;h=2adb9654ae059a2abf823add64d5f165297268bb;hb=9f38197854e699a6093a906ab43f4238f3cd2388;hp=ec890efb7e08d55f8802c0c20f434e7a4e9bdfba;hpb=646af3dd91a6ca981572a5b69a0f0bd205d9af49;p=libs%2Fgltk.git diff --git a/source/arrangement.cpp b/source/arrangement.cpp index ec890ef..2adb965 100644 --- a/source/arrangement.cpp +++ b/source/arrangement.cpp @@ -31,27 +31,53 @@ void Arrangement::arrange(Arrangement &arr) { Side side = static_cast(i); const Edge &edge = arr.get_edge(side); - for(list::const_iterator j=edge.widgets.begin(); j!=edge.widgets.end(); ++j) - process_widget(**j, side, edge.aligned); + for(Widget *w: edge.widgets) + process_widget(*w, side, edge.aligned); } finish_slot(); } -void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, Side side) +void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, Side side, int spacing) { - add_constraint(wdg, type, edges[side]); + add_constraint(wdg, type, edges[side], spacing); } -void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, const Edge &edge) +void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, const Edge &edge, int spacing) { - for(list::const_iterator i=edge.widgets.begin(); i!=edge.widgets.end(); ++i) - layout.add_constraint(wdg, type, **i); + for(Widget *w: edge.widgets) + if(w!=&wdg) + { + if(spacing<0) + layout.add_constraint(wdg, type, *w); + else + layout.add_constraint(wdg, type, *w, spacing); + } } +Layout::ConstraintType Arrangement::get_order_constraint(Side s, bool slack) +{ + switch(s) + { + case TOP: return (slack ? Layout::FAR_ABOVE : Layout::ABOVE); + case RIGHT: return (slack ? Layout::FAR_RIGHT_OF : Layout::RIGHT_OF); + case BOTTOM: return (slack ? Layout::FAR_BELOW : Layout::BELOW); + case LEFT: return (slack ? Layout::FAR_LEFT_OF : Layout::LEFT_OF); + default: throw invalid_argument("Arrangement::get_align_constraint"); + } +} + +Layout::ConstraintType Arrangement::get_align_constraint(Side s) +{ + switch(s) + { + case TOP: return Layout::ALIGN_TOP; + case RIGHT: return Layout::ALIGN_RIGHT; + case BOTTOM: return Layout::ALIGN_BOTTOM; + case LEFT: return Layout::ALIGN_LEFT; + default: throw invalid_argument("Arrangement::get_align_constraint"); + } +} -Arrangement::Edge::Edge(): - aligned(false) -{ } void Arrangement::Edge::clear() { @@ -71,5 +97,17 @@ void Arrangement::Edge::add(Widget &wdg, bool algn) aligned = algn; } +void Arrangement::Edge::align() +{ + if(aligned || widgets.empty()) + return; + + auto second = widgets.begin(); + ++second; + + widgets.erase(second, widgets.end()); + aligned = true; +} + } // namespace GLtk } // namespace Msp