#ifndef MSP_GLTK_GRID_H_
#define MSP_GLTK_GRID_H_
-#include "layout.h"
+#include <msp/datafile/objectloader.h>
+#include "arrangement.h"
namespace Msp {
namespace GLtk {
-/**
-Arranges widgets in a grid.
-
-This layout class places widgets in a grid, lining up their edges in rows and
-columns. Widgets are placed on rows left-to-right and rows are placed top-to-
-bottom.
-
-The start of each row must be indicated manually. Individual cells can be
-skipped to leave them empty.
-*/
-class Grid: public Layout
+class Grid: public Arrangement
{
+public:
+ class Loader: public DataFile::ObjectLoader<Grid>
+ {
+ public:
+ Loader(Grid &);
+ private:
+ void next_row();
+ void skip();
+ };
+
private:
- bool uniform;
- std::vector<Slot *> columns;
- unsigned cur_column;
- bool first;
- bool skipped;
+ struct Column
+ {
+ Edge left;
+ Edge right;
+ };
+
+ std::vector<Column> columns;
+ Edge row_top;
+ Edge row_bottom;
+ bool first_row;
+ unsigned column;
public:
- Grid(bool = false);
+ Grid(Layout &, unsigned);
- void start_row();
- void skip_cell();
+ void skip();
+ void next_row();
private:
- Slot *create_slot(Widget &);
+ virtual void process_widget(Widget &, Side, bool);
+ virtual void finish_widget(Widget &);
+ virtual void finish_slot();
+ void finish_row();
};
} // namespace GLtk