]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/layout.h
Properly filter out duplicate constraints
[libs/gltk.git] / source / layout.h
index cbd763e9e5337dc7a6395d7d0b3a860c6d9ad7e1..0ea47a11c3bdbcef50821bf619ed361b09d48ad5 100644 (file)
@@ -84,6 +84,7 @@ protected:
        {
                ConstraintType type;
                Slot ⌖
+               int spacing;
 
                Constraint(ConstraintType, Slot &);
        };
@@ -99,7 +100,7 @@ protected:
        struct Slot: public sigc::trackable
        {
                Layout &layout;
-               unsigned index;
+               int index;
                Widget &widget;
                Geometry autosize_geom;
                Geometry geom;
@@ -111,6 +112,7 @@ protected:
                virtual ~Slot() { }
 
                void autosize_changed();
+               void visibility_changed(bool);
        };
 
        enum SolveMode
@@ -124,6 +126,7 @@ protected:
 
        Container *container;
        std::list<Slot *> slots;
+       unsigned n_active_slots;
        Sides margin;
        unsigned row_spacing;
        unsigned col_spacing;
@@ -137,18 +140,35 @@ public:
 
        void set_container(Container &);
        void set_margin(const Sides &);
+
+       /** Sets the default spacing between widgets in bothg directions. */
        void set_spacing(unsigned);
+
+       /** Sets the default vertical spacing between widgets.  Affects the ABOVE
+       and BELOW constraints. */
        void set_row_spacing(unsigned);
+
+       /** Sets the default horizontal spacing between widgets.  Affects the
+       LEFT_OF and RIGHT_OF constraints. */
        void set_column_spacing(unsigned);
 
        void add_widget(Widget &);
        void remove_widget(Widget &);
 protected:
        virtual Slot *create_slot(Widget &);
+       void update_slot_indices();
        Slot &get_slot_for_widget(Widget &);
        static ConstraintType complement(ConstraintType);
+       void create_constraint(Widget &, ConstraintType, Widget &, int);
+
 public:
-       void add_constraint(Widget &, ConstraintType, Widget &);
+       /** Adds a constraint between two widgets. */
+       void add_constraint(Widget &src, ConstraintType type, Widget &tgt);
+
+       /** Adds a constraint between two widgets, overriding the default spacing.
+       Not all constraint types use a spacing. */
+       void add_constraint(Widget &src, ConstraintType type, Widget &tgt, unsigned);
+
        void set_gravity(Widget &, int, int);
        void set_expand(Widget &, bool, bool);