]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/arrangement.cpp
Simplify constructors with C++11
[libs/gltk.git] / source / arrangement.cpp
index ec890efb7e08d55f8802c0c20f434e7a4e9bdfba..2adb9654ae059a2abf823add64d5f165297268bb 100644 (file)
@@ -31,27 +31,53 @@ 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)
-               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