#include <list>
#include <set>
#include <sigc++/trackable.h>
+#include <msp/strings/lexicalcast.h>
#include "geometry.h"
namespace Msp {
namespace GLtk {
+class Arrangement;
class Container;
class Widget;
dependent widgets have the expand flag set, the results are currently
undefined.
-Since specifiyng constraints manually can be quite tedious, there are some
-derived Layout classes that implement common positioning patterns. See Row,
-Column, MixedRows and Grid.
+Since specifiyng constraints manually can be quite tedious, an Arrangement
+interface is provided to automatically arrange widgets. See classes Row,
+Column and Grid for some commonly used arrangements.
*/
class Layout
{
COPY_HEIGHT = VERTICAL|SELF_DIM|TARGET_DIM
};
-protected:
+private:
struct Slot;
struct Constraint
Packing vert_pack;
Slot(Layout &, Widget &);
- virtual ~Slot() { }
void autosize_changed();
void visibility_changed(bool);
unsigned row_spacing;
unsigned col_spacing;
Geometry autosize_geom;
+ std::list<Arrangement *> arrangement_stack;
static Pointers pointers[2];
public:
Layout();
- virtual ~Layout();
+ ~Layout();
void set_container(Container &);
void set_margin(const Sides &);
LEFT_OF and RIGHT_OF constraints. */
void set_column_spacing(unsigned);
+ void push_arrangement(Arrangement &);
+ Arrangement *get_arrangement() const;
+ void pop_arrangement(Arrangement &);
+
void add_widget(Widget &);
void remove_widget(Widget &);
-protected:
- virtual Slot *create_slot(Widget &);
+private:
void update_slot_indices();
Slot &get_slot_for_widget(Widget &);
static ConstraintType complement(ConstraintType);
void update();
void autosize();
-protected:
+private:
void solve_constraints(int, SolveMode);
};
+void operator>>(const LexicalConverter &, Layout::ConstraintType &);
+
} // namespace GLtk
} // namespace Msp