]> git.lyx.org Git - features.git/commitdiff
rowlist3
authorLars Gullik Bjønnes <larsbj@gullik.org>
Sun, 30 Mar 2003 07:27:36 +0000 (07:27 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Sun, 30 Mar 2003 07:27:36 +0000 (07:27 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6647 a592a061-630c-0410-9148-cb99ea01b6c8

src/ChangeLog
src/frontends/ChangeLog
src/frontends/screen.C
src/lyxtext.h
src/text.C
src/text2.C
src/text3.C

index 8664dc0b68c38409b46151e0a741284dc5804fb2..521495f05cbd91bc9fd0bf1227cae3c988fff73c 100644 (file)
@@ -1,5 +1,16 @@
 2003-03-30  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
+       * text3.C (dispatch): adjust
+
+       * text2.C (checkParagraph): adjust
+       (setCursor): adjust
+       (setCursorFromCoordinates): adjust
+
+       * text.C (top_y): adjust
+       (workWidth): adjust
+       (getRow): make it return a RowList::iterator, adjust
+       (getRowNearY): make it return a RowList::iterator, adjust
+
        * text2.C (init): adjust
        (insertRow): remove function
        (insertParagraph): adjust
index 9ecdbe65308c55233afe67bbb71b4a7c45be1d90..1b4145b59da65b4f52539186f9cb3d265b4ae124 100644 (file)
@@ -1,3 +1,7 @@
+2003-03-30  Lars Gullik Bjønnes  <larsbj@gullik.net>
+
+       * screen.C (drawFromTo): adjust for RowList.
+
 2003-03-29  John Levon  <levon@movementarian.org>
 
        * Alert.h:
index a7e6f67c9fd090b503505c329899e8d174435c75..c3bc00cb7cd98ea9fbb5c8f4f56f8d20781f90dd 100644 (file)
@@ -413,18 +413,20 @@ void LyXScreen::drawFromTo(LyXText * text, BufferView * bv,
        int y_text = text->top_y() + y1;
 
        // get the first needed row
-       Row * row = text->getRowNearY(y_text);
+       RowList::iterator row = text->getRowNearY(y_text);
+       RowList::iterator end = text->rows().end();
+
        // y_text is now the real beginning of the row
 
        int y = y_text - text->top_y();
        // y1 is now the real beginning of row on the screen
 
 
-       while (row != 0 && y < y2) {
+       while (row != end && y < y2) {
                RowPainter rp(*bv, *text, *row);
                rp.paint(y + yo, xo, y + text->top_y());
                y += row->height();
-               row = row->next();
+               ++row;
        }
 
        // maybe we have to clear the screen at the bottom
index fc1a76e12769135ed275828b6b890207b117b3fe..12877ec0b7b8f83d38193100941333697efa7003 100644 (file)
@@ -233,7 +233,7 @@ public:
          (relative to the whole text). y is set to the real beginning
          of this row
          */
-       Row * getRowNearY(int & y) const;
+       RowList::iterator getRowNearY(int & y) const;
 
        /** returns the column near the specified x-coordinate of the row
         x is set to the real beginning of this column
@@ -244,7 +244,8 @@ public:
        /** returns a pointer to a specified row. y is set to the beginning
         of the row
         */
-       Row * getRow(Paragraph * par, lyx::pos_type pos, int & y) const;
+       RowList::iterator
+       getRow(Paragraph * par, lyx::pos_type pos, int & y) const;
 
        RowList & rows() {
                return rowlist_;
index 3a735c3c0ee2cea680bf1792481a911bbbea3d09..4dbfbb19c4b3117aa0e99118adf9db99afc33be9 100644 (file)
@@ -95,14 +95,14 @@ void LyXText::top_y(int newy)
        lyxerr[Debug::GUI] << "setting top y = " << newy << endl;
 
        int y = newy;
-       Row * row = getRowNearY(y);
+       RowList::iterator rit = getRowNearY(y);
 
-       if (row == anchor_row_ && anchor_row_offset_ == newy - y) {
+       if (rit == anchor_row_ && anchor_row_offset_ == newy - y) {
                lyxerr[Debug::GUI] << "top_y to same value, skipping update" << endl;
                return;
        }
 
-       anchor_row_ = row;
+       anchor_row_ = &*rit;
        anchor_row_offset_ = newy - y;
        lyxerr[Debug::GUI] << "changing reference to row: " << anchor_row_
               << " offset: " << anchor_row_offset_ << endl;
@@ -152,10 +152,12 @@ int LyXText::workWidth(Inset * inset) const
                return workWidth() - leftMargin(&dummyrow);
        } else {
                int dummy_y;
-               Row * row = getRow(par, pos, dummy_y);
-               Row * frow = row;
-               while (frow->previous() && frow->par() == frow->previous()->par())
-                       frow = frow->previous();
+               RowList::iterator row = getRow(par, pos, dummy_y);
+               RowList::iterator frow = row;
+               RowList::iterator beg = rows().begin();
+
+               while (frow != beg && frow->par() == boost::prior(frow)->par())
+                       --frow;
 
                // FIXME: I don't understand this code - jbl
 
@@ -163,7 +165,7 @@ int LyXText::workWidth(Inset * inset) const
                while (!frow->isParEnd()) {
                        if ((frow != row) && (maxw < frow->width()))
                                maxw = frow->width();
-                       frow = frow->next();
+                       ++frow;
                }
                if (maxw)
                        return maxw;
@@ -2770,10 +2772,11 @@ void LyXText::backspace()
 
 
 // returns pointer to a specified row
-Row * LyXText::getRow(Paragraph * par, pos_type pos, int & y) const
+RowList::iterator
+LyXText::getRow(Paragraph * par, pos_type pos, int & y) const
 {
        if (rows().empty())
-               return 0;
+               return rows().end();
 
        y = 0;
 
@@ -2794,11 +2797,11 @@ Row * LyXText::getRow(Paragraph * par, pos_type pos, int & y) const
                ++rit;
        }
 
-       return &*rit;
+       return rit;
 }
 
 
-Row * LyXText::getRowNearY(int & y) const
+RowList::iterator LyXText::getRowNearY(int & y) const
 {
        // If possible we should optimize this method. (Lgb)
        int tmpy = 0;
@@ -2806,7 +2809,7 @@ Row * LyXText::getRowNearY(int & y) const
        RowList::iterator rit = rows().begin();
        RowList::iterator end = rows().end();
 
-       while (boost::next(rit) != end && tmpy + rit->height() <= y) {
+       while (rit != end && boost::next(rit) != end && tmpy + rit->height() <= y) {
                tmpy += rit->height();
                ++rit;
        }
@@ -2815,7 +2818,7 @@ Row * LyXText::getRowNearY(int & y) const
 
        //lyxerr << "returned y = " << y << endl;
 
-       return &*rit;
+       return rit;
 }
 
 
index 23aa876815da4d83c61d747730edfee783cda8fb..c7cf5547d2e53b603c578f9ba1f81b623d711263 100644 (file)
@@ -733,7 +733,7 @@ void LyXText::redoParagraphs(LyXCursor const & cur,
                        } else {
                                insertParagraph(tmppar, tmprow->next());
                        }
-                       
+
 
                        if (!tmprow) {
                                tmprow = &*rows().begin();
@@ -1558,24 +1558,25 @@ void LyXText::insertStringAsParagraphs(string const & str)
 }
 
 
-void LyXText::checkParagraph(Paragraph * par,
-                            pos_type pos)
+void LyXText::checkParagraph(Paragraph * par, pos_type pos)
 {
        LyXCursor tmpcursor;
 
        int y = 0;
        pos_type z;
-       Row * row = getRow(par, pos, y);
+       RowList::iterator row = getRow(par, pos, y);
+       RowList::iterator beg = rows().begin();
 
        // is there a break one row above
-       if (row->previous() && row->previous()->par() == row->par()) {
-               z = rowBreakPoint(*row->previous());
+       if (row != beg
+           && boost::prior(row)->par() == row->par()) {
+               z = rowBreakPoint(*boost::prior(row));
                if (z >= row->pos()) {
                        // set the dimensions of the row above
-                       y -= row->previous()->height();
+                       y -= boost::prior(row)->height();
                        postPaint(y);
 
-                       breakAgain(row->previous());
+                       breakAgain(&*boost::prior(row));
 
                        // set the cursor again. Otherwise
                        // dangling pointers are possible
@@ -1589,9 +1590,9 @@ void LyXText::checkParagraph(Paragraph * par,
        int const tmpheight = row->height();
        pos_type const tmplast = row->lastPos();
 
-       breakAgain(row);
+       breakAgain(&*row);
        if (row->height() == tmpheight && row->lastPos() == tmplast) {
-               postRowPaint(row, y);
+               postRowPaint(&*row, y);
        } else {
                postPaint(y);
        }
@@ -1599,7 +1600,7 @@ void LyXText::checkParagraph(Paragraph * par,
        // check the special right address boxes
        if (par->layout()->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
                tmpcursor.par(par);
-               tmpcursor.row(row);
+               tmpcursor.row(&*row);
                tmpcursor.y(y);
                tmpcursor.x(0);
                tmpcursor.x_fix(0);
@@ -1681,25 +1682,27 @@ void LyXText::setCursor(LyXCursor & cur, Paragraph * par,
 
        // get the cursor y position in text
        int y = 0;
-       Row * row = getRow(par, pos, y);
-       Row * old_row = row;
-       cur.irow(row);
+       RowList::iterator row = getRow(par, pos, y);
+       RowList::iterator beg = rows().begin();
+
+       RowList::iterator old_row = 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
        cur.iy(y + row->baseline());
        Inset * ins;
-       if (row->previous() && pos &&
-               row->previous()->par() == row->par() &&
+       if (row != beg && pos &&
+               boost::prior(row)->par() == row->par() &&
            pos < par->size() &&
                par->getChar(pos) == Paragraph::META_INSET &&
                (ins = par->getInset(pos)) && (ins->needFullRow() || ins->display()))
        {
-               row = row->previous();
+               --row;
                y -= row->height();
        }
 
-       cur.row(row);
+       cur.row(&*row);
        // y is now the beginning of the cursor row
        y += row->baseline();
        // y is now the cursor baseline
@@ -1724,18 +1727,18 @@ void LyXText::setCursor(LyXCursor & cur, Paragraph * par,
        }
 
        // now get the cursors x position
-       float x = getCursorX(row, pos, last, boundary);
+       float x = getCursorX(&*row, pos, last, boundary);
        cur.x(int(x));
        cur.x_fix(cur.x());
        if (old_row != row) {
-               x = getCursorX(old_row, pos, last, boundary);
+               x = getCursorX(&*old_row, pos, last, boundary);
                cur.ix(int(x));
        } else
                cur.ix(cur.x());
        //if the cursor is in a visible row, anchor to it
        int topy = top_y();
        if (topy < y && y < topy + bv()->workHeight())
-               anchor_row(row);
+               anchor_row(&*row);
 }
 
 
@@ -2019,19 +2022,18 @@ namespace {
 }
 
 
-void LyXText::setCursorFromCoordinates(LyXCursor & cur,
-                                      int x, int y)
+void LyXText::setCursorFromCoordinates(LyXCursor & cur, int x, int y)
 {
        // Get the row first.
 
-       Row * row = getRowNearY(y);
+       RowList::iterator row = getRowNearY(y);
        bool bound = false;
-       pos_type const column = getColumnNearX(row, x, bound);
+       pos_type const column = getColumnNearX(&*row, x, bound);
        cur.par(row->par());
        cur.pos(row->pos() + column);
        cur.x(x);
        cur.y(y + row->baseline());
-       cur.row(row);
+       cur.row(&*row);
 
        if (beforeFullRowInset(*row, cur)) {
                pos_type last = row->lastPrintablePos();
@@ -2042,7 +2044,7 @@ void LyXText::setCursorFromCoordinates(LyXCursor & cur,
        } else {
                cur.iy(cur.y());
                cur.ix(cur.x());
-               cur.irow(row);
+               cur.irow(&*row);
        }
        cur.boundary(bound);
 }
index 34885b68033ae55c82c9b64dd5e190530907b54b..12f940c04ef480155fabb0916568e554857a34f4 100644 (file)
@@ -416,7 +416,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                                setUndo(bv, Undo::EDIT, tmp, tmp->next());
                                tmp->params().startOfAppendix(false);
                                int tmpy;
-                               setHeightOfRow(getRow(tmp, 0, tmpy));
+                               setHeightOfRow(&*getRow(tmp, 0, tmpy));
                                break;
                        }
                }