X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=2450e0fc5cbfa5dc5eec958adf8341ecf0ac7fe4;hb=dfd786e6a0cb8d2d9548d1a0ef17eb47b0752e1b;hp=d2c1e63607282ff5ac0a3e0d3c2686f81ea9be41;hpb=b306e9a2e15664c630e1b462c3db3caf0e9cc9c9;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index d2c1e63607..2450e0fc5c 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -1,4 +1,4 @@ -/* +/** * \file CutAndPaste.cpp * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. @@ -15,6 +15,7 @@ #include "CutAndPaste.h" +#include "BaseClassList.h" #include "Buffer.h" #include "buffer_funcs.h" #include "BufferParams.h" @@ -30,7 +31,6 @@ #include "LyXFunc.h" #include "LyXRC.h" #include "Text.h" -#include "TextClassList.h" #include "Paragraph.h" #include "paragraph_funcs.h" #include "ParagraphParameters.h" @@ -70,7 +70,7 @@ namespace { typedef pair PitPosPair; -typedef limited_stack > CutStack; +typedef limited_stack > CutStack; CutStack theCuts(10); // persistent selection, cleared until the next selection @@ -106,7 +106,7 @@ bool checkPastePossible(int index) pair pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, - TextClassIndex const & textclass, ErrorList & errorlist) + TextClassPtr textclass, ErrorList & errorlist) { Buffer const & buffer = cur.buffer(); pit_type pit = cur.pit(); @@ -120,18 +120,18 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, // Make a copy of the CaP paragraphs. ParagraphList insertion = parlist; - TextClassIndex tcindex = buffer.params().textClassIndex(); + TextClassPtr const tc = buffer.params().textClassPtr(); // Now remove all out of the pars which is NOT allowed in the // new environment and set also another font if that is required. // Convert newline to paragraph break in ERT inset. // This should not be here! - if (pars[pit].inInset() && - (pars[pit].inInset()->lyxCode() == ERT_CODE || - pars[pit].inInset()->lyxCode() == LISTINGS_CODE)) { - for (ParagraphList::size_type i = 0; i < insertion.size(); ++i) { - for (pos_type j = 0; j < insertion[i].size(); ++j) { + Inset * inset = pars[pit].inInset(); + if (inset && (inset->lyxCode() == ERT_CODE || + inset->lyxCode() == LISTINGS_CODE)) { + for (size_t i = 0; i != insertion.size(); ++i) { + for (pos_type j = 0; j != insertion[i].size(); ++j) { if (insertion[i].isNewline(j)) { // do not track deletion of newline insertion[i].eraseChar(j, false); @@ -152,7 +152,7 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, ParagraphList::iterator const end = insertion.end(); for (ParagraphList::iterator par = insertion.begin(); par != end; ++par) - par->layout(layout); + par->setLayout(layout); } // Make sure there is no class difference. @@ -162,7 +162,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(textclass, tcindex, in, errorlist); + cap::switchBetweenClasses(textclass, tc, in, errorlist); insertion.swap(in.paragraphs()); ParagraphList::iterator tmpbuf = insertion.begin(); @@ -217,21 +217,10 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, ParIterator fend = par_iterator_end(in); for (; fpit != fend; ++fpit) { - InsetList::const_iterator lit = fpit->insetList().begin(); - InsetList::const_iterator eit = fpit->insetList().end(); - - for (; lit != eit; ++lit) { - switch (lit->inset->lyxCode()) { - case TABULAR_CODE: { - InsetTabular * it = static_cast(lit->inset); - it->buffer(&buffer); - break; - } - - default: - break; // nothing - } - } + InsetList::const_iterator it = fpit->insetList().begin(); + InsetList::const_iterator et = fpit->insetList().end(); + for (; it != et; ++it) + it->inset->setBuffer(const_cast(&buffer)); } insertion.swap(in.paragraphs()); @@ -328,7 +317,7 @@ PitPosPair eraseSelectionHelper(BufferParams const & params, } -void putClipboard(ParagraphList const & paragraphs, TextClassIndex textclass, +void putClipboard(ParagraphList const & paragraphs, TextClassPtr textclass, docstring const & plaintext) { // For some strange reason gcc 3.2 and 3.3 do not accept @@ -347,7 +336,7 @@ void putClipboard(ParagraphList const & paragraphs, TextClassIndex textclass, void copySelectionHelper(Buffer const & buf, ParagraphList & pars, pit_type startpit, pit_type endpit, - int start, int end, TextClassIndex tc, CutStack & cutstack) + int start, int end, TextClassPtr tc, CutStack & cutstack) { BOOST_ASSERT(0 <= start && start <= pars[startpit].size()); BOOST_ASSERT(0 <= end && end <= pars[endpit].size()); @@ -403,27 +392,28 @@ docstring grabAndEraseSelection(Cursor & cur) } -void switchBetweenClasses(TextClassIndex const & oldtcindex, - TextClassIndex const & newtcindex, InsetText & in, ErrorList & errorlist) +void switchBetweenClasses(TextClassPtr const & oldone, + TextClassPtr const & newone, InsetText & in, ErrorList & errorlist) { errorlist.clear(); BOOST_ASSERT(!in.paragraphs().empty()); - if (oldtcindex == newtcindex) + if (oldone == newone) return; + TextClass const & oldtc = *oldone; + TextClass const & newtc = *newone; + // layouts ParIterator end = par_iterator_end(in); - TextClass const & oldtc = textclasslist[oldtcindex]; - TextClass const & newtc = textclasslist[newtcindex]; for (ParIterator it = par_iterator_begin(in); it != end; ++it) { docstring const name = it->layout()->name(); bool hasLayout = newtc.hasLayout(name); if (hasLayout) - it->layout(newtc[name]); + it->setLayout(newtc[name]); else - it->layout(newtc.defaultLayout()); + it->setLayout(newtc.defaultLayout()); if (!hasLayout && name != oldtc.defaultLayoutName()) { docstring const s = bformat( @@ -447,7 +437,7 @@ void switchBetweenClasses(TextClassIndex const & oldtcindex, if (inset->lyxCode() != FLEX_CODE) // FIXME: Should we verify all InsetCollapsable? continue; - inset->setLayout(newtcindex); + inset->setLayout(newone); if (!inset->undefined()) continue; // The flex inset is undefined in newtc @@ -528,7 +518,7 @@ void cutSelection(Cursor & cur, bool doclear, bool realcut) text->paragraphs(), begpit, endpit, cur.selBegin().pos(), endpos, - bp.textClassIndex(), theCuts); + bp.textClassPtr(), theCuts); // Stuff what we got on the clipboard. // Even if there is no selection. putClipboard(theCuts[0].first, theCuts[0].second, @@ -612,7 +602,7 @@ void copySelectionToStack(Cursor & cur, CutStack & cutstack) copySelectionHelper(cur.buffer(), pars, par, cur.selEnd().pit(), pos, cur.selEnd().pos(), - cur.buffer().params().textClassIndex(), cutstack); + cur.buffer().params().textClassPtr(), cutstack); dirtyTabularStack(false); } @@ -621,10 +611,10 @@ void copySelectionToStack(Cursor & cur, CutStack & cutstack) ParagraphList pars; Paragraph par; BufferParams const & bp = cur.buffer().params(); - par.layout(bp.textClass().defaultLayout()); + par.setLayout(bp.textClass().defaultLayout()); par.insert(0, grabSelection(cur), Font(), Change(Change::UNCHANGED)); pars.push_back(par); - cutstack.push(make_pair(pars, bp.textClassIndex())); + cutstack.push(make_pair(pars, bp.textClassPtr())); } } @@ -648,10 +638,10 @@ void copySelection(Cursor & cur, docstring const & plaintext) ParagraphList pars; Paragraph par; BufferParams const & bp = cur.buffer().params(); - par.layout(bp.textClass().defaultLayout()); + par.setLayout(bp.textClass().defaultLayout()); par.insert(0, plaintext, Font(), Change(Change::UNCHANGED)); pars.push_back(par); - theCuts.push(make_pair(pars, bp.textClassIndex())); + theCuts.push(make_pair(pars, bp.textClassPtr())); } else { copySelectionToStack(cur, theCuts); } @@ -702,7 +692,7 @@ docstring getSelection(Buffer const & buf, size_t sel_index) void pasteParagraphList(Cursor & cur, ParagraphList const & parlist, - TextClassIndex const & textclass, ErrorList & errorList) + TextClassPtr textclass, ErrorList & errorList) { if (cur.inTexted()) { Text * text = cur.text(); @@ -755,7 +745,7 @@ void pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs) if (buffer.readString(lyx)) { cur.recordUndo(); pasteParagraphList(cur, buffer.paragraphs(), - buffer.params().textClassIndex(), errorList); + buffer.params().textClassPtr(), errorList); cur.setSelection(); return; } @@ -774,7 +764,7 @@ void pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs) } -void pasteClipboardGraphics(Cursor & cur, ErrorList & /*errorList*/, +void pasteClipboardGraphics(Cursor & cur, ErrorList & /* errorList */, Clipboard::GraphicsType preferedType) { BOOST_ASSERT(theClipboard().hasGraphicsContents(preferedType));