void Arrangement::add_constraint(Widget &wdg, Layout::ConstraintType type, const Edge &edge)
{
for(list<Widget *>::const_iterator i=edge.widgets.begin(); i!=edge.widgets.end(); ++i)
- layout.add_constraint(wdg, type, **i);
+ if(*i!=&wdg)
+ layout.add_constraint(wdg, type, **i);
+}
+
+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");
+ }
}
aligned = algn;
}
+void Arrangement::Edge::align()
+{
+ if(aligned || widgets.empty())
+ return;
+
+ list<Widget *>::iterator second = widgets.begin();
+ ++second;
+
+ widgets.erase(second, widgets.end());
+ aligned = true;
+}
+
} // namespace GLtk
} // namespace Msp