Michael Gerz wrote:

how about the attached patch? I think it captures a few more cases

Hi Michael,

you mean that the user rather first creates the contents of the float and then inserts the float than write the caption and then insert the float? Thats imho a better solution. I added the centering of the inserted paragraphs previously mentioned and an additional test before adding the empty paragraph below the caption.

Bernhard


Index: text3.C
===================================================================
--- text3.C     (revision 17095)
+++ text3.C     (working copy)
@@ -1213,13 +1213,32 @@
                doInsertInset(cur, this, cmd, true, true);
                cur.posRight();
                ParagraphList & pars = cur.text()->paragraphs();
-               // We create two additional empty paragraphs so that the
-               // user can choose where to put the graphics (or table).
-               pars.push_back(pars[0]);
-               pars.push_back(pars[0]);
-               // Now that we have three paragraphs, we reposition the cursor
-               // at the beginning of the second one.
-               cur.pit() = 1;
+               LyXTextClass const & tclass = 
bv->buffer()->params().getLyXTextClass();
+
+               // set centered alignment
+               for (unsigned i = 0; i < pars.size(); ++i) {
+                       pars[i].params().align(LYX_ALIGN_CENTER);
+               }
+
+               // add a separate paragraph for the caption inset
+               pars.push_back(Paragraph());
+               pars.back().setInsetOwner(pars[0].inInset());
+               pars.back().layout(tclass.defaultLayout());
+
+               int cap_pit = pars.size() - 1;
+
+               // if an empty inset was created, we create an additional empty
+               // paragraph at the bottom so that the user can choose where to 
put
+               // the graphics (or table).
+               if (cap_pit == 1 && pars[0].empty()) {
+                       pars.push_back(Paragraph());
+                       pars.back().setInsetOwner(pars[0].inInset());
+                       pars.back().layout(tclass.defaultLayout());
+                       pars.back().params().align(LYX_ALIGN_CENTER);
+               }
+
+               // reposition the cursor to the caption
+               cur.pit() = cap_pit;
                cur.pos() = 0;
                cur.dispatch(FuncRequest(LFUN_CAPTION_INSERT));
                // FIXME: When leaving the Float (or Wrap) inset we should

Reply via email to