X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgrid.h;h=621a29435318317be9aa7d00ea930b9efb93d3c2;hb=754751fd474c6eac073fa7e89a18142fc89cb4fb;hp=789672a774e15052283cacde8bad564777d72a1c;hpb=a84c813859b6908c511b12ab7d82d6643f4f1a42;p=libs%2Fgltk.git diff --git a/source/grid.h b/source/grid.h index 789672a..621a294 100644 --- a/source/grid.h +++ b/source/grid.h @@ -1,45 +1,48 @@ -/* $Id$ - -This file is part of libmspgltk -Copyright © 2011 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #ifndef MSP_GLTK_GRID_H_ #define MSP_GLTK_GRID_H_ -#include "layout.h" +#include +#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 + { + 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