]> git.lyx.org Git - features.git/commitdiff
rowlist9
authorLars Gullik Bjønnes <larsbj@gullik.org>
Tue, 1 Apr 2003 10:10:28 +0000 (10:10 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Tue, 1 Apr 2003 10:10:28 +0000 (10:10 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6669 a592a061-630c-0410-9148-cb99ea01b6c8

13 files changed:
src/ChangeLog
src/frontends/ChangeLog
src/frontends/screen.C
src/insets/ChangeLog
src/insets/insettext.C
src/insets/insettext.h
src/lyxcursor.C
src/lyxcursor.h
src/rowpainter.C
src/rowpainter.h
src/text.C
src/text2.C
src/text3.C

index 44cd8c83df32d6583902e79c9f86952e83ab0c31..19ff5abe71da5759b253ef31c6bdf92293b6fdea 100644 (file)
@@ -1,3 +1,29 @@
+2003-04-01  Lars Gullik Bjønnes  <larsbj@gullik.net>
+
+       * text3.C (cursorPrevious): adjust
+       (cursorNext): adjust
+       (dispatch): adjust
+
+       * text2.C (redoHeightOfParagraph): adjust
+       (redoDrawingOfParagraph): adjust
+       (setCursor): adjust
+
+       * text.C (breakParagraph): adjust
+       (insertChar): adjust
+       (backspace): adjust
+
+       * rowpainter.C (RowPainter): adjust
+       (leftMargin): simplify and adjust
+       (most rowpainter functions): adjust.
+
+       * rowpainter.h: store the row as RowList::iterator not as Row*
+
+       * lyxcursor.C (row): taka RowList::iterator as arg
+       (irow): ditto
+
+       * lyxcursor.h: make the LyXCursor store RowList::iterators instead
+       of Row*.
+
 2003-04-01  Angus Leeming  <leeming@lyx.org>
 
        * bufferview_funcs.C (string2font): rewrite so that it no longer uses
index 1a4fc93f5fc988031dab1b842cd540aa33d5f71e..fd847b81e526e443ea8f9680056d259d4c461015 100644 (file)
@@ -1,3 +1,9 @@
+2003-04-01  Lars Gullik Bjønnes  <larsbj@gullik.net>
+
+       * screen.C (topCursorVisible): adjust
+       (drawFromTo): adjust
+       (drawOneRow): adjust
+
 2003-03-31  John Levon  <levon@movementarian.org>
 
        * lyx_gui.h: add new font name helpers, move
index 44784b79183454d7221e99efb397f794c61dce9f..a9f4e4ef5ebc7a6122c44c90c33c9d5c0a769277 100644 (file)
@@ -195,12 +195,14 @@ unsigned int LyXScreen::topCursorVisible(LyXCursor const & cursor, int top_y)
        int const vheight = workarea().workHeight();
        int newtop = top_y;
 
-       Row * row = cursor.row();
+       RowList::iterator row = cursor.row();
 
+#warning SUPER HACK DISABLED (Lgb)
+#if 0
        // Is this a hack? Yes, probably... (Lgb)
        if (!row)
                return max(newtop, 0);
-
+#endif
        if (cursor.y() - row->baseline() + row->height() - top_y >= vheight) {
                if (row->height() < vheight
                    && row->height() > vheight / 4) {
@@ -421,9 +423,8 @@ void LyXScreen::drawFromTo(LyXText * text, BufferView * bv,
        int y = y_text - text->top_y();
        // y1 is now the real beginning of row on the screen
 
-
        while (row != end && y < y2) {
-               RowPainter rp(*bv, *text, *row);
+               RowPainter rp(*bv, *text, row);
                rp.paint(y + yo, xo, y + text->top_y());
                y += row->height();
                ++row;
@@ -449,6 +450,6 @@ void LyXScreen::drawOneRow(LyXText * text, BufferView * bv, Row * row,
        if (y - row->height() > workarea().workHeight())
                return;
 
-       RowPainter rp(*bv, *text, *row);
+       RowPainter rp(*bv, *text, row);
        rp.paint(y, xo, y + text->top_y());
 }
index 28a3517dc358b3de45b9e99adb2636f13ef6c901..4c7fe48c8f181c9612118a83eb8c9fd08e2a9540 100644 (file)
@@ -1,5 +1,8 @@
 2003-04-01  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
+       * insettext.C (draw): adjust
+       (crow): return a RowList::iterator not a Row*
+
        * insetminipage.C (localDispatch): adjust
 
        * insetert.C (localDispatch): adjust
index 424c707a10dc9510e3994b04dc9364f88b0e431a..f91e4f5c68e85c5ee3250195f95cfbe4c76c8445 100644 (file)
@@ -420,7 +420,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
        int yf = y_offset + first;
        y = 0;
        while ((rowit != end) && (yf < ph)) {
-               RowPainter rp(*bv, *lt, *rowit);
+               RowPainter rp(*bv, *lt, rowit);
                rp.paint(y + y_offset + first, int(x), y + lt->top_y());
                y += rowit->height();
                yf += rowit->height();
@@ -2142,7 +2142,7 @@ bool InsetText::cboundary(BufferView * bv) const
 }
 
 
-Row * InsetText::crow(BufferView * bv) const
+RowList::iterator InsetText::crow(BufferView * bv) const
 {
        return getLyXText(bv)->cursor.row();
 }
index 68150a5cdaf8275fad68589d9dcbe48f7cb547fa..4baca69ed5c4223af54fa5ce2ae5b14a0a9929ee 100644 (file)
@@ -17,6 +17,7 @@
 #include "LString.h"
 #include "LColor.h"
 #include "ParagraphList.h"
+#include "RowList.h"
 
 #include "support/types.h"
 
@@ -340,7 +341,7 @@ private:
        ///
        bool cboundary(BufferView *) const;
        ///
-       Row * crow(BufferView *) const;
+       RowList::iterator crow(BufferView *) const;
        ///
        void drawFrame(Painter &, int x) const;
        ///
index 5e2d020102984596b071fb847575cb7870fa13d9..3b7ba749e14153a5c92844e71fdffb945f3794d5 100644 (file)
@@ -111,25 +111,25 @@ int LyXCursor::iy() const
 }
 
 
-void LyXCursor::row(Row * r)
+void LyXCursor::row(RowList::iterator r)
 {
        row_ = r;
 }
 
 
-Row * LyXCursor::row() const
+RowList::iterator LyXCursor::row() const
 {
        return row_;
 }
 
 
-void LyXCursor::irow(Row * r)
+void LyXCursor::irow(RowList::iterator r)
 {
        irow_ = r;
 }
 
 
-Row * LyXCursor::irow() const
+RowList::iterator LyXCursor::irow() const
 {
        return irow_;
 }
index 1a0dc5253830292c86e1b9608d3d134916d1a62a..ad8df3dda880f1c3d22f14505d1e0e1da9296f04 100644 (file)
 #ifndef LYXCURSOR_H
 #define LYXCURSOR_H
 
+#include "RowList.h"
 #include "support/types.h"
 
 class Paragraph;
-class Row;
 
 /**
  * The cursor class describes the position of a cursor within a document.
@@ -81,11 +81,11 @@ public:
         */
        int iy() const;
        /// set the row of the paragraph the cursor is in
-       void row(Row * r);
+       void row(RowList::iterator r);
        /// return the row of the paragraph this cursor is in
-       Row * row() const;
+       RowList::iterator row() const;
        /// set the stored next row
-       void irow(Row * r);
+       void irow(RowList::iterator r);
        /**
         * Return the next row, when this
         * cursor is at the end of the previous row, for insets that take
@@ -93,7 +93,7 @@ public:
         *
         * FIXME: explain why we need this ? especially for y...
         */
-       Row * irow() const;
+       RowList::iterator irow() const;
 private:
        /// The paragraph the cursor is in.
        Paragraph * par_;
@@ -126,9 +126,9 @@ private:
        /// the stored next-row y position
        int iy_;
        /// the containing row
-       Row * row_;
+       RowList::iterator row_;
        /// the containing row for the next line
-       Row * irow_;
+       RowList::iterator irow_;
 };
 
 /// these three dictate the others
index faf9eb1d1657879f1da35bac4b7b21dea91b9d09..11072c727c1161a1147520f0957b5f903e9e68ea 100644 (file)
@@ -53,8 +53,8 @@ BufferView * perv(BufferView const & bv)
 } // namespace anon
 
 
-RowPainter::RowPainter(BufferView const & bv, LyXText const & text, Row const & row)
-       : bv_(bv), pain_(bv_.painter()), text_(text), row_(row), par_(*row.par())
+RowPainter::RowPainter(BufferView const & bv, LyXText const & text, RowList::iterator rit)
+       : bv_(bv), pain_(bv_.painter()), text_(text), row_(rit), par_(*rit->par())
 {
 }
 
@@ -97,8 +97,7 @@ char const RowPainter::transformChar(char c, lyx::pos_type pos) const
 
 int RowPainter::leftMargin() const
 {
-       Row * row(const_cast<Row *>(&row_));
-       return text_.leftMargin(row);
+       return text_.leftMargin(row_);
 }
 
 
@@ -113,7 +112,7 @@ void RowPainter::paintInset(pos_type const pos)
 #warning inset->update FIXME
        inset->update(perv(bv_), false);
 
-       inset->draw(perv(bv_), font, yo_ + row_.baseline(), x_);
+       inset->draw(perv(bv_), font, yo_ + row_->baseline(), x_);
 }
 
 
@@ -148,7 +147,7 @@ void RowPainter::paintHebrewComposeChar(pos_type & vpos)
        }
 
        // Draw nikud
-       pain_.text(int(x_) + dx, yo_ + row_.baseline(), str, font);
+       pain_.text(int(x_) + dx, yo_ + row_->baseline(), str, font);
 }
 
 
