]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/layout.h
Minor style fixes
[libs/gltk.git] / source / layout.h
index 85d64ae4d64f4f670365a58fbc921cb7406660a6..c9263d3d5f8a0b2d83f11a54a0daebeff997fb35 100644 (file)
@@ -4,6 +4,7 @@
 #include <list>
 #include <set>
 #include <sigc++/trackable.h>
+#include <msp/strings/lexicalcast.h>
 #include "geometry.h"
 
 namespace Msp {
@@ -85,7 +86,43 @@ public:
                COPY_HEIGHT = VERTICAL|SELF_DIM|TARGET_DIM
        };
 
+       class Loader: public DataFile::ObjectLoader<Layout>
+       {
+       public:
+               typedef std::map<std::string, Widget *> WidgetMap;
+
+       private:
+               const WidgetMap &wdg_map;
+
+       public:
+               Loader(Layout &, const WidgetMap &);
+
+       private:
+               void column_spacing(unsigned);
+               void margin();
+               void row_spacing(unsigned);
+               void spacing(unsigned);
+               void widget(const std::string &);
+       };
+
 private:
+       class WidgetLoader: public DataFile::Loader
+       {
+       private:
+               Layout &layout;
+               Widget &widget;
+               const Layout::Loader::WidgetMap &wdg_map;
+
+       public:
+               WidgetLoader(Layout &, Widget &, const Layout::Loader::WidgetMap &);
+
+       private:
+               void constraint(ConstraintType, const std::string &);
+               void expand(bool, bool);
+               void ghost(bool);
+               void gravity(int, int);
+       };
+
        struct Slot;
 
        struct Constraint
@@ -115,6 +152,7 @@ private:
                std::list<Constraint> constraints;
                Packing horiz_pack;
                Packing vert_pack;
+               bool ghost;
 
                Slot(Layout &, Widget &);
 
@@ -150,7 +188,7 @@ public:
        void set_container(Container &);
        void set_margin(const Sides &);
 
-       /** 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
@@ -184,13 +222,18 @@ public:
        void set_gravity(Widget &, int, int);
        void set_expand(Widget &, bool, bool);
 
+       /// Sets a widget as a ghost, taking up space even if it is hidden.
+       void set_ghost(Widget &, bool);
+
        void update();
-       void autosize();
+       void autosize(Geometry &);
 
 private:
        void solve_constraints(int, SolveMode);
 };
 
+void operator>>(const LexicalConverter &, Layout::ConstraintType &);
+
 } // namespace GLtk
 } // namespace Msp