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

Reply via email to