X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fcursor_slice.h;h=3ba4dfb0587ba56d276f79488690535f2f864bc0;hb=2486c96b8d9086471299bf207b85b1ce848246aa;hp=d9f69f755edcffb07141a9dc0573c26a2dc7dabf;hpb=883decc7dad17990d29533cb813b04080848ed70;p=lyx.git diff --git a/src/cursor_slice.h b/src/cursor_slice.h index d9f69f755e..3ba4dfb058 100644 --- a/src/cursor_slice.h +++ b/src/cursor_slice.h @@ -17,6 +17,7 @@ #ifndef CURSORSLICE_H #define CURSORSLICE_H +#include "insets/insetbase.h" #include "support/types.h" #include @@ -28,13 +29,11 @@ class MathInset; class MathArray; class LyXText; class Paragraph; -class UpdatableInset; - /// This encapsulates a single slice of a document iterator as used e.g. /// for cursors. -// After IU, the distinction of MathInset and UpdatableInset as well as +// After IU, the distinction of MathInset and InsetOld as well as // that of MathArray and LyXText should vanish. They are conceptually the // same (now...) @@ -62,10 +61,6 @@ public: idx_type idx() const { return idx_; } /// return the cell this cursor is in idx_type & idx() { return idx_; } - /// Save current cursor idx as row, col - void idxSave() { col_ = idx_ % ncols(); row_ = idx_ / ncols(); } - /// update idx to correspond to row, col - void idxLoad() { idx_ = col_ + ncols() * row_; } /// return the last cell in this inset idx_type lastidx() const { return nargs() - 1; } /// return the offset of the paragraph this cursor is in @@ -83,76 +78,69 @@ public: /// return the last position within the paragraph pos_type lastpos() const; /// return the number of embedded cells - size_t nargs() const; - /// return the number of columns - size_t ncols() const; - /// return the number of rows - size_t nrows() const; - /// return the grid row of the current cell + size_t nargs() const { return inset_->nargs(); } + /// return the number of columns (1 in non-grid-like insets) + size_t ncols() const { return inset_->ncols(); } + /// return the number of rows (1 in non-grid-like insets) + size_t nrows() const { return inset_->nrows(); } + /*! + * \return the grid row of the current cell. + * This does only make sense in grid like insets. + */ row_type row() const; - /// return the grid column of the current cell + /*! + * \return the grid column of the current cell. + * This does only make sense in grid like insets. + */ col_type col() const; /// /// texted specific stuff /// - /// see comment for the member - bool boundary() const { return boundary_; } - /// see comment for the member - bool & boundary() { return boundary_; } - /// - LyXText * text(); - /// - LyXText const * text() const; - /// - UpdatableInset * asUpdatableInset() const; - /// + /// returns text corresponding to this position + LyXText * text() { return inset_->getText(idx_); } + /// returns text corresponding to this position + LyXText const * text() const { return inset_->getText(idx_); } + /// paragraph in this cell Paragraph & paragraph(); - /// + /// paragraph in this cell Paragraph const & paragraph() const; /// /// mathed specific stuff /// + /// returns the owning inset if it is a MathInset, else 0 + MathInset * asMathInset() const { return inset_->asMathInset(); } /// returns cell corresponding to this position MathArray & cell() const; - /// - MathInset * asMathInset() const; - /// + /// write some debug information to \p os friend std::ostream & operator<<(std::ostream &, CursorSlice const &); public: /// pointer to 'owning' inset. This is some kind of cache. InsetBase * inset_; private: - /// cell index of a position in this inset + /*! + * Cell index of a position in this inset. + * This is the primary cell information also for grid like insets, + * although we have the convenience functions row() and col() for + * those * and column changes every time the number of columns ornumber + * of rows changes. Normally the cursor should stay in the same cell, + * so these changes should typically be performed like the following: + * \code + * row_type const r = cur.row(); + * col_type const c = cur.col(); + * // change nrows() and/or ncols() + * cur.idx = index(r, c); + * \endcode + */ idx_type idx_; - /// row position in inset - row_type row_; - /// column position in inset - col_type col_; /// paragraph in this cell (used by texted) pit_type pit_; - /// true of 'pit' was properly initialized + /// true if 'pit' was properly initialized bool pit_valid_; /// position in this cell pos_type pos_; - /** - * When the cursor position is i, is the cursor is after the i-th char - * or before the i+1-th char ? Normally, these two interpretations are - * equivalent, except when the fonts of the i-th and i+1-th char - * differ. - * We use boundary_ to distinguish between the two options: - * If boundary_=true, then the cursor is after the i-th char - * and if boundary_=false, then the cursor is before the i+1-th char. - * - * We currently use the boundary only when the language direction of - * the i-th char is different than the one of the i+1-th char. - * In this case it is important to distinguish between the two - * cursor interpretations, in order to give a reasonable behavior to - * the user. - */ - bool boundary_; }; /// test for equality