#include <sigc++/trackable.h>
#include <msp/strings/lexicalcast.h>
#include "geometry.h"
+#include "mspgltk_api.h"
namespace Msp {
namespace GLtk {
interface is provided to automatically arrange widgets. See classes Row,
Column and Grid for some commonly used arrangements.
*/
-class Layout
+class MSPGLTK_API Layout
{
private:
enum
TARGET_POS = 8,
TARGET_DIM = 16,
TARGET_MASK = 24,
- SPACING = 32,
- SLACK = 64
+ HALF_DIM = 32,
+ SPACING = 64,
+ SLACK = 128
};
public:
FAR_RIGHT_OF = HORIZONTAL|SELF_POS|TARGET_POS|TARGET_DIM|SPACING|SLACK,
FAR_LEFT_OF = HORIZONTAL|SELF_POS|SELF_DIM|TARGET_POS|SPACING|SLACK,
ALIGN_TOP = VERTICAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM,
+ ALIGN_VCENTER = VERTICAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM|HALF_DIM,
ALIGN_BOTTOM = VERTICAL|SELF_POS|TARGET_POS,
ALIGN_RIGHT = HORIZONTAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM,
+ ALIGN_HCENTER = HORIZONTAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM|HALF_DIM,
ALIGN_LEFT = HORIZONTAL|SELF_POS|TARGET_POS,
COPY_WIDTH = HORIZONTAL|SELF_DIM|TARGET_DIM,
COPY_HEIGHT = VERTICAL|SELF_DIM|TARGET_DIM
Packing horiz_pack;
Packing vert_pack;
bool ghost;
+ bool floating;
Slot(Layout &, Widget &);
Container *container;
std::list<Slot *> slots;
unsigned n_active_slots;
- unsigned n_slack_constraints[2];
+ unsigned n_slack_vars[2];
Sides margin;
unsigned row_spacing;
unsigned col_spacing;
void set_container(Container &);
void set_margin(const Sides &);
+ const Sides &get_margin() const { return margin; }
- /** Sets the default spacing between widgets in bothg directions. */
+ /** Sets the default spacing between widgets in both directions. */
void set_spacing(unsigned);
/** Sets the default vertical spacing between widgets. Affects the ABOVE
LEFT_OF and RIGHT_OF constraints. */
void set_column_spacing(unsigned);
+ unsigned get_row_spacing() const { return row_spacing; }
+ unsigned get_column_spacing() const { return col_spacing; }
+
void push_arrangement(Arrangement &);
Arrangement *get_arrangement() const;
void pop_arrangement(Arrangement &);
/// Sets a widget as a ghost, taking up space even if it is hidden.
void set_ghost(Widget &, bool);
+ void set_floating(Widget &, bool);
+
void update();
void autosize(Geometry &);
void solve_constraints(int, SolveMode);
};
-void operator>>(const LexicalConverter &, Layout::ConstraintType &);
+MSPGLTK_API void operator>>(const LexicalConverter &, Layout::ConstraintType &);
} // namespace GLtk
} // namespace Msp