@@ -179,14 +178,14 @@ void RowPainter::paintArabicComposeChar(pos_type & vpos)
                }
        }
        // Draw nikud
-       pain_.text(int(x_) + dx, yo_ + row_.baseline(), str, font);
+       pain_.text(int(x_) + dx, yo_ + row_->baseline(), str, font);
 }
 
 
 void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic)
 {
        pos_type pos = text_.vis2log(vpos);
-       pos_type const last = row_.lastPrintablePos();
+       pos_type const last = row_->lastPrintablePos();
        LyXFont orig_font(getFont(pos));
 
        // first character
@@ -236,7 +235,7 @@ void RowPainter::paintChars(pos_type & vpos, bool hebrew, bool arabic)
        }
 
        // Draw text and set the new x position
-       pain_.text(int(x_), yo_ + row_.baseline(), str, orig_font);
+       pain_.text(int(x_), yo_ + row_->baseline(), str, orig_font);
        x_ += font_metrics::width(str, orig_font);
 }
 
@@ -250,7 +249,7 @@ void RowPainter::paintForeignMark(float const orig_x, LyXFont const & orig_font)
        if (orig_font.language() == bv_.buffer()->params.language)
                return;
 
-       int const y = yo_ + row_.baseline() + 1;
+       int const y = yo_ + row_->baseline() + 1;
        pain_.line(int(orig_x), y, int(x_), y, LColor::language);
 }
 
