X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=761a107b6ad8be1b83054f49b6fc91b8f384457a;hb=341e4480df5d12f69d83d1a0fc8d1c1232954689;hp=9d5b97fe546112a4eeafa5525f77b6fa1cdc68db;hpb=30c7f6f0194c7854eb969f0fb00e9485d8048d1b;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 9d5b97fe54..761a107b6a 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -90,7 +90,7 @@ bool checkPastePossible(int index) pair pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, - DocumentClass const * const docclass, ErrorList & errorlist) + DocumentClass const * const oldDocClass, ErrorList & errorlist) { Buffer const & buffer = cur.buffer(); pit_type pit = cur.pit(); @@ -104,7 +104,8 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, // Make a copy of the CaP paragraphs. ParagraphList insertion = parlist; - DocumentClass const * const tc = buffer.params().documentClassPtr(); + DocumentClass const * const newDocClass = + buffer.params().documentClassPtr(); // Now remove all out of the pars which is NOT allowed in the // new environment and set also another font if that is required. @@ -128,15 +129,27 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, } // set the paragraphs to empty layout if necessary - // note that we are doing this if the empty layout is - // supposed to be the default, not just if it is forced if (cur.inset().useEmptyLayout()) { - Layout const & layout = - buffer.params().documentClass().emptyLayout(); + bool forceEmptyLayout = cur.inset().forceEmptyLayout(); + Layout const & emptyLayout = newDocClass->emptyLayout(); + Layout const & defaultLayout = newDocClass->defaultLayout(); ParagraphList::iterator const end = insertion.end(); - for (ParagraphList::iterator par = insertion.begin(); - par != end; ++par) - par->setLayout(layout); + ParagraphList::iterator par = insertion.begin(); + for (; par != end; ++par) { + Layout const & parLayout = par->layout(); + if (forceEmptyLayout || parLayout == defaultLayout) + par->setLayout(emptyLayout); + } + } else { // check if we need to reset from empty layout + Layout const & defaultLayout = newDocClass->defaultLayout(); + Layout const & emptyLayout = newDocClass->emptyLayout(); + ParagraphList::iterator const end = insertion.end(); + ParagraphList::iterator par = insertion.begin(); + for (; par != end; ++par) { + Layout const & parLayout = par->layout(); + if (parLayout == emptyLayout) + par->setLayout(defaultLayout); + } } // Make sure there is no class difference. @@ -146,7 +159,7 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, // since we store pointers to insets at some places and we don't // want to invalidate them. insertion.swap(in.paragraphs()); - cap::switchBetweenClasses(docclass, tc, in, errorlist); + cap::switchBetweenClasses(oldDocClass, newDocClass, in, errorlist); insertion.swap(in.paragraphs()); ParagraphList::iterator tmpbuf = insertion.begin(); @@ -363,9 +376,9 @@ void copySelectionHelper(Buffer const & buf, ParagraphList & pars, pit_type startpit, pit_type endpit, int start, int end, DocumentClass const * const dc, CutStack & cutstack) { - BOOST_ASSERT(0 <= start && start <= pars[startpit].size()); - BOOST_ASSERT(0 <= end && end <= pars[endpit].size()); - BOOST_ASSERT(startpit != endpit || start <= end); + LASSERT(0 <= start && start <= pars[startpit].size(), /**/); + LASSERT(0 <= end && end <= pars[endpit].size(), /**/); + LASSERT(startpit != endpit || start <= end, /**/); // Clone the paragraphs within the selection. ParagraphList copy_pars(boost::next(pars.begin(), startpit), @@ -478,7 +491,7 @@ void switchBetweenClasses(DocumentClass const * const oldone, { errorlist.clear(); - BOOST_ASSERT(!in.paragraphs().empty()); + LASSERT(!in.paragraphs().empty(), /**/); if (oldone == newone) return; @@ -552,7 +565,7 @@ vector availableSelections() ParagraphList::const_iterator pit = pars.begin(); ParagraphList::const_iterator pend = pars.end(); for (; pit != pend; ++pit) { - asciiSel += pit->asString(false); + asciiSel += pit->asString(AS_STR_INSETS); if (asciiSel.size() > 25) { asciiSel.replace(22, docstring::npos, from_ascii("...")); @@ -584,7 +597,7 @@ void cutSelection(Cursor & cur, bool doclear, bool realcut) if (cur.inTexted()) { Text * text = cur.text(); - BOOST_ASSERT(text); + LASSERT(text, /**/); saveSelection(cur); @@ -608,6 +621,9 @@ void cutSelection(Cursor & cur, bool doclear, bool realcut) cur.selectionAsString(true)); } + if (begpit != endpit) + cur.updateFlags(Update::Force | Update::FitCursor); + boost::tie(endpit, endpos) = eraseSelectionHelper(bp, text->paragraphs(), @@ -670,7 +686,7 @@ void copySelectionToStack(Cursor & cur, CutStack & cutstack) if (cur.inTexted()) { Text * text = cur.text(); - BOOST_ASSERT(text); + LASSERT(text, /**/); // ok we have a selection. This is always between cur.selBegin() // and sel_end cursor @@ -770,7 +786,7 @@ void clearCutStack() docstring selection(size_t sel_index) { return sel_index < theCuts.size() - ? theCuts[sel_index].first.back().asString(false) + ? theCuts[sel_index].first.back().asString(AS_STR_INSETS) : docstring(); } @@ -780,7 +796,7 @@ void pasteParagraphList(Cursor & cur, ParagraphList const & parlist, { if (cur.inTexted()) { Text * text = cur.text(); - BOOST_ASSERT(text); + LASSERT(text, /**/); pit_type endpit; PitPosPair ppp; @@ -793,7 +809,7 @@ void pasteParagraphList(Cursor & cur, ParagraphList const & parlist, } // mathed is handled in InsetMathNest/InsetMathGrid - BOOST_ASSERT(!cur.inMathed()); + LASSERT(!cur.inMathed(), /**/); } @@ -851,7 +867,7 @@ void pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs) void pasteClipboardGraphics(Cursor & cur, ErrorList & /* errorList */, Clipboard::GraphicsType preferedType) { - BOOST_ASSERT(theClipboard().hasGraphicsContents(preferedType)); + LASSERT(theClipboard().hasGraphicsContents(preferedType), /**/); // get picture from clipboard FileName filename = theClipboard().getAsGraphics(cur, preferedType); @@ -861,7 +877,7 @@ void pasteClipboardGraphics(Cursor & cur, ErrorList & /* errorList */, // create inset for graphic InsetGraphics * inset = new InsetGraphics(cur.buffer()); InsetGraphicsParams params; - params.filename = EmbeddedFile(filename.absFilename(), cur.buffer().filePath()); + params.filename = support::DocFileName(filename.absFilename()); inset->setParams(params); cur.recordUndo(); cur.insert(inset);