#include "box.h"
#include "language.h"
#include "support/tostr.h"
+#include "support/lstrings.h"
#include "frontends/LyXView.h"
#include "frontends/screen.h"
#include "frontends/Dialogs.h"
{
int y = top_y();
- if (cursor.row() == rows().begin()) {
+ if (cursorRow() == rows().begin()) {
if (y > 0) {
int new_y = bv()->text->top_y() - bv()->workHeight();
bv()->screen().draw(bv()->text, bv(), new_y < 0 ? 0 : new_y);
return;
}
- RowList::iterator cursorrow = cursor.row();
+ RowList::iterator cursorrow = cursorRow();
setCursorFromCoordinates(cursor.x_fix(), y);
finishUndo();
int new_y;
- if (cursorrow == bv()->text->cursor.row()) {
+ if (cursorrow == bv()->text->cursorRow()) {
// we have a row which is taller than the workarea. The
// simplest solution is to move to the previous row instead.
cursorUp(true);
if (inset_owner) {
new_y = bv()->text->cursor.iy()
+ bv()->theLockingInset()->insetInInsetY() + y
- + cursor.row()->height()
+ + cursorRow()->height()
- bv()->workHeight() + 1;
} else {
new_y = cursor.y()
- - cursor.row()->baseline()
- + cursor.row()->height()
+ - cursorRow()->baseline()
+ + cursorRow()->height()
- bv()->workHeight() + 1;
}
}
bv()->screen().draw(bv()->text, bv(), new_y < 0 ? 0 : new_y);
- if (cursor.row() != rows().begin()) {
+ if (cursorRow() != rows().begin()) {
LyXCursor cur;
- setCursor(cur, boost::prior(cursor.row())->par(),
- boost::prior(cursor.row())->pos(), false);
+ setCursor(cur, boost::prior(cursorRow())->par(),
+ boost::prior(cursorRow())->pos(), false);
if (cur.y() > top_y()) {
cursorUp(true);
}
{
int topy = top_y();
- if (boost::next(cursor.row()) == rows().end()) {
- int y = cursor.y() - cursor.row()->baseline() +
- cursor.row()->height();
+ if (boost::next(cursorRow()) == rows().end()) {
+ int y = cursor.y() - cursorRow()->baseline() +
+ cursorRow()->height();
if (y > topy + bv()->workHeight()) {
bv()->screen().draw(bv()->text, bv(), bv()->text->top_y() + bv()->workHeight());
bv()->updateScrollbar();
getRowNearY(y);
- RowList::iterator cursorrow = cursor.row();
+ RowList::iterator cursorrow = cursorRow();
setCursorFromCoordinates(cursor.x_fix(), y);
// + bv->workHeight());
finishUndo();
int new_y;
- if (cursorrow == bv()->text->cursor.row()) {
+ if (cursorrow == bv()->text->cursorRow()) {
// we have a row which is taller than the workarea. The
// simplest solution is to move to the next row instead.
cursorDown(true);
if (inset_owner) {
new_y = bv()->text->cursor.iy()
+ bv()->theLockingInset()->insetInInsetY()
- + y - cursor.row()->baseline();
+ + y - cursorRow()->baseline();
} else {
- new_y = cursor.y() - cursor.row()->baseline();
+ new_y = cursor.y() - cursorRow()->baseline();
}
}
bv()->screen().draw(bv()->text, bv(), new_y);
- if (boost::next(cursor.row()) != rows().end()) {
+
+ RowList::iterator next_row = boost::next(cursorRow());
+ if (next_row != rows().end()) {
LyXCursor cur;
- setCursor(cur, boost::next(cursor.row())->par(),
- boost::next(cursor.row())->pos(), false);
+ setCursor(cur, next_row->par(), next_row->pos(), false);
if (cur.y() < top_y() + bv()->workHeight()) {
cursorDown(true);
}
if (inset) {
bool gotsel = false;
if (lt->selection.set()) {
- lt->cutSelection(true, false);
+ bv->owner()->dispatch(FuncRequest(LFUN_CUT));
gotsel = true;
}
if (bv->insertInset(inset)) {
inset->localDispatch(cmd);
}
if (gotsel && pastesel)
- bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
+ bv->owner()->dispatch(FuncRequest(LFUN_PASTE));
}
else
delete inset;
// just comment out the line below...
} else {
update();
- cutSelection(bv, true);
+ cutSelection(true, false);
update();
}
moveCursorUpdate(bv, false);
}
} else {
update();
- cutSelection(bv, true);
+ cutSelection(true, false);
}
update();
break;
}
} else {
update();
- cutSelection(bv, true);
+ cutSelection(true, false);
update();
}
bv->owner()->view_state_changed();
}
} else {
update();
- cutSelection(bv, true);
+ cutSelection(true, false);
}
update();
break;
update();
break;
- case LFUN_PASTE:
+ case LFUN_PASTE: {
cmd.message(_("Paste"));
// clear the selection
bv->toggleSelection();
clearSelection();
update();
- pasteSelection();
+ size_t sel_index = 0;
+ string const & arg = cmd.argument;
+ if (isStrUnsignedInt(arg)) {
+ size_t const paste_arg = strToUnsignedInt(arg);
+#warning FIXME Check if the arg is in the domain of available selections.
+ sel_index = paste_arg;
+ }
+ pasteSelection(sel_index);
clearSelection(); // bug 393
update();
bv->switchKeyMap();
break;
+ }
case LFUN_CUT:
update();
- cutSelection(bv, true);
+ cutSelection(true, true);
update();
cmd.message(_("Cut"));
break;
break;
}
- RowList::iterator cursorrow = bv->text->cursor.row();
+ RowList::iterator cursorrow = bv->text->cursorRow();
bv->text->setCursorFromCoordinates(cmd.x, cmd.y + bv->text->top_y());
#if 0
// sorry for this but I have a strange error that the y value jumps at
<< bv->text->cursor.y() << endl;
#endif
// This is to allow jumping over large insets
- if (cursorrow == bv->text->cursor.row()) {
+ if (cursorrow == bv->text->cursorRow()) {
if (cmd.y >= bv->workHeight())
bv->text->cursorDown(false);
else if (cmd.y < 0)
// Clear the selection
bv->screen().toggleSelection(bv->text, bv);
bv->text->clearSelection();
- bv->text->fullRebreak();
+ bv->text->partialRebreak();
bv->update();
bv->updateScrollbar();
break;
case LFUN_INDEX_PRINT:
- case LFUN_PARENTINSERT:
case LFUN_TOC_INSERT:
case LFUN_HFILL:
// do nothing fancy