docstring parbreak(Paragraph const & par)
{
- odocstringstream ods;
- ods << '\n';
+ odocstringstream os;
+ os << '\n';
// only add blank line if we're not in an ERT or Listings inset
if (par.ownerCode() != ERT_CODE
&& par.ownerCode() != LISTINGS_CODE)
- ods << '\n';
- return ods.str();
+ os << '\n';
+ return os.str();
}
} // namespace anon
new_cur.pos() = right_pos;
new_cur.boundary(false);
if (!skip_inset &&
- text()->checkAndActivateInsetVisual(new_cur, right_pos>=pos(), false)) {
+ text()->checkAndActivateInsetVisual(new_cur, right_pos >= pos(), false)) {
// we actually move the cursor at the end of this function, for now
// we just keep track of the new position in new_cur...
LYXERR(Debug::RTL, "entering inset at: " << new_cur.pos());
{
if (!selection())
return *this;
- DocIterator di = (anchor() < top() ? anchor_ : *this);
+
+ DocIterator di;
+ // FIXME: This is a work-around for the problem that
+ // CursorSlice doesn't keep track of the boundary.
+ if (anchor() == top())
+ di = anchor_.boundary() > boundary() ? anchor_ : *this;
+ else
+ di = anchor() < top() ? anchor_ : *this;
di.resize(depth());
return di;
}
{
if (!selection())
return *this;
- DocIterator di = (anchor() > top() ? anchor_ : *this);
+
+ DocIterator di;
+ // FIXME: This is a work-around for the problem that
+ // CursorSlice doesn't keep track of the boundary.
+ if (anchor() == top())
+ di = anchor_.boundary() < boundary() ? anchor_ : *this;
+ else
+ di = anchor() > top() ? anchor_ : *this;
+
if (di.depth() > depth()) {
di.resize(depth());
++di.pos();
void Cursor::setSelection()
{
- selection() = true;
+ setSelection(true);
// A selection with no contents is not a selection
// FIXME: doesnt look ok
- if (pit() == anchor().pit() && pos() == anchor().pos())
- selection() = false;
+ if (idx() == anchor().idx() &&
+ pit() == anchor().pit() &&
+ pos() == anchor().pos())
+ setSelection(false);
}
void Cursor::setSelection(DocIterator const & where, int n)
{
setCursor(where);
- selection() = true;
+ setSelection(true);
anchor_ = where;
pos() += n;
}
void Cursor::clearSelection()
{
- selection() = false;
- mark() = false;
+ setSelection(false);
+ setMark(false);
resetAnchor();
}
cap::saveSelection(*this);
resetAnchor();
- selection() = sel;
+ setSelection(sel);
return true;
}
// let's require two backspaces for 'big stuff' and
// highlight on the first
resetAnchor();
- selection() = true;
+ setSelection(true);
--pos();
} else {
--pos();
// 'clever' UI hack: only erase large items if previously slected
if (pos() != lastpos() && nextAtom()->nargs() > 0) {
resetAnchor();
- selection() = true;
+ setSelection(true);
++pos();
} else {
plainErase();
safe = cap::grabAndEraseSelection(*this);
}
+ recordUndoInset();
+
if (lastpos() != 0) {
// something left in the cell
if (pos() == 0) {
}
} else {
// nothing left in the cell
- pullArg();
+ popBackward();
plainErase();
+ resetAnchor();
}
insert(safe);
}
}
-docstring Cursor::currentState()
+docstring Cursor::currentState() const
{
if (inMathed()) {
odocstringstream os;
}
-docstring Cursor::getPossibleLabel()
+docstring Cursor::getPossibleLabel() const
{
return inMathed() ? from_ascii("eq:") : text()->getPossibleLabel(*this);
}
{
if (DocIterator::fixIfBroken()) {
clearSelection();
- resetAnchor();
return true;
}
return false;
return false;
// Set cursor
setCursor(dit);
- selection() = false;
- resetAnchor();
+ clearSelection();
fixIfBroken();
return true;
}
return false;
// Set cursor
setCursor(dit);
- selection() = false;
- resetAnchor();
+ clearSelection();
fixIfBroken();
return true;
}
-void Cursor::finishUndo()
+void Cursor::finishUndo() const
{
bv_->buffer().undo().finishUndo();
}
-void Cursor::recordUndo(UndoKind kind, pit_type from, pit_type to)
+void Cursor::beginUndoGroup() const
+{
+ bv_->buffer().undo().beginUndoGroup();
+}
+
+
+void Cursor::endUndoGroup() const
+{
+ bv_->buffer().undo().endUndoGroup();
+}
+
+
+void Cursor::recordUndo(UndoKind kind, pit_type from, pit_type to) const
{
bv_->buffer().undo().recordUndo(*this, kind, from, to);
}
-void Cursor::recordUndo(UndoKind kind, pit_type from)
+void Cursor::recordUndo(UndoKind kind, pit_type from) const
{
bv_->buffer().undo().recordUndo(*this, kind, from);
}
-void Cursor::recordUndo(UndoKind kind)
+void Cursor::recordUndo(UndoKind kind) const
{
bv_->buffer().undo().recordUndo(*this, kind);
}
-void Cursor::recordUndoInset(UndoKind kind)
+void Cursor::recordUndoInset(UndoKind kind) const
{
bv_->buffer().undo().recordUndoInset(*this, kind);
}
-void Cursor::recordUndoFullDocument()
+void Cursor::recordUndoFullDocument() const
{
bv_->buffer().undo().recordUndoFullDocument(*this);
}
-void Cursor::recordUndoSelection()
+void Cursor::recordUndoSelection() const
{
if (inMathed()) {
if (cap::multipleCellsSelected(*this))
void Cursor::checkBufferStructure()
{
- if (paragraph().layout().toclevel == Layout::NOT_IN_TOC)
- return;
Buffer const * master = buffer().masterBuffer();
- master->tocBackend().updateItem(ParConstIterator(*this));
- master->structureChanged();
+ if (master->tocBackend().updateItem(*this))
+ master->structureChanged();
}