mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
move selStart and selEnd from LyXText to BufferView
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8344 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
4eb75f09eb
commit
6238e20d09
@ -518,3 +518,36 @@ void BufferView::resetAnchor()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
@ -233,6 +233,14 @@ public:
|
||||
Selection & selection();
|
||||
///
|
||||
Selection const & selection() const;
|
||||
///
|
||||
CursorSlice & selStart();
|
||||
///
|
||||
CursorSlice const & selStart() const;
|
||||
///
|
||||
CursorSlice & selEnd();
|
||||
///
|
||||
CursorSlice const & selEnd() const;
|
||||
|
||||
///
|
||||
Selection selection_;
|
||||
|
@ -395,10 +395,10 @@ void BufferView::Pimpl::resizeCurrentBuffer()
|
||||
|
||||
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();
|
||||
@ -637,8 +637,8 @@ Change const BufferView::Pimpl::getCurrentChange()
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
|
@ -394,8 +394,7 @@ int replace(BufferView * bv,
|
||||
|
||||
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();
|
||||
|
@ -409,15 +409,6 @@ public:
|
||||
void setSelection();
|
||||
///
|
||||
void clearSelection();
|
||||
///
|
||||
CursorSlice & selStart();
|
||||
///
|
||||
CursorSlice const & selStart() const;
|
||||
///
|
||||
CursorSlice & selEnd();
|
||||
///
|
||||
CursorSlice const & selEnd() const;
|
||||
|
||||
|
||||
public:
|
||||
///
|
||||
|
@ -391,14 +391,14 @@ void RowPainter::paintSelection()
|
||||
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();
|
||||
@ -468,9 +468,9 @@ void RowPainter::paintSelection()
|
||||
}
|
||||
|
||||
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);
|
||||
|
57
src/text.C
57
src/text.C
@ -1127,9 +1127,9 @@ void LyXText::acceptChange()
|
||||
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();
|
||||
@ -1146,9 +1146,9 @@ void LyXText::rejectChange()
|
||||
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();
|
||||
@ -1225,8 +1225,8 @@ void LyXText::changeCase(LyXText::TextCase action)
|
||||
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);
|
||||
@ -1511,10 +1511,10 @@ string LyXText::selectionAsString(Buffer const & buffer, bool label) const
|
||||
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);
|
||||
@ -1959,39 +1959,6 @@ CursorSlice const & LyXText::anchor() const
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
|
74
src/text2.C
74
src/text2.C
@ -333,8 +333,8 @@ void LyXText::setLayout(string const & layout)
|
||||
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);
|
||||
@ -353,8 +353,8 @@ void getSelectionSpan(LyXText & text,
|
||||
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()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -448,14 +448,14 @@ void LyXText::setFont(LyXFont const & font, bool toggleall)
|
||||
}
|
||||
|
||||
// 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();
|
||||
|
||||
@ -549,7 +549,7 @@ string LyXText::getStringToIndex()
|
||||
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);
|
||||
@ -576,11 +576,11 @@ void LyXText::setParagraph(Spacing const & spacing, LyXAlignment align,
|
||||
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();
|
||||
@ -601,7 +601,7 @@ void LyXText::setParagraph(Spacing const & spacing, LyXAlignment align,
|
||||
params.noindent(noindent);
|
||||
}
|
||||
|
||||
redoParagraphs(getPar(selStart()), undopit);
|
||||
redoParagraphs(getPar(bv()->selStart()), undopit);
|
||||
}
|
||||
|
||||
|
||||
@ -932,29 +932,29 @@ void LyXText::cutSelection(bool doclear, bool realcut)
|
||||
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)
|
||||
@ -982,20 +982,20 @@ void LyXText::copySelection()
|
||||
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);
|
||||
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(selStart().par()),
|
||||
getPar(selEnd().par()),
|
||||
selStart().pos(),
|
||||
selEnd().pos(),
|
||||
CutAndPaste::copySelection(getPar(bv()->selStart().par()),
|
||||
getPar(bv()->selEnd().par()),
|
||||
bv()->selStart().pos(),
|
||||
bv()->selEnd().pos(),
|
||||
bv()->buffer()->params().textclass);
|
||||
}
|
||||
|
||||
@ -1052,16 +1052,16 @@ void LyXText::replaceSelectionWithString(string const & str)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1073,10 +1073,10 @@ DispatchResult LyXText::dispatch(FuncRequest const & cmd)
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user