#ifndef MSP_GLTK_ARRANGEMENT_H_
#define MSP_GLTK_ARRANGEMENT_H_
-#include <list>
#include <stdexcept>
+#include <vector>
+#include <msp/core/noncopyable.h>
#include "layout.h"
+#include "mspgltk_api.h"
namespace Msp {
namespace GLtk {
class Widget;
-class arrangement_error: public std::logic_error
+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 Arrangement
+class MSPGLTK_API Arrangement: public NonCopyable
{
protected:
enum Side
struct Edge
{
- std::list<Widget *> widgets;
- bool aligned;
-
- Edge();
+ std::vector<Widget *> widgets;
+ 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 &);
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