]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/arrangement.h
Use nullptr instead of 0 for pointers
[libs/gltk.git] / source / arrangement.h
index 284d3f7edd7079279848ce4f9e1371e29d484b77..2decb3eb4fc5ef71513fe9985b86462e5cf04425 100644 (file)
@@ -2,14 +2,23 @@
 #define MSP_GLTK_ARRANGEMENT_H_
 
 #include <list>
+#include <stdexcept>
 #include "layout.h"
+#include "mspgltk_api.h"
 
 namespace Msp {
 namespace GLtk {
 
 class Widget;
 
-class Arrangement
+class MSPGLTK_API arrangement_error: public std::logic_error
+{
+public:
+       arrangement_error(const std::string &w): std::logic_error(w) { }
+       virtual ~arrangement_error() throw() { }
+};
+
+class MSPGLTK_API Arrangement
 {
 protected:
        enum Side
@@ -23,17 +32,16 @@ protected:
        struct Edge
        {
                std::list<Widget *> widgets;
-               bool aligned;
-
-               Edge();
+               bool aligned = false;
 
                bool empty() { return widgets.empty(); }
                void clear();
                void add(Widget &, bool);
+               void align();
        };
 
        Layout &layout;
-       Arrangement *parent;
+       Arrangement *parent = nullptr;
        Edge edges[4];
 
        Arrangement(Layout &);
@@ -48,8 +56,11 @@ protected:
        virtual void finish_widget(Widget &) = 0;
        virtual void finish_slot() = 0;
        const Edge &get_edge(Side s) const { return edges[s]; }
-       void add_constraint(Widget &, Layout::ConstraintType, Side);
-       void add_constraint(Widget &, Layout::ConstraintType, const Edge &);
+       void add_constraint(Widget &, Layout::ConstraintType, Side, int = -1);
+       void add_constraint(Widget &, Layout::ConstraintType, const Edge &, int = -1);
+
+       static Layout::ConstraintType get_order_constraint(Side, bool);
+       static Layout::ConstraintType get_align_constraint(Side);
 };
 
 } // namespace GLtk