]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/arrangement.cpp
Rework how widget ownership works in Container
[libs/gltk.git] / source / arrangement.cpp
index 9982691e4cb0a81a3fdedb6c891739ce1a198701..2adb9654ae059a2abf823add64d5f165297268bb 100644 (file)
@@ -31,22 +31,27 @@ void Arrangement::arrange(Arrangement &arr)
        {
                Side side = static_cast<Side>(i);
                const Edge &edge = arr.get_edge(side);
-               for(list<Widget *>::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<Widget *>::const_iterator i=edge.widgets.begin(); i!=edge.widgets.end(); ++i)
-               if(*i!=&wdg)
-                       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)
@@ -74,10 +79,6 @@ Layout::ConstraintType Arrangement::get_align_constraint(Side s)
 }
 
 
-Arrangement::Edge::Edge():
-       aligned(false)
-{ }
-
 void Arrangement::Edge::clear()
 {
        widgets.clear();
@@ -101,7 +102,7 @@ void Arrangement::Edge::align()
        if(aligned || widgets.empty())
                return;
 
-       list<Widget *>::iterator second = widgets.begin();
+       auto second = widgets.begin();
        ++second;
 
        widgets.erase(second, widgets.end());