-}
-
-
-// returns false if no undo possible
-bool textUndoOrRedo(BufferView & bv,
- limited_stack<Undo> & stack, limited_stack<Undo> & otherstack)
-{
- if (stack.empty()) {
- // nothing to do
- finishUndo();
- return false;
- }
-
- Undo undo = stack.top();
- stack.pop();
- finishUndo();
-
- // this implements redo
- otherstack.push(undo);
- DocumentIterator dit =
- undo.cursor.asDocumentIterator(&bv.buffer()->inset());
- if (dit.inMathed()) {
- // not much to be done
- } else {
- otherstack.top().pars.clear();
- LyXText * text = dit.text();
- BOOST_ASSERT(text);
- ParagraphList & plist = text->paragraphs();
- if (undo.from + undo.end <= int(plist.size())) {
- ParagraphList::iterator first = plist.begin();
- advance(first, undo.from);
- ParagraphList::iterator last = plist.begin();
- advance(last, plist.size() - undo.end);
- otherstack.top().pars.insert(otherstack.top().pars.begin(), first, last);
- }
- }
- otherstack.top().cursor = bv.cursor();
- //lyxerr << " undo other: " << otherstack.top() << std::endl;