#include "insets/insettext.h"
#include "debug.h"
#include "support/LAssert.h"
-
#include "iterators.h"
#include <vector>
* we are so it will return the first paragraph of the buffer or the
* first paragraph of the textinset we're in.
*/
-Paragraph * firstUndoParagraph(BufferView * bv, int inset_id)
+ParagraphList undoParagraphs(BufferView * bv, int inset_id)
{
Inset * inset = bv->buffer()->getInsetFromID(inset_id);
if (inset) {
- Paragraph * result = inset->getFirstParagraph(0);
- if (result)
- return result;
+ ParagraphList * result = inset->getParagraphs(0);
+ if (result && !result->empty())
+ return *result;
}
- return &*bv->text->ownerParagraphs().begin();
+ return bv->text->ownerParagraphs();
}
num = -1;
}
}
- t->setCursorIntern(firstUndoParagraph(bv, num), 0);
+ t->setCursorIntern(undoParagraphs(bv, num).begin(), 0);
}
// Set the right(new) inset-owner of the paragraph if there is any.
if (before)
deletepar = before->next();
else
- deletepar = firstUndoParagraph(bv, undo.number_of_inset_id);
- Paragraph * tmppar2 = undo.pars.front();
+ deletepar = &undoParagraphs(bv, undo.number_of_inset_id).front();
+ // this surprisingly fills the undo! (Andre')
+ size_t par = 0;
while (deletepar && deletepar != behind) {
deletelist.push_back(deletepar);
- Paragraph * tmppar = deletepar;
deletepar = deletepar->next();
// A memory optimization for edit:
// is stored in the undo. So restore
// the text informations.
if (undo.kind == Undo::EDIT) {
- tmppar2->setContentsFromPar(*tmppar);
- tmppar2 = tmppar2->next();
+ undo.pars[par]->setContentsFromPar(*deletelist.back());
+ ++par;
}
}
}
}
// Put the new stuff in the list if there is one.
- Paragraph * undopar = undo.pars.empty() ? 0 : undo.pars.front();
- if (undopar) {
- undopar->previous(before);
+ Paragraph * undopar = undo.pars.empty() ? 0 : undo.pars.front();
+ if (!undo.pars.empty()) {
+ undo.pars.front()->previous(before);
if (before)
before->next(undopar);
else {
- int id = firstUndoParagraph(bv, undo.number_of_inset_id)->id();
+ int id = undoParagraphs(bv, undo.number_of_inset_id).front().id();
Paragraph * op = &*bv->buffer()->getParFromID(id);
if (op && op->inInset()) {
static_cast<InsetText*>(op->inInset())->paragraph(undopar);
// have to substitue the second paragraph with the
// first if the removed one is the first.
if (!before && behind) {
- int id = firstUndoParagraph(bv, undo.number_of_inset_id)->id();
+ int id = undoParagraphs(bv, undo.number_of_inset_id).front().id();
Paragraph * op = &*bv->buffer()->getParFromID(id);
if (op && op->inInset()) {
static_cast<InsetText*>(op->inInset())->paragraph(behind);
} else {
bv->buffer()->paragraphs.set(behind);
}
-
undopar = behind;
}
}
if (first && first->next())
first = first->next();
else if (!first)
- first = firstUndoParagraph(bv, undo->number_of_inset_id);
+ first = &*undoParagraphs(bv, undo->number_of_inset_id).begin();
if (first) {
shared_ptr<Undo> u;
if (createUndo(bv, undo->kind, first,