#include "frontends/LyXView.h"
#include "undo_funcs.h"
#include "buffer.h"
+#include "buffer_funcs.h"
#include "bufferparams.h"
#include "errorlist.h"
#include "gettext.h"
LyXCursor tmpcursor;
setCursor(tmpcursor, start, 0);
- //redoParagraphs(tmpcursor, &(*pastend));
redoParagraphs(tmpcursor, pastend);
// We need to actually move the text->cursor. I don't
void LyXText::redoHeightOfParagraph()
{
- RowList::iterator tmprow = cursor.row();
+ RowList::iterator tmprow = cursorRow();
int y = cursor.y() - tmprow->baseline();
setHeightOfRow(tmprow);
void LyXText::redoDrawingOfParagraph(LyXCursor const & cur)
{
- RowList::iterator tmprow = cur.row();
+ RowList::iterator tmprow = getRow(cur);
int y = cur.y() - tmprow->baseline();
setHeightOfRow(tmprow);
void LyXText::redoParagraphs(LyXCursor const & cur,
ParagraphList::iterator endpit)
{
- RowList::iterator tmprit = cur.row();
+ RowList::iterator tmprit = getRow(cur);
int y = cur.y() - tmprit->baseline();
ParagraphList::iterator first_phys_pit;
void LyXText::fullRebreak()
+{
+ need_break_row = rows().begin();
+ partialRebreak();
+ setCursorIntern(cursor.par(), cursor.pos());
+}
+
+
+void LyXText::partialRebreak()
{
if (rows().empty()) {
init(bv());
// need the selection cursor:
void LyXText::setSelection()
{
- bool const lsel = selection.set();
-
- if (!selection.set()) {
- last_sel_cursor = selection.cursor;
- selection.start = selection.cursor;
- selection.end = selection.cursor;
- }
-
- selection.set(true);
-
- // first the toggling area
- if (cursor.y() < last_sel_cursor.y()
- || (cursor.y() == last_sel_cursor.y()
- && cursor.x() < last_sel_cursor.x())) {
- toggle_end_cursor = last_sel_cursor;
- toggle_cursor = cursor;
- } else {
- toggle_end_cursor = cursor;
- toggle_cursor = last_sel_cursor;
- }
-
- last_sel_cursor = cursor;
-
- // and now the whole selection
-
- if (selection.cursor.par() == cursor.par())
- if (selection.cursor.pos() < cursor.pos()) {
- selection.end = cursor;
- selection.start = selection.cursor;
- } else {
- selection.end = selection.cursor;
- selection.start = cursor;
- }
- else if (selection.cursor.y() < cursor.y() ||
- (selection.cursor.y() == cursor.y()
- && selection.cursor.x() < cursor.x())) {
- selection.end = cursor;
- selection.start = selection.cursor;
- }
- else {
- selection.end = selection.cursor;
- selection.start = cursor;
- }
-
- // a selection with no contents is not a selection
- if (selection.start.par() == selection.end.par() &&
- selection.start.pos() == selection.end.pos())
- selection.set(false);
+ bool const lsel = TextCursor::setSelection();
if (inset_owner && (selection.set() || lsel))
inset_owner->setUpdateStatus(bv(), InsetText::SELECTION);
}
-string const LyXText::selectionAsString(Buffer const * buffer,
- bool label) const
-{
- if (!selection.set()) return string();
-
- // should be const ...
- ParagraphList::iterator startpit = selection.start.par();
- ParagraphList::iterator endpit = selection.end.par();
- pos_type const startpos(selection.start.pos());
- pos_type const endpos(selection.end.pos());
-
- if (startpit == endpit) {
- return startpit->asString(buffer, startpos, endpos, label);
- }
-
- string result;
-
- // First paragraph in selection
- result += startpit->asString(buffer, startpos, startpit->size(), label) + "\n\n";
-
- // The paragraphs in between (if any)
- ParagraphList::iterator pit = boost::next(startpit);
- for (; pit != endpit; ++pit) {
- result += pit->asString(buffer, 0, pit->size(), label) + "\n\n";
- }
-
- // Last paragraph in selection
- result += endpit->asString(buffer, 0, endpos, label);
-
- return result;
-}
-
void LyXText::clearSelection()
{
- selection.set(false);
- selection.mark(false);
- last_sel_cursor = selection.end = selection.start = selection.cursor = cursor;
+ TextCursor::clearSelection();
+
// reset this in the bv_owner!
if (bv_owner && bv_owner->text)
bv_owner->text->xsel_cache.set(false);
void LyXText::cursorHome()
{
- setCursor(cursor.par(), cursor.row()->pos());
+ setCursor(cursor.par(), cursorRow()->pos());
}
if (cursor.par()->empty())
return;
- RowList::iterator rit = cursor.row();
+ RowList::iterator rit = cursorRow();
RowList::iterator next_rit = boost::next(rit);
ParagraphList::iterator pit = rit->par();
pos_type last_pos = lastPos(*this, rit);
while (tmppit != boost::prior(selection.start.par())) {
setCursor(tmppit, 0);
- postPaint(cursor.y() - cursor.row()->baseline());
+ postPaint(cursor.y() - cursorRow()->baseline());
ParagraphList::iterator pit = cursor.par();
ParagraphParameters & params = pit->params();
cursor.par(), cursor.pos(),
bv()->buffer()->params.textclass,
sel_index, el);
- bv()->setErrorList(el);
+ parseErrors(*bv()->buffer(), el);
bv()->showErrorList(_("Paste"));
redoParagraphs(cursor, endpit);
// check the special right address boxes
if (pit->layout()->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
tmpcursor.par(pit);
- tmpcursor.row(row);
tmpcursor.y(y);
tmpcursor.x(0);
tmpcursor.x_fix(0);
}
}
- cur.row(row);
// y is now the beginning of the cursor row
y += row->baseline();
// y is now the cursor baseline
--pos;
else // potentional bug... BUG (Lgb)
if (pit->isSeparator(pos)) {
- if (pos > cursor.row()->pos() &&
+ if (pos > cursorRow()->pos() &&
bidi_level(pos) % 2 ==
bidi_level(pos - 1) % 2)
--pos;
*/
bool beforeFullRowInset(LyXText & lt, LyXCursor const & cur)
{
- RowList::iterator row = cur.row();
+ RowList::iterator row = lt.getRow(cur);
if (boost::next(row) == lt.rows().end())
return false;
cur.pos(row->pos() + column);
cur.x(x);
cur.y(y + row->baseline());
- cur.row(row);
if (beforeFullRowInset(*this, cur)) {
pos_type const last = lastPrintablePos(*this, row);
{
#if 1
int x = cursor.x_fix();
- int y = cursor.y() - cursor.row()->baseline() - 1;
+ int y = cursor.y() - cursorRow()->baseline() - 1;
setCursorFromCoordinates(x, y);
if (!selecting) {
int topy = top_y();
}
#else
setCursorFromCoordinates(bv(), cursor.x_fix(),
- cursor.y() - cursor.row()->baseline() - 1);
+ cursor.y() - cursorRow()->baseline() - 1);
#endif
}
{
#if 1
int x = cursor.x_fix();
- int y = cursor.y() - cursor.row()->baseline() +
- cursor.row()->height() + 1;
+ int y = cursor.y() - cursorRow()->baseline() +
+ cursorRow()->height() + 1;
setCursorFromCoordinates(x, y);
- if (!selecting && cursor.row() == cursor.irow()) {
+ if (!selecting && cursorRow() == cursor.irow()) {
int topy = top_y();
int y1 = cursor.iy() - topy;
int y2 = y1;
}
#else
setCursorFromCoordinates(bv(), cursor.x_fix(),
- cursor.y() - cursor.row()->baseline()
- + cursor.row()->height() + 1);
+ cursor.y() - cursorRow()->baseline()
+ + cursorRow()->height() + 1);
#endif
}
selection.cursor.par() == old_cursor.par()
&& selection.cursor.pos() == old_cursor.pos());
- if (old_cursor.row() != rows().begin()) {
+ if (getRow(old_cursor) != rows().begin()) {
RowList::iterator
- prevrow = boost::prior(old_cursor.row());
- const_cast<LyXText *>(this)->postPaint(old_cursor.y() - old_cursor.row()->baseline() - prevrow->height());
+ prevrow = boost::prior(getRow(old_cursor));
+ postPaint(old_cursor.y() - getRow(old_cursor)->baseline() - prevrow->height());
tmpcursor = cursor;
cursor = old_cursor; // that undo can restore the right cursor position
#warning FIXME. --end() iterator is usable here
cursor = tmpcursor;
// delete old row
- removeRow(old_cursor.row());
+ removeRow(getRow(old_cursor));
// delete old par
ownerParagraphs().erase(old_cursor.par());
}
setHeightOfRow(prevrow);
} else {
- RowList::iterator nextrow = boost::next(old_cursor.row());
- const_cast<LyXText *>(this)->postPaint(
- old_cursor.y() - old_cursor.row()->baseline());
+ RowList::iterator nextrow = boost::next(getRow(old_cursor));
+ postPaint(old_cursor.y() - getRow(old_cursor)->baseline());
tmpcursor = cursor;
cursor = old_cursor; // that undo can restore the right cursor position
cursor = tmpcursor;
// delete old row
- removeRow(old_cursor.row());
+ removeRow(getRow(old_cursor));
// delete old par
ownerParagraphs().erase(old_cursor.par());
// We are an inset's lyxtext. Tell the top-level lyxtext
// it needs to update the row we're in.
LyXText * t = bv()->text;
- t->postRowPaint(t->cursor.row(), t->cursor.y() - t->cursor.row()->baseline());
+ t->postRowPaint(t->cursorRow(), t->cursor.y() - t->cursorRow()->baseline());
}
// We are an inset's lyxtext. Tell the top-level lyxtext
// it needs to update the row we're in.
LyXText * t = bv()->text;
- t->postRowPaint(t->cursor.row(), t->cursor.y() - t->cursor.row()->baseline());
+ t->postRowPaint(t->cursorRow(), t->cursor.y() - t->cursorRow()->baseline());
}