This is a quick-hacked inlined-in-open mode as Andre's proposal. Seems to work, but I didn't test it much.
Comments? Alfredo
? insetcollapsable-save.C ? insettext-save.C Index: insetcollapsable.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.C,v retrieving revision 1.241 diff -u -p -u -r1.241 insetcollapsable.C --- insetcollapsable.C 4 Mar 2004 07:38:11 -0000 1.241 +++ insetcollapsable.C 4 Mar 2004 10:40:34 -0000 @@ -41,7 +41,7 @@ using std::ostream; InsetCollapsable::InsetCollapsable(BufferParams const & bp, CollapseStatus status) - : inset(bp), label("Label"), status_(status) + : inset(bp), label("Label"), status_(status), openinlined_(false) { inset.setOwner(this); inset.setAutoBreakRows(true); @@ -144,8 +144,17 @@ void InsetCollapsable::metrics(MetricsIn if (status_ == Open) { Dimension insetdim; inset.metrics(mi, insetdim); - dim.des += insetdim.height() + TEXT_TO_BOTTOM_OFFSET; - dim.wid = max(dim.wid, insetdim.wid); + if (insetdim.wid + dim.wid > mi.base.textwidth) { + openinlined_ = false; + dim.des += insetdim.height() + + TEXT_TO_BOTTOM_OFFSET; + dim.wid = max(dim.wid, insetdim.wid); + } else { + openinlined_ = true; + dim.wid += insetdim.wid; + dim.des = max(dim.des, insetdim.height()); + } + } } dim_ = dim; @@ -177,7 +186,11 @@ void InsetCollapsable::draw(PainterInfo if (status_ == Open) { if (!owner()) x += scroll(); - inset.draw(pi, x, y - aa + dimc.height() + inset.ascent()); + + if (!openinlined_) + inset.draw(pi, x, y - aa + dimc.height() + inset.ascent()); + else + inset.draw(pi, x + dimc.width(), y - aa + inset.ascent()); } } } @@ -324,14 +337,16 @@ void InsetCollapsable::priv_dispatch(LCu case LFUN_MOUSE_PRESS: if (status_ == Inlined) inset.dispatch(cur, cmd); - else if (status_ == Open && cmd.y > button_dim.y2) + else if (status_ == Open && + !button_dim.contains(cmd.x, cmd.y)) inset.dispatch(cur, cmd); break; case LFUN_MOUSE_MOTION: if (status_ == Inlined) inset.dispatch(cur, cmd); - else if (status_ == Open && cmd.y > button_dim.y2) + else if (status_ == Open && ! + button_dim.contains(cmd.x, cmd.y)) inset.dispatch(cur, cmd); break; Index: insetcollapsable.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.h,v retrieving revision 1.168 diff -u -p -u -r1.168 insetcollapsable.h --- insetcollapsable.h 16 Feb 2004 11:58:47 -0000 1.168 +++ insetcollapsable.h 4 Mar 2004 10:40:34 -0000 @@ -160,6 +160,8 @@ protected: private: /// mutable CollapseStatus status_; + /// a substatus of the Open status, determined automatically in metrics + mutable bool openinlined_; }; #endif