X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flayout.h;h=a8ea3bf25b7f819492d14eb34c30a24380ba1f76;hb=c8291177b545ec81930603a5915234a60296db51;hp=85d64ae4d64f4f670365a58fbc921cb7406660a6;hpb=646af3dd91a6ca981572a5b69a0f0bd205d9af49;p=libs%2Fgltk.git diff --git a/source/layout.h b/source/layout.h index 85d64ae..a8ea3bf 100644 --- a/source/layout.h +++ b/source/layout.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "geometry.h" namespace Msp { @@ -85,7 +86,43 @@ public: COPY_HEIGHT = VERTICAL|SELF_DIM|TARGET_DIM }; + class Loader: public DataFile::ObjectLoader + { + public: + typedef std::map 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 constraints; Packing horiz_pack; Packing vert_pack; + bool ghost; Slot(Layout &, Widget &); @@ -184,6 +222,9 @@ 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(); @@ -191,6 +232,8 @@ private: void solve_constraints(int, SolveMode); }; +void operator>>(const LexicalConverter &, Layout::ConstraintType &); + } // namespace GLtk } // namespace Msp