@@ -302,7 +301,7 @@ void RowPainter::paintBackground()
 {
        int const x = xo_;
        int const y = yo_ < 0 ? 0 : yo_;
-       int const h = yo_ < 0 ? row_.height() + yo_ : row_.height();
+       int const h = yo_ < 0 ? row_->height() + yo_ : row_->height();
        pain_.fillRectangle(x, y, width_, h, text_.backgroundColor());
 }
 
@@ -316,19 +315,16 @@ void RowPainter::paintSelection()
        int const endx = text_.selection.end.x();
        int const starty = text_.selection.start.y();
        int const endy = text_.selection.end.y();
-       Row const * startrow = text_.selection.start.row();
-       Row const * endrow = text_.selection.end.row();
-
-       // Bleh.
-       Row const * row = &row_;
+       RowList::iterator startrow = text_.selection.start.row();
+       RowList::iterator endrow = text_.selection.end.row();
 
        if (text_.bidi_same_direction) {
                int x;
                int y = yo_;
                int w;
-               int h = row_.height();
+               int h = row_->height();
 
-               if (startrow == row && endrow == row) {
+               if (startrow == row_ && endrow == row_) {
                        if (startx < endx) {
                                x = xo_ + startx;
                                w = endx - startx;
@@ -338,11 +334,11 @@ void RowPainter::paintSelection()
                                w = startx - endx;
                                pain_.fillRectangle(x, y, w, h, LColor::selection);
                        }
-               } else if (startrow == row) {
+               } else if (startrow == row_) {
                        int const x = (is_rtl) ? xo_ : (xo_ + startx);
                        int const w = (is_rtl) ? startx : (width_ - startx);
                        pain_.fillRectangle(x, y, w, h, LColor::selection);
-               } else if (endrow == row) {
+               } else if (endrow == row_) {
                        int const x = (is_rtl) ? (xo_ + endx) : xo_;
                        int const w = (is_rtl) ? (width_ - endx) : endx;
                        pain_.fillRectangle(x, y, w, h, LColor::selection);
@@ -350,23 +346,23 @@ void RowPainter::paintSelection()
                        pain_.fillRectangle(xo_, y, width_, h, LColor::selection);
                }
                return;
-       } else if (startrow != row && endrow != row) {
+       } else if (startrow != row_ && endrow != row_) {
                if (y_ > starty && y_ < endy) {
                        int w = width_;
-                       int h = row_.height();
+                       int h = row_->height();
                        pain_.fillRectangle(xo_, yo_, w, h, LColor::selection);
                }
                return;
        }
 
-       if ((startrow != row && !is_rtl) || (endrow != row && is_rtl))
-               pain_.fillRectangle(xo_, yo_, int(x_), row_.height(), LColor::selection);
+       if ((startrow != row_ && !is_rtl) || (endrow != row_ && is_rtl))
+               pain_.fillRectangle(xo_, yo_, int(x_), row_->height(), LColor::selection);
 
        pos_type const body_pos = par_.beginningOfBody();
-       pos_type const last = row_.lastPrintablePos();
+       pos_type const last = row_->lastPrintablePos();
        float tmpx = x_;
 
-       for (pos_type vpos = row_.pos(); vpos <= last; ++vpos)  {
+       for (pos_type vpos = row_->pos(); vpos <= last; ++vpos)  {
                pos_type pos = text_.vis2log(vpos);
                float const old_tmpx = tmpx;
                if (body_pos > 0 && pos == body_pos - 1) {
@@ -379,7 +375,7 @@ void RowPainter::paintSelection()
                                tmpx -= singleWidth(body_pos - 1);
                }
 
-               if (row_.hfillExpansion(pos)) {
+               if (row_->hfillExpansion(pos)) {
                        tmpx += singleWidth(pos);
                        if (pos >= body_pos)
                                tmpx += hfill_;
@@ -395,34 +391,34 @@ void RowPainter::paintSelection()
                        tmpx += singleWidth(pos);
                }
 
-               if ((startrow != row || text_.selection.start.pos() <= pos) &&
-                       (endrow != row || pos < text_.selection.end.pos())) {
+               if ((startrow != row_ || text_.selection.start.pos() <= pos) &&
+                       (endrow != row_ || pos < text_.selection.end.pos())) {
                        // Here we do not use x_ as xo_ was added to x_.
                        pain_.fillRectangle(int(old_tmpx), yo_,
                                int(tmpx - old_tmpx + 1),
-                               row_.height(), LColor::selection);
+                               row_->height(), LColor::selection);
                }
        }
 
-       if ((startrow != row && is_rtl) || (endrow != row && !is_rtl)) {
+       if ((startrow != row_ && is_rtl) || (endrow != row_ && !is_rtl)) {
                pain_.fillRectangle(xo_ + int(tmpx),
                                      yo_, int(bv_.workWidth() - tmpx),
-                                     row_.height(), LColor::selection);
+                                     row_->height(), LColor::selection);
        }
 }
 
 
 void RowPainter::paintChangeBar()
 {
-       pos_type const start = row_.pos();
-       pos_type const end = row_.lastPrintablePos();
+       pos_type const start = row_->pos();
+       pos_type const end = row_->lastPrintablePos();
 
        if (!par_.isChanged(start, end))
                return;
 
-       int const height = (row_.next()
-               ? row_.height() + row_.next()->top_of_text()
-               : row_.baseline());
+       int const height = (row_->next()
+               ? row_->height() + row_->next()->top_of_text()
+               : row_->baseline());
 
        pain_.fillRectangle(4, yo_, 5, height, LColor::changebar);
 }
@@ -441,8 +437,8 @@ void RowPainter::paintAppendix()
        if (par_.params().startOfAppendix())
                y += 2 * defaultRowHeight();
 
-       pain_.line(1, y, 1, yo_ + row_.height(), LColor::appendix);
-       pain_.line(ww - 2, y, ww - 2, yo_ + row_.height(), LColor::appendix);
+       pain_.line(1, y, 1, yo_ + row_->height(), LColor::appendix);
+       pain_.line(ww - 2, y, ww - 2, yo_ + row_->height(), LColor::appendix);
 }
 
 
@@ -454,18 +450,18 @@ void RowPainter::paintDepthBar()
                return;
 
        Paragraph::depth_type prev_depth = 0;
-       if (row_.previous())
-               prev_depth = row_.previous()->par()->getDepth();
+       if (row_->previous())
+               prev_depth = row_->previous()->par()->getDepth();
        Paragraph::depth_type next_depth = 0;
-       if (row_.next())
-               next_depth = row_.next()->par()->getDepth();
+       if (row_->next())
+               next_depth = row_->next()->par()->getDepth();
 
        for (Paragraph::depth_type i = 1; i <= depth; ++i) {
                int x = (PAPER_MARGIN / 5) * i + xo_;
                // only consider the changebar space if we're drawing outer left
                if (!xo_)
                        x += CHANGEBAR_MARGIN;
-               int const h = yo_ + row_.height() - 1 - (i - next_depth - 1) * 3;
+               int const h = yo_ + row_->height() - 1 - (i - next_depth - 1) * 3;
 
                pain_.line(x, yo_, x, h, LColor::depthbar);
 
@@ -624,7 +620,7 @@ void RowPainter::paintFirst()
        }
 
        // the top margin
-       if (!row_.previous() && !text_.isInInset())
+       if (!row_->previous() && !text_.isInInset())
                y_top += PAPER_MARGIN;
 
        // draw a top pagebreak
@@ -711,8 +707,8 @@ void RowPainter::paintFirst()
                                        }
 
                                        pain_.text(int(x),
-                                               yo_ + row_.baseline() -
-                                               row_.ascent_of_text() - maxdesc,
+                                               yo_ + row_->baseline() -
+                                               row_->ascent_of_text() - maxdesc,
                                                str, font);
                                }
                        } else {
@@ -724,7 +720,7 @@ void RowPainter::paintFirst()
                                                - font_metrics::width(str, font);
                                }
 
