theTempCursor = LCursor(bv);
while (true) {
InsetOld * inset_hit = text->checkInsetHit(x, y);
- if (!inset_hit)
+ if (!inset_hit) {
+ lyxerr << "no further inset hit" << endl;
break;
+ }
inset = inset_hit;
- if (!inset_hit->descendable())
+ if (!inset_hit->descendable()) {
+ lyxerr << "not descendable" << endl;
break;
+ }
text = inset_hit->getText(0);
lyxerr << "Hit inset: " << inset << " at x: " << x
<< " text: " << text << " y: " << y << endl;
theTempCursor.push(static_cast<UpdatableInset*>(inset));
}
+ lyxerr << "theTempCursor: " << theTempCursor << endl;
return inset;
}
break;
case LFUN_RIGHT:
- result = moveRight(bv);
+ result = text_.moveRight();
finishUndo();
break;
case LFUN_LEFT:
finishUndo();
- result = moveLeft(bv);
+ result = text_.moveLeft();
break;
case LFUN_DOWN:
finishUndo();
- result = moveDown(bv);
+ result = text_.moveDown();
break;
case LFUN_UP:
finishUndo();
- result = moveUp(bv);
+ result = text_.moveUp();
break;
case LFUN_PRIOR:
}
-DispatchResult InsetText::moveRight(BufferView * bv)
-{
- if (text_.cursorPar()->isRightToLeftPar(bv->buffer()->params()))
- return moveLeftIntern(bv, false, true, false);
- else
- return moveRightIntern(bv, true, true, false);
-}
-
-
-DispatchResult InsetText::moveLeft(BufferView * bv)
-{
- if (text_.cursorPar()->isRightToLeftPar(bv->buffer()->params()))
- return moveRightIntern(bv, true, true, false);
- else
- return moveLeftIntern(bv, false, true, false);
-}
-
-
-DispatchResult InsetText::moveRightIntern(BufferView * bv, bool front,
- bool activate_inset, bool selecting)
-{
- ParagraphList::iterator c_par = cpar();
- if (boost::next(c_par) == paragraphs.end() && cpos() >= c_par->size())
- return DispatchResult(false, FINISHED_RIGHT);
- if (activate_inset && checkAndActivateInset(bv, front))
- return DispatchResult(true, true);
- text_.cursorRight(bv);
- if (!selecting)
- text_.clearSelection();
- return DispatchResult(true);
-}
-
-
-DispatchResult InsetText::moveLeftIntern(BufferView * bv, bool front,
- bool activate_inset, bool selecting)
-{
- if (cpar() == paragraphs.begin() && cpos() <= 0)
- return DispatchResult(false, FINISHED);
- text_.cursorLeft(bv);
- if (!selecting)
- text_.clearSelection();
- if (activate_inset && checkAndActivateInset(bv, front))
- return DispatchResult(true, true);
- return DispatchResult(true);
-}
-
-
-DispatchResult InsetText::moveUp(BufferView * bv)
-{
- if (crow() == text_.firstRow())
- return DispatchResult(false, FINISHED_UP);
- text_.cursorUp(bv);
- text_.clearSelection();
- return DispatchResult(true);
-}
-
-
-DispatchResult InsetText::moveDown(BufferView * bv)
-{
- if (crow() == text_.lastRow())
- return DispatchResult(false, FINISHED_DOWN);
- text_.cursorDown(bv);
- text_.clearSelection();
- return DispatchResult(true);
-}
-
-
bool InsetText::insertInset(BufferView * bv, InsetOld * inset)
{
inset->setOwner(this);
}
-bool InsetText::checkAndActivateInset(BufferView * bv, bool front)
-{
- if (cpos() == cpar()->size())
- return false;
- InsetOld * inset = cpar()->getInset(cpos());
- if (!isHighlyEditableInset(inset))
- return false;
- inset->edit(bv, front);
- updateLocal(bv, false);
- return true;
-}
-
-
void InsetText::markNew(bool track_changes)
{
ParagraphList::iterator pit = paragraphs.begin();
// If the inset is empty set the language of the current font to the
// language to the surronding text (if different).
void sanitizeEmptyText(BufferView *);
-
- ///
- DispatchResult moveRight(BufferView *);
- ///
- DispatchResult moveLeft(BufferView *);
- ///
- DispatchResult moveRightIntern(BufferView *, bool front,
- bool activate_inset = true,
- bool selecting = false);
- ///
- DispatchResult moveLeftIntern(BufferView *, bool front,
- bool activate_inset = true,
- bool selecting = false);
-
- ///
- DispatchResult moveUp(BufferView *);
- ///
- DispatchResult moveDown(BufferView *);
///
void setCharFont(Buffer const &, int pos, LyXFont const & font);
///
- bool checkAndActivateInset(BufferView * bv, bool front);
- ///
- bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0);
- ///
void removeNewlines();
///
lyx::pos_type cpos() const;
///
void cursorDown(bool selecting = false);
///
- void cursorLeft(bool internal = true);
+ bool cursorLeft(bool internal = true);
///
- void cursorRight(bool internal = true);
+ bool cursorRight(bool internal = true);
///
void cursorLeftOneWord();
///
///
void cursorRightOneWord(LyXCursor &);
+ ///
+ DispatchResult moveRight();
+ ///
+ DispatchResult moveLeft();
+ ///
+ DispatchResult moveRightIntern(bool front,
+ bool activate_inset, bool selecting);
+ ///
+ DispatchResult moveLeftIntern(bool front,
+ bool activate_inset, bool selecting);
+ ///
+ DispatchResult moveUp();
+ ///
+ DispatchResult moveDown();
+ ///
+ bool checkAndActivateInset(bool front);
+
+
private:
/** Cursor related data.
Later this variable has to be removed. There should be now internal
}
-void LyXText::cursorLeft(bool internal)
+
+bool LyXText::checkAndActivateInset(bool front)
+{
+ if (cursor.pos() == cursorPar()->size())
+ return false;
+ InsetOld * inset = cursorPar()->getInset(cursor.pos());
+ if (!isHighlyEditableInset(inset))
+ return false;
+ inset->edit(bv(), front);
+ return true;
+}
+
+
+DispatchResult LyXText::moveRight()
+{
+ if (cursorPar()->isRightToLeftPar(bv()->buffer()->params()))
+ return moveLeftIntern(false, true, false);
+ else
+ return moveRightIntern(true, true, false);
+}
+
+
+DispatchResult LyXText::moveLeft()
+{
+ if (cursorPar()->isRightToLeftPar(bv()->buffer()->params()))
+ return moveRightIntern(true, true, false);
+ else
+ return moveLeftIntern(false, true, false);
+}
+
+
+DispatchResult LyXText::moveRightIntern(bool front, bool activate_inset, bool selecting)
+{
+ ParagraphList::iterator c_par = cursorPar();
+ if (boost::next(c_par) == ownerParagraphs().end()
+ && cursor.pos() >= c_par->size())
+ return DispatchResult(false, FINISHED_RIGHT);
+ if (activate_inset && checkAndActivateInset(front))
+ return DispatchResult(true, true);
+ cursorRight(bv());
+ if (!selecting)
+ clearSelection();
+ return DispatchResult(true);
+}
+
+
+DispatchResult LyXText::moveLeftIntern(bool front,
+ bool activate_inset, bool selecting)
+{
+ if (cursor.par() == 0 && cursor.pos() <= 0)
+ return DispatchResult(false, FINISHED);
+ cursorLeft(bv());
+ if (!selecting)
+ clearSelection();
+ if (activate_inset && checkAndActivateInset(front))
+ return DispatchResult(true, true);
+ return DispatchResult(true);
+}
+
+
+DispatchResult LyXText::moveUp()
+{
+ if (cursorRow() == firstRow())
+ return DispatchResult(false, FINISHED_UP);
+ cursorUp(bv());
+ clearSelection();
+ return DispatchResult(true);
+}
+
+
+DispatchResult LyXText::moveDown()
+{
+ if (cursorRow() == lastRow())
+ return DispatchResult(false, FINISHED_DOWN);
+ cursorDown(bv());
+ clearSelection();
+ return DispatchResult(true);
+}
+
+
+bool LyXText::cursorLeft(bool internal)
{
if (cursor.pos() > 0) {
bool boundary = cursor.boundary();
if (!internal && !boundary &&
bidi.isBoundary(*bv()->buffer(), *cursorPar(), cursor.pos() + 1))
setCursor(cursor.par(), cursor.pos() + 1, true, true);
- } else if (cursor.par() != 0) {
+ return true;
+ }
+
+ if (cursor.par() != 0) {
// steps into the paragraph above
setCursor(cursor.par() - 1, boost::prior(cursorPar())->size());
+ return true;
}
+
+ return false;
}
-void LyXText::cursorRight(bool internal)
+bool LyXText::cursorRight(bool internal)
{
- bool const at_end = (cursor.pos() == cursorPar()->size());
- bool const at_newline = !at_end &&
- cursorPar()->isNewline(cursor.pos());
-
- if (!internal && cursor.boundary() && !at_newline)
+ if (!internal && cursor.boundary()) {
setCursor(cursor.par(), cursor.pos(), true, false);
- else if (!at_end) {
+ return true;
+ }
+
+ if (cursor.pos() != cursorPar()->size()) {
setCursor(cursor.par(), cursor.pos() + 1, true, false);
if (!internal && bidi.isBoundary(*bv()->buffer(), *cursorPar(),
cursor.pos()))
setCursor(cursor.par(), cursor.pos(), true, true);
- } else if (cursor.par() + 1 != int(ownerParagraphs().size()))
+ return true;
+ }
+
+ if (cursor.par() + 1 != int(ownerParagraphs().size())) {
setCursor(cursor.par() + 1, 0);
+ return true;
+ }
+
+ return false;
}