X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flayout.cpp;h=c41dcb87b68172236b1bb67155b48990ca79609e;hb=646af3dd91a6ca981572a5b69a0f0bd205d9af49;hp=993c82f42c7ce0d8f683065d9cf4d01f127cd895;hpb=df07e8f3e239b146cbc458d3cbd69758e590d255;p=libs%2Fgltk.git diff --git a/source/layout.cpp b/source/layout.cpp index 993c82f..c41dcb8 100644 --- a/source/layout.cpp +++ b/source/layout.cpp @@ -1,5 +1,6 @@ #include #include +#include "arrangement.h" #include "container.h" #include "layout.h" #include "widget.h" @@ -136,16 +137,45 @@ void Layout::set_column_spacing(unsigned s) update(); } +void Layout::push_arrangement(Arrangement &arr) +{ + arrangement_stack.push_back(&arr); +} + +Arrangement *Layout::get_arrangement() const +{ + if(arrangement_stack.empty()) + return 0; + else + return arrangement_stack.back(); +} + +void Layout::pop_arrangement(Arrangement &arr) +{ + list::iterator begin = find(arrangement_stack.begin(), arrangement_stack.end(), &arr); + if(begin==arrangement_stack.end()) + return; + + while(1) + { + Arrangement *top = arrangement_stack.back(); + arrangement_stack.pop_back(); + if(!arrangement_stack.empty()) + arrangement_stack.back()->arrange(*top); + if(top==&arr) + break; + } +} + void Layout::add_widget(Widget &wdg) { if(!container) throw logic_error("!container"); - Slot *slot = create_slot(wdg); - for(list::iterator i=slot->constraints.begin(); i!=slot->constraints.end(); ++i) - i->target.constraints.push_back(Constraint(complement(i->type), *slot)); - slots.push_back(slot); + slots.push_back(new Slot(*this, wdg)); update_slot_indices(); + if(!arrangement_stack.empty()) + arrangement_stack.back()->arrange(wdg); if(container) update(); } @@ -176,11 +206,6 @@ void Layout::remove_widget(Widget &wdg) } } -Layout::Slot *Layout::create_slot(Widget &wdg) -{ - return new Slot(*this, wdg); -} - void Layout::update_slot_indices() { n_active_slots = 0;