-                               pain_.text(int(x), yo_ + row_.baseline(), str, font);
+                               pain_.text(int(x), yo_ + row_->baseline(), str, font);
                        }
                }
 
@@ -751,14 +747,14 @@ void RowPainter::paintFirst()
                        float x = x_;
                        if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
                                x = ((is_rtl ? leftMargin() : x_)
-                                        + ww - text_.rightMargin(*bv_.buffer(), row_)) / 2;
+                                        + ww - text_.rightMargin(*bv_.buffer(), *row_)) / 2;
                                x -= font_metrics::width(str, font) / 2;
                        } else if (is_rtl) {
                                x = ww - leftMargin() -
                                        font_metrics::width(str, font);
                        }
-                       pain_.text(int(x), yo_ + row_.baseline()
-                                 - row_.ascent_of_text() - maxdesc,
+                       pain_.text(int(x), yo_ + row_->baseline()
+                                 - row_->ascent_of_text() - maxdesc,
                                  str, font);
                }
        }
@@ -768,10 +764,10 @@ void RowPainter::paintFirst()
 void RowPainter::paintLast()
 {
        ParagraphParameters const & parparams = par_.params();
-       int y_bottom = row_.height() - 1;
+       int y_bottom = row_->height() - 1;
 
        // the bottom margin
-       if (!row_.next() && !text_.isInInset())
+       if (!row_->next() && !text_.isInInset())
                y_bottom -= PAPER_MARGIN;
 
        int const ww = bv_.workWidth();
@@ -814,11 +810,11 @@ void RowPainter::paintLast()
        {
                LyXFont const font = getLabelFont();
                int const size = int(0.75 * font_metrics::maxAscent(font));
-               int const y = (yo_ + row_.baseline()) - size;
+               int const y = (yo_ + row_->baseline()) - size;
                int x = is_rtl ? LEFT_MARGIN : ww - PAPER_MARGIN - size;
 
-               if (row_.fill() <= size)
-                       x += (size - row_.fill() + 1) * (is_rtl ? -1 : 1);
+               if (row_->fill() <= size)
+                       x += (size - row_->fill() + 1) * (is_rtl ? -1 : 1);
 
                if (endlabel == END_LABEL_BOX) {
                        pain_.rectangle(x, y, size, size, LColor::eolmarker);
@@ -838,8 +834,8 @@ void RowPainter::paintLast()
                string const & str = par_.layout()->endlabelstring();
                int const x = is_rtl ?
                        int(x_) - font_metrics::width(str, font)
-                       : ww - text_.rightMargin(*bv_.buffer(), row_) - row_.fill();
-               pain_.text(x, yo_ + row_.baseline(), str, font);
+                       : ww - text_.rightMargin(*bv_.buffer(), *row_) - row_->fill();
+               pain_.text(x, yo_ + row_->baseline(), str, font);
                break;
        }
        case END_LABEL_NO_LABEL:
@@ -850,7 +846,7 @@ void RowPainter::paintLast()
 
 void RowPainter::paintText()
 {
-       pos_type const last = row_.lastPrintablePos();
+       pos_type const last = row_->lastPrintablePos();
        pos_type body_pos = par_.beginningOfBody();
        if (body_pos > 0 &&
                (body_pos - 1 > last ||
@@ -864,7 +860,7 @@ void RowPainter::paintText()
        bool is_struckout = false;
        float last_strikeout_x = 0.0;
 
-       pos_type vpos = row_.pos();
+       pos_type vpos = row_->pos();
        while (vpos <= last) {
                if (x_ > bv_.workWidth())
                        break;
@@ -894,8 +890,8 @@ void RowPainter::paintText()
                // if we reach the end of a struck out range, paint it
                // we also don't paint across things like tables
                if (running_strikeout && (highly_editable_inset || !is_struckout)) {
-                       int const middle = yo_ + row_.top_of_text()
-                               + ((row_.baseline() - row_.top_of_text()) / 2);
+                       int const middle = yo_ + row_->top_of_text()
+                               + ((row_->baseline() - row_->top_of_text()) / 2);
                        pain_.line(int(last_strikeout_x), middle, int(x_), middle,
                                LColor::strikeout, Painter::line_solid, Painter::line_thin);
                        running_strikeout = false;
@@ -912,13 +908,13 @@ void RowPainter::paintText()
                if (par_.isHfill(pos)) {
                        x_ += 1;
 
-                       int const y0 = yo_ + row_.baseline();
+                       int const y0 = yo_ + row_->baseline();
                        int const y1 = y0 - defaultRowHeight() / 2;
 
                        pain_.line(int(x_), y1, int(x_), y0,
                                     LColor::added_space);
 
-                       if (row_.hfillExpansion(pos)) {
+                       if (row_->hfillExpansion(pos)) {
                                int const y2 = (y0 + y1) / 2;
 
                                if (pos >= body_pos) {
@@ -952,8 +948,8 @@ void RowPainter::paintText()
 
        // if we reach the end of a struck out range, paint it
        if (running_strikeout) {
-               int const middle = yo_ + row_.top_of_text()
-                       + ((row_.baseline() - row_.top_of_text()) / 2);
+               int const middle = yo_ + row_->top_of_text()
+                       + ((row_->baseline() - row_->top_of_text()) / 2);
                pain_.line(int(last_strikeout_x), middle, int(x_), middle,
                        LColor::strikeout, Painter::line_solid, Painter::line_thin);
                running_strikeout = false;
@@ -972,8 +968,7 @@ void RowPainter::paint(int y_offset, int x_offset, int y)
 
        // FIXME: must be a cleaner way here. Aren't these calculations
        // belonging to row metrics ?
-       Row * row(const_cast<Row *>(&row_));
-       text_.prepareToPrint(row, x_, separator_, hfill_, label_hfill_);
+       text_.prepareToPrint(row_, x_, separator_, hfill_, label_hfill_);
 
        // FIXME: what is this fixing ?
        if (text_.isInInset() && (x_ < 0))
@@ -999,11 +994,11 @@ void RowPainter::paint(int y_offset, int x_offset, int y)
        // changebar
        paintChangeBar();
 
-       if (row_.isParStart()) {
+       if (row_->isParStart()) {
                paintFirst();
        }
 
-       if (row_.isParEnd()) {
+       if (row_->isParEnd()) {
                paintLast();
        }
 
index 6711d57c6e0afe414dfddc6531afe42ee0aba819..efbd99b5478a3c75e2ccb65f8a71097d57628b63 100644 (file)
 
 #include <config.h>
 
+#include "RowList.h"
 #include "LString.h"
 #include "support/types.h"
 
 class LyXText;
 class BufferView;
-class Row;
 class Paragraph;
 class Painter;
 class LyXFont;
@@ -31,7 +31,7 @@ class VSpace;
 class RowPainter {
 public:
        /// initialise painter
-       RowPainter(BufferView const & bv, LyXText const & text, Row const & row);
+       RowPainter(BufferView const & bv, LyXText const & text, RowList::iterator rit);
 
        /// paint the row.
        void paint(int y_offset, int x_offset, int y);
@@ -81,7 +81,7 @@ private:
        LyXText const & text_;
 
        /// The row to paint
-       Row const & row_;
+       RowList::iterator row_;
 
        /// Row's paragraph
        Paragraph const & par_;
index 64072bc9e96739f840c72cee782e73bed1e52db9..f8b12daf21b20f17b3941d041dd50a8b9feb65ed 100644 (file)
@@ -1504,9 +1504,9 @@ void LyXText::breakParagraph(ParagraphList & paragraphs, char keep_layout)
 
        // Do not forget the special right address boxes
        if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
-               Row * r = cursor.row();
-               while (r->previous() && r->previous()->par() == r->par()) {
-                       r = r->previous();
+               RowList::iterator r = cursor.row();
+               while (r != rows().begin() && boost::prior(r)->par() == r->par()) {
+                       --r;
                        y -= r->height();
                }
        }
@@ -1668,7 +1668,7 @@ void LyXText::insertChar(char c)
        }
 
        // get the cursor row fist
-       Row * row = cursor.row();
+       RowList::iterator row = cursor.row();
        int y = cursor.y() - row->baseline();
        if (c != Paragraph::META_INSET) {
                // Here case LyXText::InsertInset  already insertet the character
@@ -1678,9 +1678,10 @@ void LyXText::insertChar(char c)
 
        if (!jumped_over_space) {
                // refresh the positions
-               Row * tmprow = row;
-               while (tmprow->next() && tmprow->next()->par() == row->par()) {
-                       tmprow = tmprow->next();
+               RowList::iterator tmprow = row;
+               while (boost::next(tmprow) != rows().end() &&
+                      boost::next(tmprow)->par() == row->par()) {
+                       ++tmprow;
                        tmprow->pos(tmprow->pos() + 1);
                }
        }
@@ -2524,7 +2525,7 @@ void LyXText::backspace()
                }
 
                Paragraph * tmppar = cursor.par();
-               Row * tmprow = cursor.row();
+               RowList::iterator tmprow = cursor.row();
 
                // We used to do cursorLeftIntern() here, but it is
                // not a good idea since it triggers the auto-delete
@@ -2606,7 +2607,7 @@ void LyXText::backspace()
                        }
                }
 
-               Row * row = cursor.row();
+               RowList::iterator row = cursor.row();
                int y = cursor.y() - row->baseline();
                pos_type z;
                // remember that a space at the end of a row doesnt count
@@ -2623,9 +2624,10 @@ void LyXText::backspace()
                if (cursor.pos() && cursor.par()->isNewline(cursor.pos())) {
                        cursor.par()->erase(cursor.pos());
                        // refresh the positions
-                       Row * tmprow = row;
-                       while (tmprow->next() && tmprow->next()->par() == row->par()) {
-                               tmprow = tmprow->next();
+                       RowList::iterator tmprow = row;
+                       while (boost::next(tmprow) != rows().end() &&
+                              boost::next(tmprow)->par() == row->par()) {
+                               ++tmprow;
                                tmprow->pos(tmprow->pos() - 1);
                        }
                        if (cursor.par()->isLineSeparator(cursor.pos() - 1))
@@ -2638,8 +2640,9 @@ void LyXText::backspace()
                                            cursor.pos(), current_font);
                                // refresh the positions
                                tmprow = row;
-                               while (tmprow->next() && tmprow->next()->par() == row->par()) {
-                                       tmprow = tmprow->next();
+                               while (boost::next(tmprow) != rows().end() &&
+                                      boost::next(tmprow)->par() == row->par()) {
+                                       ++tmprow;
                                        tmprow->pos(tmprow->pos() + 1);
                                }
                        }
@@ -2647,10 +2650,10 @@ void LyXText::backspace()
                        cursor.par()->erase(cursor.pos());
 
                        // refresh the positions
-                       Row * tmprow = row;
-                       while (tmprow->next()
-                              && tmprow->next()->par() == row->par()) {
-                               tmprow = tmprow->next();
+                       RowList::iterator tmprow = row;
+                       while (boost::next(tmprow) != rows().end() &&
+                              boost::next(tmprow)->par() == row->par()) {
+                               ++tmprow;
                                tmprow->pos(tmprow->pos() - 1);
                        }
 
@@ -2662,21 +2665,21 @@ void LyXText::backspace()
                                cursor.par()->erase(cursor.pos());
                                // refresh the positions
                                tmprow = row;
-                               while (tmprow->next() &&
-                                      tmprow->next()->par() == row->par()) {
-                                       tmprow = tmprow->next();
+                               while (boost::next(tmprow) != rows().end() &&
+                                      boost::next(tmprow)->par() == row->par()) {
+                                       ++tmprow;
                                        tmprow->pos(tmprow->pos() - 1);
                                }
                        }
                }
 
                // is there a break one row above
-               if (row->previous() && row->previous()->par() == row->par()) {
-                       z = rowBreakPoint(*row->previous());
+               if (row != rows().begin() && boost::prior(row)->par() == row->par()) {
+                       z = rowBreakPoint(*boost::prior(row));
                        if (z >= row->pos()) {
                                row->pos(z + 1);
 
-                               Row * tmprow = row->previous();
+                               RowList::iterator tmprow = boost::prior(row);
 
                                // maybe the current row is now empty
                                if (row->pos() >= row->par()->size()) {
@@ -2685,8 +2688,9 @@ void LyXText::backspace()
                                        need_break_row = rows().end();
                                } else {
                                        breakAgainOneRow(row);
-                                       if (row->next() && row->next()->par() == row->par())
-                                               need_break_row = row->next();
+                                       if (boost::next(row) != rows().end() &&
+                                           boost::next(row)->par() == row->par())
+                                               need_break_row = boost::next(row);
                                        else
                                                need_break_row = rows().end();
                                }
@@ -2712,7 +2716,8 @@ void LyXText::backspace()
                }
 
                // break the cursor row again
-               if (row->next() && row->next()->par() == row->par() &&
+               if (boost::next(row) != rows().end() &&
+                   boost::next(row)->par() == row->par() &&
                    (row->lastPos() == row->par()->size() - 1 ||
                     rowBreakPoint(*row) != row->lastPos())) {
 
@@ -2721,22 +2726,24 @@ void LyXText::backspace()
                        // is to long to be broken. Well, I don t care this
                        // hack ;-)
                        if (row->lastPos() == row->par()->size() - 1)
-                               removeRow(row->next());
+                               removeRow(boost::next(row));
 
                        postPaint(y);
 
                        breakAgainOneRow(row);
                        // will the cursor be in another row now?
-                       if (row->next() && row->next()->par() == row->par() &&
+                       if (boost::next(row) != rows().end() &&
+                           boost::next(row)->par() == row->par() &&
                            row->lastPos() <= cursor.pos()) {
-                               row = row->next();
+                               ++row;
                                breakAgainOneRow(row);
                        }
 
                        setCursor(cursor.par(), cursor.pos(), false, cursor.boundary());
 
-                       if (row->next() && row->next()->par() == row->par())
-                               need_break_row = row->next();
+                       if (boost::next(row) != rows().end() &&
+                           boost::next(row)->par() == row->par())
+                               need_break_row = boost::next(row);
                        else
                                need_break_row = rows().end();
                } else  {
index 00d102baabd9cbd77e4811ee020ab9cba95c7286..0f30089627317815dbaf806671c341971b46b157 100644 (file)
@@ -637,14 +637,14 @@ void LyXText::setFont(LyXFont const & font, bool toggleall)
 
 void LyXText::redoHeightOfParagraph()
 {
-       Row * tmprow = cursor.row();
+       RowList::iterator tmprow = cursor.row();
        int y = cursor.y() - tmprow->baseline();
 
        setHeightOfRow(tmprow);
 
-       while (tmprow->previous()
-              && tmprow->previous()->par() == tmprow->par()) {
-               tmprow = tmprow->previous();
+       while (tmprow != rows().begin()
+              && boost::prior(tmprow)->par() == tmprow->par()) {
+               --tmprow;
                y -= tmprow->height();
                setHeightOfRow(tmprow);
        }
@@ -657,14 +657,14 @@ void LyXText::redoHeightOfParagraph()
 
 void LyXText::redoDrawingOfParagraph(LyXCursor const & cur)
 {
-       Row * tmprow = cur.row();
+       RowList::iterator tmprow = cur.row();
 
        int y = cur.y() - tmprow->baseline();
        setHeightOfRow(tmprow);
 
-       while (tmprow->previous()
-              && tmprow->previous()->par() == tmprow->par())  {
-               tmprow = tmprow->previous();
+       while (tmprow != rows().begin()
+              && boost::prior(tmprow)->par() == tmprow->par())  {
+               --tmprow;
                y -= tmprow->height();
        }
 
@@ -1677,7 +1677,7 @@ void LyXText::setCursor(LyXCursor & cur, Paragraph * par,
        RowList::iterator beg = rows().begin();
 
        RowList::iterator old_row = row;
-       cur.irow(&*row);
+       cur.irow(row);
        // if we are before the first char of this row and are still in the
        // same paragraph and there is a previous row then put the cursor on
        // the end of the previous row
index 12f940c04ef480155fabb0916568e554857a34f4..d5c5d595af60a1bc2aab9524276af667680f4bab 100644 (file)
@@ -249,7 +249,7 @@ void LyXText::cursorPrevious()
                return;
        }
 
-       Row * cursorrow = cursor.row();
+       RowList::iterator cursorrow = cursor.row();
 
        setCursorFromCoordinates(cursor.x_fix(), y);
        finishUndo();
@@ -314,7 +314,7 @@ void LyXText::cursorNext()
 
        getRowNearY(y);
 
-       Row * cursorrow = cursor.row();
+       RowList::iterator cursorrow = cursor.row();
        setCursorFromCoordinates(cursor.x_fix(), y);
        // + bv->workHeight());
        finishUndo();
@@ -1308,7 +1308,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
 
                bv->screen().hideCursor();
 
-               Row * cursorrow = bv->text->cursor.row();
+               RowList::iterator cursorrow = bv->text->cursor.row();
                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