X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flineararrangement.cpp;h=7769db2d64e47af8384237cc4b1eff8e80f6fc21;hb=754751fd474c6eac073fa7e89a18142fc89cb4fb;hp=891b858115f016b73900423d69b85a75df382e06;hpb=32539688068fad9614291159b069da10ead10f47;p=libs%2Fgltk.git diff --git a/source/lineararrangement.cpp b/source/lineararrangement.cpp index 891b858..7769db2 100644 --- a/source/lineararrangement.cpp +++ b/source/lineararrangement.cpp @@ -21,17 +21,30 @@ 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(), (primary==LEFT || primary==RIGHT), (primary==TOP || primary==BOTTOM)); + edges[primary].align(); + gravity = primary; +} + void LinearArrangement::process_widget(Widget &wdg, Side side, bool aligned) { if(side==opposite) { - bool snug = (edges[primary].aligned && aligned && !split_here); + bool snug = (internal_aligned && aligned && !split_here); add_constraint(wdg, get_order_constraint(primary, !snug), primary); if(first) - edges[side].add(wdg, aligned); + edges[side].add(wdg, (aligned && gravity==opposite)); } else if(side==primary) - next.add(wdg, (aligned && gravity==primary)); + next.add(wdg, aligned); else { if(edges[side].aligned && aligned) @@ -42,6 +55,9 @@ void LinearArrangement::process_widget(Widget &wdg, Side side, bool aligned) void LinearArrangement::finish_slot() { + internal_aligned = next.aligned; + if(gravity!=primary) + next.aligned = false; edges[primary] = next; next.clear(); split_here = false; @@ -52,9 +68,15 @@ void LinearArrangement::finish_slot() LinearArrangement::Loader::Loader(LinearArrangement &c): DataFile::ObjectLoader(c) { + add("expand", &Loader::expand); add("split", &Loader::split); } +void LinearArrangement::Loader::expand() +{ + obj.expand(); +} + void LinearArrangement::Loader::split() { obj.split();