X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgrid.h;h=29d7b6d37257686cfd0d56b8abb274a333c556f5;hb=56c41b294aa47a38ac3e1be70d4868f260cb4274;hp=519151eace3be77a90be986c92b5026bf7c8862d;hpb=2b70e8801c43875ed3f4135bdd0141265cff0312;p=libs%2Fgltk.git diff --git a/source/grid.h b/source/grid.h index 519151e..29d7b6d 100644 --- a/source/grid.h +++ b/source/grid.h @@ -1,38 +1,49 @@ #ifndef MSP_GLTK_GRID_H_ #define MSP_GLTK_GRID_H_ -#include "layout.h" +#include +#include "arrangement.h" +#include "mspgltk_api.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 MSPGLTK_API Grid: public Arrangement { +public: + class Loader: public DataFile::ObjectLoader + { + public: + Loader(Grid &); + private: + void next_row(); + void skip(); + }; + private: - bool uniform; - std::vector columns; - unsigned cur_column; - bool first; - bool skipped; + struct Column + { + Edge left; + Edge right; + }; + + std::vector 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