]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/lineararrangement.cpp
Support widget expansion in linear layouts
[libs/gltk.git] / source / lineararrangement.cpp
index 891b858115f016b73900423d69b85a75df382e06..9e6441afaa8c72a3cdad8720f56ca0103186b20d 100644 (file)
@@ -21,6 +21,19 @@ void LinearArrangement::split()
        gravity = primary;
 }
 
+void LinearArrangement::expand()
+{
+       if(gravity==primary)
+               throw arrangement_error("already split");
+       if(edges[primary].empty())
+               throw arrangement_error("no widgets");
+
+       add_constraint(*edges[primary].widgets.front(), get_align_constraint(primary), primary);
+       layout.set_expand(*edges[primary].widgets.front(), false, true);
+       edges[primary].align();
+       gravity = primary;
+}
+
 void LinearArrangement::process_widget(Widget &wdg, Side side, bool aligned)
 {
        if(side==opposite)
@@ -52,9 +65,15 @@ void LinearArrangement::finish_slot()
 LinearArrangement::Loader::Loader(LinearArrangement &c):
        DataFile::ObjectLoader<LinearArrangement>(c)
 {
+       add("expand", &Loader::expand);
        add("split", &Loader::split);
 }
 
+void LinearArrangement::Loader::expand()
+{
+       obj.expand();
+}
+
 void LinearArrangement::Loader::split()
 {
        obj.split();