1 #ifndef MSP_GLTK_ARRANGEMENT_H_
2 #define MSP_GLTK_ARRANGEMENT_H_
7 #include "mspgltk_api.h"
14 class MSPGLTK_API arrangement_error: public std::logic_error
17 arrangement_error(const std::string &w): std::logic_error(w) { }
20 class MSPGLTK_API Arrangement
33 std::list<Widget *> widgets;
36 bool empty() { return widgets.empty(); }
38 void add(Widget &, bool);
43 Arrangement *parent = nullptr;
46 Arrangement(Layout &);
48 virtual ~Arrangement();
50 void arrange(Widget &);
51 void arrange(Arrangement &);
54 virtual void process_widget(Widget &, Side, bool) = 0;
55 virtual void finish_widget(Widget &) = 0;
56 virtual void finish_slot() = 0;
57 const Edge &get_edge(Side s) const { return edges[s]; }
58 void add_constraint(Widget &, Layout::ConstraintType, Side, int = -1);
59 void add_constraint(Widget &, Layout::ConstraintType, const Edge &, int = -1);
61 static Layout::ConstraintType get_order_constraint(Side, bool);
62 static Layout::ConstraintType get_align_constraint(Side);