X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flayout.h;h=85d64ae4d64f4f670365a58fbc921cb7406660a6;hb=646af3dd91a6ca981572a5b69a0f0bd205d9af49;hp=2bddb77cfa30bef43632036b8e2564e41e59a06e;hpb=df07e8f3e239b146cbc458d3cbd69758e590d255;p=libs%2Fgltk.git diff --git a/source/layout.h b/source/layout.h index 2bddb77..85d64ae 100644 --- a/source/layout.h +++ b/source/layout.h @@ -9,6 +9,7 @@ namespace Msp { namespace GLtk { +class Arrangement; class Container; class Widget; @@ -44,9 +45,9 @@ flag for a widget causes it to use as much space as possible. If multiple co- 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 { @@ -84,7 +85,7 @@ public: COPY_HEIGHT = VERTICAL|SELF_DIM|TARGET_DIM }; -protected: +private: struct Slot; struct Constraint @@ -116,7 +117,6 @@ protected: Packing vert_pack; Slot(Layout &, Widget &); - virtual ~Slot() { } void autosize_changed(); void visibility_changed(bool); @@ -139,12 +139,13 @@ protected: unsigned row_spacing; unsigned col_spacing; Geometry autosize_geom; + std::list arrangement_stack; static Pointers pointers[2]; public: Layout(); - virtual ~Layout(); + ~Layout(); void set_container(Container &); void set_margin(const Sides &); @@ -160,10 +161,13 @@ public: 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); @@ -183,7 +187,7 @@ public: void update(); void autosize(); -protected: +private: void solve_constraints(int, SolveMode); };