#include <vector>
#endif
+using std::vector;
+
+
/// the flag used by FinishUndo();
bool undo_finished;
/// a flag
Inset * in = 0;
if (before)
in = before->inInset();
+ else if (undo->number_of_inset_id >= 0)
+ in = bv->buffer()->getInsetFromID(undo->number_of_inset_id);
tmppar4->setInsetOwner(in);
while (tmppar4->next()) {
tmppar4 = tmppar4->next();
// now remove the old text if there is any
#ifdef DELETE_UNUSED_PARAGRAPHS
- std::vector<Paragraph *> vvpar;
+ vector<Paragraph *> vvpar;
#endif
if (before != behind || (!behind && !before)) {
if (before)
}
// put the new stuff in the list if there is one
- if (tmppar3){
+ if (tmppar3) {
if (before)
before->next(tmppar3);
else
- bv->text->ownerParagraph(tmppar3->id(),
- tmppar3);
+ bv->text->ownerParagraph(firstUndoParagraph(bv, undo->number_of_inset_id)->id(),
+ tmppar3);
tmppar3->previous(before);
} else {
- // Do we really enter here ??? (Jug)
+ // We enter here on DELETE undo operations where we have to
+ // substitue the second paragraph with the first if the removed
+ // one is the first!
if (!before && behind) {
- bv->text->ownerParagraph(behind);
+ bv->text->ownerParagraph(firstUndoParagraph(bv, undo->number_of_inset_id)->id(),
+ behind);
tmppar3 = behind;
}
}
endpar = behind->next();
tmppar = bv->buffer()->getParFromID(undo->number_of_cursor_par);
- if (tmppar3) {
- UpdatableInset* it = static_cast<UpdatableInset*>(tmppar3->inInset());
- if (it) {
- it->getLyXText(bv)->redoParagraphs(bv,
- it->getLyXText(bv)->cursor,
- endpar);
- LyXFont font;
- it->update(bv, font, false);
- // we now would have to rebreak the whole paragraph the
- // undo-par was in. How we do it here is not really true.
- // We would have to save this information in the undo-struct
- // and then we could do the right rebreak. Here we only
- // handle the case where this was in the actual paragraph,
- // which not always is true.
- bv->text->redoParagraphs(bv, bv->text->cursor,
- bv->text->cursor.par());
- if (tmppar){
- it = static_cast<UpdatableInset*>(tmppar->inInset());
- LyXText * t;
- if (it) {
- it->edit(bv);
- t = it->getLyXText(bv);
- } else {
- t = bv->text;
- }
- t->setCursorIntern(bv, tmppar, undo->cursor_pos);
- t->updateCounters(bv, t->cursor.row());
+ UpdatableInset* it = 0;
+ if (tmppar3)
+ it = static_cast<UpdatableInset*>(tmppar3->inInset());
+ if (it) {
+ it->getLyXText(bv)->redoParagraphs(bv,
+ it->getLyXText(bv)->cursor,
+ endpar);
+ LyXFont font;
+ it->update(bv, font, false);
+ // we now would have to rebreak the whole paragraph the
+ // undo-par was in. How we do it here is not really true.
+ // We would have to save this information in the undo-struct
+ // and then we could do the right rebreak. Here we only
+ // handle the case where this was in the actual paragraph,
+ // which not always is true.
+ bv->text->redoParagraphs(bv, bv->text->cursor,
+ bv->text->cursor.par());
+ if (tmppar) {
+ it = static_cast<UpdatableInset*>(tmppar->inInset());
+ LyXText * t;
+ if (it) {
+ it->edit(bv);
+ t = it->getLyXText(bv);
+ } else {
+ t = bv->text;
}
- bv->text->setCursorIntern(bv, bv->text->cursor.par(),
- bv->text->cursor.pos());
+ t->setCursorIntern(bv, tmppar, undo->cursor_pos);
+ t->updateCounters(bv, t->cursor.row());
}
+ bv->text->setCursorIntern(bv, bv->text->cursor.par(),
+ bv->text->cursor.pos());
} else {
bv->text->redoParagraphs(bv, bv->text->cursor, endpar);
if (tmppar) {
delete undo;
#ifdef DELETE_UNUSED_PARAGRAPHS
// And here it's save enough to delete all removed paragraphs
- std::vector<Paragraph *>::iterator pit = vvpar.begin();
+ vector<Paragraph *>::iterator pit = vvpar.begin();
if (pit != vvpar.end()) {
lyxerr << "DEL: ";
for(;pit != vvpar.end(); ++pit) {
// appear one by one when undoing.
// EDIT is special since only layout information, not the
// contents of a paragaph are stored.
- if (!undo_finished && (kind != Undo::EDIT) && (kind != Undo::FINISH)){
+ if (!undo_finished && (kind != Undo::EDIT) && (kind != Undo::FINISH)) {
// check wether storing is needed
if (!bv->buffer()->undostack.empty() &&
bv->buffer()->undostack.top()->kind == kind &&
while (tmppar != end && tmppar->next()) {
tmppar = tmppar->next();
+#if 0
tmppar2->next(new Paragraph(*tmppar, true));
+#else
+ Paragraph * ptmp = new Paragraph(*tmppar, true);
+ tmppar2->next(ptmp);
+#endif
// a memory optimization: Just store the layout
// information when only edit
if (kind == Undo::EDIT) {
tmppar2->clearContents();
}
tmppar2->next()->previous(tmppar2);
+
tmppar2 = tmppar2->next();
}
tmppar2->next(0);