X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farrangement.cpp;fp=source%2Farrangement.cpp;h=ec890efb7e08d55f8802c0c20f434e7a4e9bdfba;hb=646af3dd91a6ca981572a5b69a0f0bd205d9af49;hp=0000000000000000000000000000000000000000;hpb=df07e8f3e239b146cbc458d3cbd69758e590d255;p=libs%2Fgltk.git diff --git a/source/arrangement.cpp b/source/arrangement.cpp new file mode 100644 index 0000000..ec890ef --- /dev/null +++ b/source/arrangement.cpp @@ -0,0 +1,75 @@ +#include "arrangement.h" + +using namespace std; + +namespace Msp { +namespace GLtk { + +Arrangement::Arrangement(Layout &l): + layout(l), + parent(layout.get_arrangement()) +{ + layout.push_arrangement(*this); +} + +Arrangement::~Arrangement() +{ + layout.pop_arrangement(*this); +} + +void Arrangement::arrange(Widget &wdg) +{ + for(unsigned i=0; i<4; ++i) + process_widget(wdg, static_cast(i), true); + finish_widget(wdg); + finish_slot(); +} + +void Arrangement::arrange(Arrangement &arr) +{ + for(unsigned i=0; i<4; ++i) + { + 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); + } + finish_slot(); +} + +void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, Side side) +{ + add_constraint(wdg, type, edges[side]); +} + +void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, const Edge &edge) +{ + for(list::const_iterator i=edge.widgets.begin(); i!=edge.widgets.end(); ++i) + layout.add_constraint(wdg, type, **i); +} + + +Arrangement::Edge::Edge(): + aligned(false) +{ } + +void Arrangement::Edge::clear() +{ + widgets.clear(); + aligned = false; +} + +void Arrangement::Edge::add(Widget &wdg, bool algn) +{ + if(aligned) + return; + + if(algn) + widgets.clear(); + + widgets.push_back(&wdg); + aligned = algn; +} + +} // namespace GLtk +} // namespace Msp