{
return fullCursor().resetAnchor();
}
+
+
+CursorSlice const & BufferView::selStart() const
+{
+ if (!selection().set())
+ return cursor();
+ // can't use std::min as this creates a new object
+ return anchor() < cursor() ? anchor() : cursor();
+}
+
+
+CursorSlice const & BufferView::selEnd() const
+{
+ if (!selection().set())
+ return cursor();
+ return anchor() > cursor() ? anchor() : cursor();
+}
+
+
+CursorSlice & BufferView::selStart()
+{
+ if (!selection().set())
+ return cursor();
+ return anchor() < cursor() ? anchor() : cursor();
+}
+
+
+CursorSlice & BufferView::selEnd()
+{
+ if (selection().set())
+ return cursor();
+ return anchor() > cursor() ? anchor() : cursor();
+}
Selection & selection();
///
Selection const & selection() const;
+ ///
+ CursorSlice & selStart();
+ ///
+ CursorSlice const & selStart() const;
+ ///
+ CursorSlice & selEnd();
+ ///
+ CursorSlice const & selEnd() const;
///
Selection selection_;
par = bv_->cursor().par();
pos = bv_->cursor().pos();
- selstartpar = text->selStart().par();
- selstartpos = text->selStart().pos();
- selendpar = text->selEnd().par();
- selendpos = text->selEnd().pos();
+ selstartpar = bv_->selStart().par();
+ selstartpos = bv_->selStart().pos();
+ selendpar = bv_->selEnd().par();
+ selendpos = bv_->selEnd().pos();
sel = bv_->selection().set();
mark_set = bv_->selection().mark();
text->textwidth_ = bv_->workWidth();
if (!bv_->selection().set())
return Change(Change::UNCHANGED);
- return text->getPar(text->selStart())
- ->lookupChangeFull(text->selStart().pos());
+ return text->getPar(bv_->selStart())
+ ->lookupChangeFull(bv_->selStart().pos());
}
text->replaceSelectionWithString(replacestr);
text->setSelectionRange(replacestr.length());
- text->cursor() = fw ? text->selEnd() : text->selStart();
-
+ bv->cursor() = fw ? bv->selEnd() : bv->selStart();
bv->buffer()->markDirty();
find(bv, searchstr, cs, mw, fw);
bv->update();
void setSelection();
///
void clearSelection();
- ///
- CursorSlice & selStart();
- ///
- CursorSlice const & selStart() const;
- ///
- CursorSlice & selEnd();
- ///
- CursorSlice const & selEnd() const;
-
public:
///
bool const is_rtl = pit_->isRightToLeftPar(bv_.buffer()->params());
// the current selection
- int const startx = text_.cursorX(text_.selStart());
- int const endx = text_.cursorX(text_.selEnd());
- int const starty = text_.cursorY(text_.selStart());
- int const endy = text_.cursorY(text_.selEnd());
- ParagraphList::iterator startpit = text_.getPar(text_.selStart());
- ParagraphList::iterator endpit = text_.getPar(text_.selEnd());
- RowList::iterator startrow = startpit->getRow(text_.selStart().pos());
- RowList::iterator endrow = endpit->getRow(text_.selEnd().pos());
+ int const startx = text_.cursorX(bv_.selStart());
+ int const endx = text_.cursorX(bv_.selEnd());
+ int const starty = text_.cursorY(bv_.selStart());
+ int const endy = text_.cursorY(bv_.selEnd());
+ ParagraphList::iterator startpit = text_.getPar(bv_.selStart());
+ ParagraphList::iterator endpit = text_.getPar(bv_.selEnd());
+ RowList::iterator startrow = startpit->getRow(bv_.selStart().pos());
+ RowList::iterator endrow = endpit->getRow(bv_.selEnd().pos());
int const h = row_.height();
int const row_y = pit_->y + row_.y_offset();
}
if (((startpit != pit_ && startrow != rit_)
- || text_.selStart().pos() <= pos) &&
+ || bv_.selStart().pos() <= pos) &&
((endpit != pit_ && endrow != rit_)
- || pos < text_.selEnd().pos())) {
+ || pos < bv_.selEnd().pos())) {
// Here we do not use x_ as xo_ was added to x_.
pain_.fillRectangle(int(old_tmpx), yo_,
int(tmpx - old_tmpx + 1), h, LColor::selection);
if (!bv()->selection().set() && cursorPar()->size())
return;
- if (selStart().par() == selEnd().par()) {
- CursorSlice const & startc = selStart();
- CursorSlice const & endc = selEnd();
+ if (bv()->selStart().par() == bv()->selEnd().par()) {
+ CursorSlice const & startc = bv()->selStart();
+ CursorSlice const & endc = bv()->selEnd();
recordUndo(Undo::INSERT, this, startc.par());
getPar(startc)->acceptChange(startc.pos(), endc.pos());
finishUndo();
if (!bv()->selection().set() && cursorPar()->size())
return;
- if (selStart().par() == selEnd().par()) {
- CursorSlice const & startc = selStart();
- CursorSlice const & endc = selEnd();
+ if (bv()->selStart().par() == bv()->selEnd().par()) {
+ CursorSlice const & startc = bv()->selStart();
+ CursorSlice const & endc = bv()->selEnd();
recordUndo(Undo::INSERT, this, startc.par());
getPar(startc)->rejectChange(startc.pos(), endc.pos());
finishUndo();
CursorSlice to;
if (bv()->selection().set()) {
- from = selStart();
- to = selEnd();
+ from = bv()->selStart();
+ to = bv()->selEnd();
} else {
from = cursor();
getWord(from, to, lyx::PARTIAL_WORD);
return string();
// should be const ...
- ParagraphList::iterator startpit = getPar(selStart());
- ParagraphList::iterator endpit = getPar(selEnd());
- size_t const startpos = selStart().pos();
- size_t const endpos = selEnd().pos();
+ ParagraphList::iterator startpit = getPar(bv()->selStart());
+ ParagraphList::iterator endpit = getPar(bv()->selEnd());
+ size_t const startpos = bv()->selStart().pos();
+ size_t const endpos = bv()->selEnd().pos();
if (startpit == endpit)
return startpit->asString(buffer, startpos, endpos, label);
}
-CursorSlice const & LyXText::selStart() const
-{
- if (!bv()->selection().set())
- return cursor();
- // can't use std::min as this creates a new object
- return anchor() < cursor() ? anchor() : cursor();
-}
-
-
-CursorSlice const & LyXText::selEnd() const
-{
- if (!bv()->selection().set())
- return cursor();
- return anchor() > cursor() ? anchor() : cursor();
-}
-
-
-CursorSlice & LyXText::selStart()
-{
- if (!bv()->selection().set())
- return cursor();
- return anchor() < cursor() ? anchor() : cursor();
-}
-
-
-CursorSlice & LyXText::selEnd()
-{
- if (!bv()->selection().set())
- return cursor();
- return anchor() > cursor() ? anchor() : cursor();
-}
-
-
void LyXText::setSelection()
{
bv()->selection().set(true);
return;
}
- ParagraphList::iterator start = getPar(selStart().par());
- ParagraphList::iterator end = boost::next(getPar(selEnd().par()));
+ ParagraphList::iterator start = getPar(bv()->selStart().par());
+ ParagraphList::iterator end = boost::next(getPar(bv()->selEnd().par()));
ParagraphList::iterator endpit = setLayout(start, end, layout);
redoParagraphs(start, endpit);
beg = text.cursorPar();
end = boost::next(beg);
} else {
- beg = text.getPar(text.selStart());
- end = boost::next(text.getPar(text.selEnd()));
+ beg = text.getPar(text.bv()->selStart());
+ end = boost::next(text.getPar(text.bv()->selEnd()));
}
}
}
// ok we have a selection.
- recUndo(selStart().par(), selEnd().par());
+ recUndo(bv()->selStart().par(), bv()->selEnd().par());
freezeUndo();
- ParagraphList::iterator beg = getPar(selStart().par());
- ParagraphList::iterator end = getPar(selEnd().par());
+ ParagraphList::iterator beg = getPar(bv()->selStart().par());
+ ParagraphList::iterator end = getPar(bv()->selEnd().par());
- PosIterator pos(¶graphs(), beg, selStart().pos());
- PosIterator posend(¶graphs(), end, selEnd().pos());
+ PosIterator pos(¶graphs(), beg, bv()->selStart().pos());
+ PosIterator posend(¶graphs(), end, bv()->selEnd().pos());
BufferParams const & params = bv()->buffer()->params();
string idxstring;
if (!bv()->selection().set())
bv()->owner()->message(_("Nothing to index!"));
- else if (selStart().par() != selEnd().par())
+ else if (bv()->selStart().par() != bv()->selEnd().par())
bv()->owner()->message(_("Cannot index more than one paragraph!"));
else
idxstring = selectionAsString(*bv()->buffer(), false);
string const & labelwidthstring, bool noindent)
{
// make sure that the depth behind the selection are restored, too
- ParagraphList::iterator undopit = undoSpan(getPar(selEnd()));
- recUndo(selStart().par(), parOffset(undopit) - 1);
+ ParagraphList::iterator undopit = undoSpan(getPar(bv()->selEnd()));
+ recUndo(bv()->selStart().par(), parOffset(undopit) - 1);
- ParagraphList::reverse_iterator pit(getPar(selEnd().par()));
- ParagraphList::reverse_iterator beg(getPar(selStart().par()));
+ ParagraphList::reverse_iterator pit(getPar(bv()->selEnd().par()));
+ ParagraphList::reverse_iterator beg(getPar(bv()->selStart().par()));
for (--pit; pit != beg; ++pit) {
ParagraphParameters & params = pit->params();
params.noindent(noindent);
}
- redoParagraphs(getPar(selStart()), undopit);
+ redoParagraphs(getPar(bv()->selStart()), undopit);
}
if (!bv()->selection().set())
return;
- // OK, we have a selection. This is always between selStart()
- // and selEnd()
+ // OK, we have a selection. This is always between bv()->selStart()
+ // and bv()->selEnd()
// make sure that the depth behind the selection are restored, too
- ParagraphList::iterator begpit = getPar(selStart().par());
- ParagraphList::iterator endpit = getPar(selEnd().par());
+ ParagraphList::iterator begpit = getPar(bv()->selStart().par());
+ ParagraphList::iterator endpit = getPar(bv()->selEnd().par());
ParagraphList::iterator undopit = undoSpan(endpit);
- recUndo(selStart().par(), parOffset(undopit) - 1);
+ recUndo(bv()->selStart().par(), parOffset(undopit) - 1);
- int endpos = selEnd().pos();
+ int endpos = bv()->selEnd().pos();
BufferParams const & bufparams = bv()->buffer()->params();
boost::tie(endpit, endpos) = realcut ?
CutAndPaste::cutSelection(bufparams,
paragraphs(),
begpit , endpit,
- selStart().pos(), endpos,
+ bv()->selStart().pos(), endpos,
bufparams.textclass,
doclear)
: CutAndPaste::eraseSelection(bufparams,
paragraphs(),
begpit, endpit,
- selStart().pos(), endpos,
+ bv()->selStart().pos(), endpos,
doclear);
// sometimes necessary
if (doclear)
if (!bv()->selection().set())
return;
- // ok we have a selection. This is always between selStart()
+ // ok we have a selection. This is always between bv()->selStart()
// and sel_end cursor
// copy behind a space if there is one
- while (getPar(selStart())->size() > selStart().pos()
- && getPar(selStart())->isLineSeparator(selStart().pos())
- && (selStart().par() != selEnd().par()
- || selStart().pos() < selEnd().pos()))
- selStart().pos(selStart().pos() + 1);
-
- CutAndPaste::copySelection(getPar(selStart().par()),
- getPar(selEnd().par()),
- selStart().pos(),
- selEnd().pos(),
+ while (getPar(bv()->selStart())->size() > bv()->selStart().pos()
+ && getPar(bv()->selStart())->isLineSeparator(bv()->selStart().pos())
+ && (bv()->selStart().par() != bv()->selEnd().par()
+ || bv()->selStart().pos() < bv()->selEnd().pos()))
+ bv()->selStart().pos(bv()->selStart().pos() + 1);
+
+ CutAndPaste::copySelection(getPar(bv()->selStart().par()),
+ getPar(bv()->selEnd().par()),
+ bv()->selStart().pos(),
+ bv()->selEnd().pos(),
bv()->buffer()->params().textclass);
}
freezeUndo();
// Get font setting before we cut
- pos_type pos = selEnd().pos();
- LyXFont const font = getPar(selStart())
+ pos_type pos = bv()->selEnd().pos();
+ LyXFont const font = getPar(bv()->selStart())
->getFontSettings(bv()->buffer()->params(),
- selStart().pos());
+ bv()->selStart().pos());
// Insert the new string
string::const_iterator cit = str.begin();
string::const_iterator end = str.end();
for (; cit != end; ++cit) {
- getPar(selEnd())->insertChar(pos, (*cit), font);
+ getPar(bv()->selEnd())->insertChar(pos, (*cit), font);
++pos;
}
bool change_layout = (current_layout != layout);
if (!change_layout && bv->selection().set() &&
- selStart().par() != selEnd().par())
+ bv->selStart().par() != bv->selEnd().par())
{
- ParagraphList::iterator spit = getPar(selStart());
- ParagraphList::iterator epit = boost::next(getPar(selEnd()));
+ ParagraphList::iterator spit = getPar(bv->selStart());
+ ParagraphList::iterator epit = boost::next(getPar(bv->selEnd()));
while (spit != epit) {
if (spit->layout()->name() != current_layout) {
change_layout = true;