]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/grid.h
Add getter for Panel::layout
[libs/gltk.git] / source / grid.h
index 789672a774e15052283cacde8bad564777d72a1c..621a29435318317be9aa7d00ea930b9efb93d3c2 100644 (file)
@@ -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 <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