X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.C;h=ed331f729163d8567c7c9f4e4783dd1a3d94ffed;hb=664eb7ff45dbb4fabc22ec0b56798031a82335b1;hp=dc80a25457fcd49516ca3972f63d8a58ef5c002a;hpb=e33924c4eb556207b97a83c433b98098f174708e;p=lyx.git diff --git a/src/CutAndPaste.C b/src/CutAndPaste.C index dc80a25457..ed331f7291 100644 --- a/src/CutAndPaste.C +++ b/src/CutAndPaste.C @@ -10,9 +10,13 @@ #include #include "CutAndPaste.h" +#include "BufferView.h" +#include "buffer.h" #include "lyxparagraph.h" #include "insets/inseterror.h" #include "lyx_gui_misc.h" +#include "lyxcursor.h" +#include "gettext.h" #ifdef __GNUG__ #pragma implementation @@ -20,6 +24,8 @@ using std::pair; +extern BufferView * current_view; + // Jürgen, note that this means that you cannot currently have a list // of selections cut/copied. So IMHO later we should have a // list/vector/deque that we could store @@ -39,328 +45,540 @@ using std::pair; // then do a middle mouse button click in the application you want and have // the whole formula there in LaTeX-Code. (Jug) -static LyXParagraph * buf = 0; -static LyXTextClassList::size_type textclass = 0; +namespace { + +LyXParagraph * buf = 0; +LyXTextClassList::size_type textclass = 0; // for now here this should be in another Cut&Paste Class! // Jürgen, I moved this out of CutAndPaste since it does not operate on any // member of the CutAndPaste class and in addition it was private. // Perhaps it even should take a parameter? (Lgb) -static void DeleteBuffer() { if (!buf) - return; + return; LyXParagraph * tmppar; while (buf) { - tmppar = buf; - buf = buf->next; - delete tmppar; + tmppar = buf; +#ifndef NEW_INSETS + buf = buf->next_; +#else + buf = buf->next(); +#endif + delete tmppar; } buf = 0; } +} // namespace anon + +#ifndef NEW_INSETS bool CutAndPaste::cutSelection(LyXParagraph * startpar, LyXParagraph ** endpar, int start, int & end, char tc, bool doclear) { - if (!startpar || (start > startpar->Last())) - return false; - - DeleteBuffer(); - - textclass = tc; - - if (!(*endpar) || (startpar->ParFromPos(start) == - (*endpar)->ParFromPos(end))) { - // only within one paragraph - buf = new LyXParagraph; - LyXParagraph::size_type i = start; - if (end > startpar->Last()) - end = startpar->Last(); - for (; i < end; ++i) { - startpar->CopyIntoMinibuffer(start); - /* table stuff -- begin */ - if (startpar->table && startpar->IsNewline(start)) { - ++start; - } else { - /* table stuff -- end */ - startpar->Erase(start); - } - buf->InsertFromMinibuffer(buf->Last()); - } - } else { - // more than one paragraph - (*endpar)->BreakParagraphConservative(end); - *endpar = (*endpar)->Next(); - end = 0; - - startpar->BreakParagraphConservative(start); - - // store the selection - buf = startpar->ParFromPos(start)->next; - buf->previous = 0; - (*endpar)->previous->next = 0; - - // cut the selection - startpar->ParFromPos(start)->next = (*endpar); + if (!startpar || (start > startpar->Last())) + return false; - (*endpar)->previous = startpar->ParFromPos(start); - - // care about footnotes - if (buf->footnoteflag) { - LyXParagraph * tmppar = buf; - while (tmppar){ - tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE; - tmppar = tmppar->next; - } + DeleteBuffer(); + + textclass = tc; + + if (!(*endpar) || + (startpar->ParFromPos(start) == + (*endpar)->ParFromPos(end))) { + // only within one paragraph + buf = new LyXParagraph; + LyXParagraph::size_type i = start; + if (end > startpar->Last()) + end = startpar->Last(); + for (; i < end; ++i) { + startpar->CopyIntoMinibuffer(*current_view->buffer(), start); + startpar->Erase(start); + + buf->InsertFromMinibuffer(buf->Last()); + } + end = start - 1; + } else { + // more than one paragraph + (*endpar)->BreakParagraphConservative(current_view->buffer()->params, + end); + *endpar = (*endpar)->next(); + end = 0; + + startpar->BreakParagraphConservative(current_view->buffer()->params, + start); + + // store the selection + buf = startpar->ParFromPos(start)->next_; + buf->previous(0); + (*endpar)->previous()->next(0); + + // cut the selection + startpar->ParFromPos(start)->next(*endpar); + + (*endpar)->previous(startpar->ParFromPos(start)); + + // care about footnotes + if (buf->footnoteflag) { + LyXParagraph * tmppar = buf; + while (tmppar){ + tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE; + tmppar = tmppar->next_; + } + } + + // the cut selection should begin with standard layout + buf->Clear(); + + // paste the paragraphs again, if possible + if (doclear) + startpar->next()->StripLeadingSpaces(textclass); + if (startpar->FirstPhysicalPar()->HasSameLayout(startpar->next()) || + !startpar->next()->Last()) { + startpar->ParFromPos(start)->PasteParagraph(current_view->buffer()->params); + (*endpar) = startpar; // this because endpar gets deleted here! + } } - - // the cut selection should begin with standard layout - buf->Clear(); + return true; +} +#else +bool CutAndPaste::cutSelection(LyXParagraph * startpar, LyXParagraph ** endpar, + int start, int & end, char tc, bool doclear) +{ + if (!startpar || (start > startpar->size())) + return false; + + DeleteBuffer(); + + textclass = tc; + + if (!(*endpar) || + startpar == (*endpar)) { + // only within one paragraph + buf = new LyXParagraph; + LyXParagraph::size_type i = start; + if (end > startpar->size()) + end = startpar->size(); + for (; i < end; ++i) { + startpar->CopyIntoMinibuffer(*current_view->buffer(), + start); + startpar->Erase(start); + + buf->InsertFromMinibuffer(buf->size()); + } + end = start - 1; + } else { + // more than one paragraph + (*endpar)->BreakParagraphConservative(current_view->buffer()->params, + end); + *endpar = (*endpar)->next(); + end = 0; - // paste the paragraphs again, if possible - if (doclear) - startpar->Next()->ClearParagraph(); - if (startpar->FirstPhysicalPar()->HasSameLayout(startpar->Next()) || - !startpar->Next()->Last()) { - startpar->ParFromPos(start)->PasteParagraph(); - (*endpar) = startpar; // this because endpar gets deleted here! + startpar->BreakParagraphConservative(current_view->buffer()->params, + start); + + // store the selection + buf = startpar->next(); + + buf->previous(0); + (*endpar)->previous()->next(0); + + // cut the selection + startpar->next(*endpar); + + (*endpar)->previous(startpar); + + // the cut selection should begin with standard layout + buf->Clear(); + + // paste the paragraphs again, if possible + if (doclear) + startpar->next()->StripLeadingSpaces(textclass); + if (startpar->HasSameLayout(startpar->next()) || + !startpar->next()->size()) { + startpar->PasteParagraph(current_view->buffer()->params); + (*endpar) = startpar; // this because endpar gets deleted here! + } } - } - return true; + return true; } +#endif +#ifndef NEW_INSETS bool CutAndPaste::copySelection(LyXParagraph * startpar, LyXParagraph * endpar, int start, int end, char tc) { - if (!startpar || (start > startpar->Last())) - return false; - - DeleteBuffer(); - - textclass = tc; - - if (!(endpar) || (startpar->ParFromPos(start) == - (endpar)->ParFromPos(end))) { - // only within one paragraph - buf = new LyXParagraph; - LyXParagraph::size_type i = start; - if (end > startpar->Last()) - end = startpar->Last(); - for (; i < end; ++i) { - startpar->CopyIntoMinibuffer(i); - buf->InsertFromMinibuffer(buf->Last()); - } - } else { - // copy more than one paragraph - // clone the paragraphs within the selection - LyXParagraph *tmppar = startpar->ParFromPos(start); - buf = tmppar->Clone(); - LyXParagraph *tmppar2 = buf; - - while (tmppar != endpar->ParFromPos(end) - && tmppar->next) { - tmppar = tmppar->next; - tmppar2->next = tmppar->Clone(); - tmppar2->next->previous = tmppar2; - tmppar2 = tmppar2->next; - } - tmppar2->next = 0; - - // care about footnotes - if (buf->footnoteflag) { - tmppar = buf; - while (tmppar) { - tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE; - tmppar = tmppar->next; - } + if (!startpar || (start > startpar->Last())) + return false; + + DeleteBuffer(); + + textclass = tc; + + if (!(endpar) || + (startpar->ParFromPos(start) == + (endpar)->ParFromPos(end))) { + // only within one paragraph + buf = new LyXParagraph; + LyXParagraph::size_type i = start; + if (end > startpar->Last()) + end = startpar->Last(); + for (; i < end; ++i) { + startpar->CopyIntoMinibuffer(*current_view->buffer(), + i); + buf->InsertFromMinibuffer(buf->Last()); + } + } else { + // copy more than one paragraph + // clone the paragraphs within the selection + LyXParagraph * tmppar = startpar->ParFromPos(start); + buf = tmppar->Clone(); + LyXParagraph * tmppar2 = buf; + + while (tmppar != endpar->ParFromPos(end) + && tmppar->next_) { + tmppar = tmppar->next_; + tmppar2->next(tmppar->Clone()); + tmppar2->next_->previous(tmppar2); + tmppar2 = tmppar2->next_; + } + tmppar2->next(0); + + // care about footnotes + if (buf->footnoteflag) { + tmppar = buf; + while (tmppar) { + tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE; + tmppar = tmppar->next_; + } + } + + // the buf paragraph is too big + LyXParagraph::size_type tmpi2 = startpar->PositionInParFromPos(start); + for (; tmpi2; --tmpi2) + buf->Erase(0); + + // now tmppar 2 is too big, delete all after end + tmpi2 = endpar->PositionInParFromPos(end); + while (tmppar2->size() > tmpi2) { + tmppar2->Erase(tmppar2->size() - 1); + } } + return true; +} +#else +bool CutAndPaste::copySelection(LyXParagraph * startpar, LyXParagraph * endpar, + int start, int end, char tc) +{ + if (!startpar || (start > startpar->size())) + return false; - // the buf paragraph is too big - LyXParagraph::size_type tmpi2 = startpar->PositionInParFromPos(start); - for (; tmpi2; --tmpi2) - buf->Erase(0); + DeleteBuffer(); - // now tmppar 2 is too big, delete all after end + textclass = tc; - tmpi2 = endpar->PositionInParFromPos(end); - while (tmppar2->size() > tmpi2) { - tmppar2->Erase(tmppar2->size() - 1); + if (!endpar || + startpar == endpar) { + // only within one paragraph + buf = new LyXParagraph; + LyXParagraph::size_type i = start; + if (end > startpar->size()) + end = startpar->size(); + for (; i < end; ++i) { + startpar->CopyIntoMinibuffer(*current_view->buffer(), i); + buf->InsertFromMinibuffer(buf->size()); + } + } else { + // copy more than one paragraph + // clone the paragraphs within the selection + LyXParagraph * tmppar = startpar; + buf = tmppar->Clone(); + LyXParagraph * tmppar2 = buf; + + while (tmppar != endpar + && tmppar->next()) { + tmppar = tmppar->next(); + tmppar2->next(tmppar->Clone()); + tmppar2->next()->previous(tmppar2); + tmppar2 = tmppar2->next(); + } + tmppar2->next(0); + + // the buf paragraph is too big + LyXParagraph::size_type tmpi2 = start; + for (; tmpi2; --tmpi2) + buf->Erase(0); + + // now tmppar 2 is too big, delete all after end + tmpi2 = end; + while (tmppar2->size() > tmpi2) { + tmppar2->Erase(tmppar2->size() - 1); + } } - } - return true; + return true; } +#endif +#ifndef NEW_INSETS bool CutAndPaste::pasteSelection(LyXParagraph ** par, LyXParagraph ** endpar, int & pos, char tc) { - if (!checkPastePossible(*par, pos)) - return false; - - if (pos > (*par)->Last()) - pos = (*par)->Last(); - - LyXParagraph * tmpbuf; - LyXParagraph * tmppar = *par; - int tmppos = pos; - - // There are two cases: cutbuffer only one paragraph or many - if (!buf->next) { - // only within a paragraph - tmpbuf = buf->Clone(); - /* table stuff -- begin */ - bool table_too_small = false; - if ((*par)->table) { - while (buf->size() && !table_too_small) { - if (buf->IsNewline(0)){ - while((tmppos < tmppar->Last()) && - !tmppar->IsNewline(tmppos)) - ++tmppos; - buf->Erase(0); - if (tmppos < tmppar->Last()) - ++tmppos; - else - table_too_small = true; - } else { - // This is an attempt to fix the - // "never insert a space at the - // beginning of a paragraph" problem. - if (!tmppos && buf->IsLineSeparator(0)) { - buf->Erase(0); - } else { - buf->CutIntoMinibuffer(0); - buf->Erase(0); - if (tmppar->InsertFromMinibuffer(tmppos)) - ++tmppos; - } + if (!checkPastePossible(*par)) + return false; + + if (pos > (*par)->Last()) + pos = (*par)->Last(); + + LyXParagraph * tmpbuf; + LyXParagraph * tmppar = *par; + int tmppos = pos; + + // There are two cases: cutbuffer only one paragraph or many + if (!buf->next_) { + // only within a paragraph + tmpbuf = buf->Clone(); + // Some provisions should be done here for checking + // if we are inserting at the beginning of a + // paragraph. If there are a space at the beginning + // of the text to insert and we are inserting at + // the beginning of the paragraph the space should + // be removed. + while (buf->size()) { + // This is an attempt to fix the + // "never insert a space at the + // beginning of a paragraph" problem. + if (!tmppos && buf->IsLineSeparator(0)) { + buf->Erase(0); + } else { + buf->CutIntoMinibuffer(current_view->buffer()->params, 0); + buf->Erase(0); + if (tmppar->InsertFromMinibuffer(tmppos)) + ++tmppos; + } } - } + delete buf; + buf = tmpbuf; + *endpar = tmppar->next(); + pos = tmppos; } else { - /* table stuff -- end */ - // Some provisions should be done here for checking - // if we are inserting at the beginning of a - // paragraph. If there are a space at the beginning - // of the text to insert and we are inserting at - // the beginning of the paragraph the space should - // be removed. - while (buf->size()) { - // This is an attempt to fix the - // "never insert a space at the - // beginning of a paragraph" problem. - if (!tmppos && buf->IsLineSeparator(0)) { - buf->Erase(0); - } else { - buf->CutIntoMinibuffer(0); - buf->Erase(0); - if (tmppar->InsertFromMinibuffer(tmppos)) - ++tmppos; + // many paragraphs + + // make a copy of the simple cut_buffer + tmpbuf = buf; + LyXParagraph * simple_cut_clone = tmpbuf->Clone(); + LyXParagraph * tmpbuf2 = simple_cut_clone; + if ((*par)->footnoteflag) { + tmpbuf->footnoteflag = (*par)->footnoteflag; + tmpbuf->footnotekind = (*par)->footnotekind; } - } - } - delete buf; - buf = tmpbuf; - *endpar = tmppar->Next(); - pos = tmppos; - } else { - // many paragraphs - - // make a copy of the simple cut_buffer - tmpbuf = buf; - LyXParagraph * simple_cut_clone = tmpbuf->Clone(); - LyXParagraph * tmpbuf2 = simple_cut_clone; - if ((*par)->footnoteflag){ - tmpbuf->footnoteflag = (*par)->footnoteflag; - tmpbuf->footnotekind = (*par)->footnotekind; - } - while (tmpbuf->next) { - tmpbuf = tmpbuf->next; - tmpbuf2->next = tmpbuf->Clone(); - tmpbuf2->next->previous = tmpbuf2; - tmpbuf2 = tmpbuf2->next; - if ((*par)->footnoteflag){ - tmpbuf->footnoteflag = (*par)->footnoteflag; - tmpbuf->footnotekind = (*par)->footnotekind; - } + while (tmpbuf->next_) { + tmpbuf = tmpbuf->next_; + tmpbuf2->next(tmpbuf->Clone()); + tmpbuf2->next_->previous(tmpbuf2); + tmpbuf2 = tmpbuf2->next_; + if ((*par)->footnoteflag){ + tmpbuf->footnoteflag = (*par)->footnoteflag; + tmpbuf->footnotekind = (*par)->footnotekind; + } + } + + // make sure there is no class difference + SwitchLayoutsBetweenClasses(textclass, tc, buf); + + // make the buf exactly the same layout than + // the cursor paragraph + buf->MakeSameLayout(*par); + + // find the end of the buffer + LyXParagraph * lastbuffer = buf; + while (lastbuffer->next()) + lastbuffer = lastbuffer->next(); + + bool paste_the_end = false; + + // open the paragraph for inserting the buf + // if necessary + if (((*par)->Last() > pos) || !(*par)->next()) { + (*par)->BreakParagraphConservative(current_view->buffer()->params, + pos); + paste_the_end = true; + } + // set the end for redoing later + *endpar = (*par)->ParFromPos(pos)->next_->next(); + + // paste it! + lastbuffer->ParFromPos(lastbuffer->Last())->next( + (*par)->ParFromPos(pos)->next_); + (*par)->ParFromPos(pos)->next()->previous( + lastbuffer->ParFromPos(lastbuffer->Last())); + + (*par)->ParFromPos(pos)->next(buf); + buf->previous((*par)->ParFromPos(pos)); + + if ((*par)->ParFromPos(pos)->next() == lastbuffer) + lastbuffer = *par; + + (*par)->ParFromPos(pos)->PasteParagraph(current_view->buffer()->params); + // store the new cursor position + *par = lastbuffer; + pos = lastbuffer->Last(); + // maybe some pasting + if (lastbuffer->next() && paste_the_end) { + if (lastbuffer->next()->HasSameLayout(lastbuffer)) { + lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph(current_view->buffer()->params); + } else if (!lastbuffer->next()->Last()) { + lastbuffer->next()->MakeSameLayout(lastbuffer); + lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph(current_view->buffer()->params); + } else if (!lastbuffer->Last()) { + lastbuffer->MakeSameLayout(lastbuffer->next_); + lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph(current_view->buffer()->params); + } else + lastbuffer->next()->StripLeadingSpaces(tc); + } + // restore the simple cut buffer + buf = simple_cut_clone; } + return true; +} +#else +bool CutAndPaste::pasteSelection(LyXParagraph ** par, LyXParagraph ** endpar, + int & pos, char tc) +{ + if (!checkPastePossible(*par)) + return false; - // make sure there is no class difference - SwitchLayoutsBetweenClasses(textclass, tc, buf); - - // make the buf exactly the same layout than - // the cursor paragraph - buf->MakeSameLayout(*par); - - // find the end of the buffer - LyXParagraph * lastbuffer = buf; - while (lastbuffer->Next()) - lastbuffer = lastbuffer->Next(); + if (pos > (*par)->size()) + pos = (*par)->size(); - bool paste_the_end = false; + LyXParagraph * tmpbuf; + LyXParagraph * tmppar = *par; + int tmppos = pos; - // open the paragraph for inserting the buf - // if necessary - if (((*par)->Last() > pos) || !(*par)->Next()) { - (*par)->BreakParagraphConservative(pos); - paste_the_end = true; + // There are two cases: cutbuffer only one paragraph or many + if (!buf->next()) { + // only within a paragraph + tmpbuf = buf->Clone(); + // Some provisions should be done here for checking + // if we are inserting at the beginning of a + // paragraph. If there are a space at the beginning + // of the text to insert and we are inserting at + // the beginning of the paragraph the space should + // be removed. + while (buf->size()) { + // This is an attempt to fix the + // "never insert a space at the + // beginning of a paragraph" problem. + if (!tmppos && buf->IsLineSeparator(0)) { + buf->Erase(0); + } else { + buf->CutIntoMinibuffer(current_view->buffer()->params, 0); + buf->Erase(0); + if (tmppar->InsertFromMinibuffer(tmppos)) + ++tmppos; + } + } + delete buf; + buf = tmpbuf; + *endpar = tmppar->next(); + pos = tmppos; + } else { + // many paragraphs + + // make a copy of the simple cut_buffer + tmpbuf = buf; + LyXParagraph * simple_cut_clone = tmpbuf->Clone(); + LyXParagraph * tmpbuf2 = simple_cut_clone; + while (tmpbuf->next()) { + tmpbuf = tmpbuf->next(); + tmpbuf2->next(tmpbuf->Clone()); + tmpbuf2->next()->previous(tmpbuf2); + tmpbuf2 = tmpbuf2->next(); + } + + // make sure there is no class difference + SwitchLayoutsBetweenClasses(textclass, tc, buf); + + // make the buf exactly the same layout than + // the cursor paragraph + buf->MakeSameLayout(*par); + + // find the end of the buffer + LyXParagraph * lastbuffer = buf; + while (lastbuffer->next()) + lastbuffer = lastbuffer->next(); + + bool paste_the_end = false; + + // open the paragraph for inserting the buf + // if necessary + if (((*par)->size() > pos) || !(*par)->next()) { + (*par)->BreakParagraphConservative(current_view->buffer()->params, + pos); + paste_the_end = true; + } + // set the end for redoing later + *endpar = (*par)->next()->next(); + + // paste it! + lastbuffer->next((*par)->next()); + (*par)->next()->previous(lastbuffer); + + (*par)->next(buf); + buf->previous(*par); + + if ((*par)->next() == lastbuffer) + lastbuffer = *par; + + (*par)->PasteParagraph(current_view->buffer()->params); + // store the new cursor position + *par = lastbuffer; + pos = lastbuffer->size(); + // maybe some pasting + if (lastbuffer->next() && paste_the_end) { + if (lastbuffer->next()->HasSameLayout(lastbuffer)) { + lastbuffer->PasteParagraph(current_view->buffer()->params); + } else if (!lastbuffer->next()->size()) { + lastbuffer->next()->MakeSameLayout(lastbuffer); + lastbuffer->PasteParagraph(current_view->buffer()->params); + } else if (!lastbuffer->size()) { + lastbuffer->MakeSameLayout(lastbuffer->next()); + lastbuffer->PasteParagraph(current_view->buffer()->params); + } else + lastbuffer->next()->StripLeadingSpaces(tc); + } + // restore the simple cut buffer + buf = simple_cut_clone; } - // set the end for redoing later - *endpar = (*par)->ParFromPos(pos)->next->Next(); - - // paste it! - lastbuffer->ParFromPos(lastbuffer->Last())->next = - (*par)->ParFromPos(pos)->next; - (*par)->ParFromPos(pos)->next->previous = - lastbuffer->ParFromPos(lastbuffer->Last()); - - (*par)->ParFromPos(pos)->next = buf; - buf->previous = (*par)->ParFromPos(pos); - - if ((*par)->ParFromPos(pos)->Next() == lastbuffer) - lastbuffer = *par; - - (*par)->ParFromPos(pos)->PasteParagraph(); - - // store the new cursor position - *par = lastbuffer; - pos = lastbuffer->Last(); - - // maybe some pasting - if (lastbuffer->Next() && paste_the_end) { - if (lastbuffer->Next()->HasSameLayout(lastbuffer)) { - lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph(); - } else if (!lastbuffer->Next()->Last()) { - lastbuffer->Next()->MakeSameLayout(lastbuffer); - lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph(); - } else if (!lastbuffer->Last()) { - lastbuffer->MakeSameLayout(lastbuffer->next); - lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph(); - } else - lastbuffer->Next()->ClearParagraph(); - } - // restore the simple cut buffer - buf = simple_cut_clone; - } - - return true; + return true; } +#endif -int CutAndPaste::nrOfParagraphs() const +int CutAndPaste::nrOfParagraphs() { - if (!buf) return 0; + if (!buf) + return 0; int n = 1; LyXParagraph * tmppar = buf; - while(tmppar->next) { +#ifndef NEW_INSETS + while(tmppar->next_) { + ++n; + tmppar = tmppar->next_; + } +#else + while(tmppar->next()) { ++n; - tmppar = tmppar->next; + tmppar = tmppar->next(); } +#endif return n; } @@ -371,69 +589,67 @@ int CutAndPaste::SwitchLayoutsBetweenClasses(LyXTextClassList::size_type c1, { int ret = 0; if (!par || c1 == c2) - return ret; + return ret; +#ifndef NEW_INSETS par = par->FirstPhysicalPar(); +#endif while (par) { - string name = textclasslist.NameOfLayout(c1, par->layout); - int lay = 0; - pair pp = - textclasslist.NumberOfLayout(c2, name); - if (pp.first) { - lay = pp.second; - } else { // layout not found - // use default layout "Standard" (0) - lay = 0; - } - par->layout = lay; - - if (name != textclasslist.NameOfLayout(c2, par->layout)) { - ++ret; - string s = "Layout had to be changed from\n" - + name + " to " - + textclasslist.NameOfLayout(c2, par->layout) - + "\nbecause of class conversion from\n" - + textclasslist.NameOfClass(c1) + " to " - + textclasslist.NameOfClass(c2); - InsetError * new_inset = new InsetError(s); - par->InsertChar(0, LyXParagraph::META_INSET); - par->InsertInset(0, new_inset); - } - - par = par->next; + string name = textclasslist.NameOfLayout(c1, par->layout); + int lay = 0; + pair pp = + textclasslist.NumberOfLayout(c2, name); + if (pp.first) { + lay = pp.second; + } else { // layout not found + // use default layout "Standard" (0) + lay = 0; + } + par->layout = lay; + + if (name != textclasslist.NameOfLayout(c2, par->layout)) { + ++ret; + string s = _("Layout had to be changed from\n") + + name + _(" to ") + + textclasslist.NameOfLayout(c2, par->layout) + + _("\nbecause of class conversion from\n") + + textclasslist.NameOfClass(c1) + _(" to ") + + textclasslist.NameOfClass(c2); + InsetError * new_inset = new InsetError(s); + par->InsertInset(0, new_inset); + } +#ifndef NEW_INSETS + par = par->next_; +#else + par = par->next(); +#endif } return ret; } -bool CutAndPaste::checkPastePossible(LyXParagraph * par, int) const +#ifndef NEW_INSETS +bool CutAndPaste::checkPastePossible(LyXParagraph * par) +#else +bool CutAndPaste::checkPastePossible(LyXParagraph *) +#endif { if (!buf) return false; - LyXParagraph * tmppar; - +#ifndef NEW_INSETS // be carefull with footnotes in footnotes if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE) { - // check whether the cut_buffer includes a footnote - tmppar = buf; - while (tmppar && tmppar->footnoteflag == LyXParagraph::NO_FOOTNOTE) - tmppar = tmppar->next; + // check whether the cut_buffer includes a footnote + LyXParagraph * tmppar = buf; + while (tmppar && tmppar->footnoteflag == LyXParagraph::NO_FOOTNOTE) + tmppar = tmppar->next_; - if (tmppar) { - WriteAlert(_("Impossible operation"), - _("Can't paste float into float!"), - _("Sorry.")); - return false; - } - } - /* table stuff -- begin */ - if (par->table) { - if (buf->next) { - WriteAlert(_("Impossible operation"), - _("Table cell cannot include more than one paragraph!"), - _("Sorry.")); - return false; - } + if (tmppar) { + WriteAlert(_("Impossible operation"), + _("Can't paste float into float!"), + _("Sorry.")); + return false; + } } - /* table stuff -- end */ +#endif return true; }