X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCursorSlice.h;h=01634bdacca3a1dabc2d507dbb614a9b2df9e40e;hb=82edf5907a9ce0c1254549eee484616957a36e7b;hp=7102d588fe550f5b03b7beee5a2564190d2011be;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/CursorSlice.h b/src/CursorSlice.h index 7102d588fe..01634bdacc 100644 --- a/src/CursorSlice.h +++ b/src/CursorSlice.h @@ -4,12 +4,12 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Matthias Ettrich * \author John Levon - * \author André Pönitz + * \author André Pönitz * \author Dekel Tsur - * \author Jürgen Vigna + * \author Jürgen Vigna * * Full author contact details are available in file CREDITS. */ @@ -17,29 +17,33 @@ #ifndef CURSORSLICE_H #define CURSORSLICE_H -#include "insets/InsetBase.h" #include "support/types.h" - -#include -#include +#include "support/strfwd.h" +#include "insets/Inset.h" namespace lyx { -class InsetBase; -class MathArray; -class LyXText; +class Inset; +class MathData; +class Text; class Paragraph; /// This encapsulates a single slice of a document iterator as used e.g. /// for cursors. // After IU, the distinction of MathInset and InsetOld as well as -// that of MathArray and LyXText should vanish. They are conceptually the +// that of MathData and Text should vanish. They are conceptually the // same (now...) class CursorSlice { public: + /// \name Those needs inset_ access. + //@{ + friend class DocIterator; + friend class StableDocIterator; + //@} + /// type for cell number in inset typedef size_t idx_type; /// type for row indices @@ -50,10 +54,19 @@ public: /// CursorSlice(); /// - explicit CursorSlice(InsetBase &); + explicit CursorSlice(Inset &); + + /// \name Comparison operators. + //@{ + friend bool operator==(CursorSlice const &, CursorSlice const &); + friend bool operator!=(CursorSlice const &, CursorSlice const &); + friend bool operator<(CursorSlice const &, CursorSlice const &); + friend bool operator>(CursorSlice const &, CursorSlice const &); + friend bool operator<=(CursorSlice const &, CursorSlice const &); + //@} /// the current inset - InsetBase & inset() const { return *inset_; } + Inset & inset() const { return *inset_; } /// return the cell this cursor is in idx_type idx() const { return idx_; } /// return the cell this cursor is in @@ -64,6 +77,8 @@ public: pit_type pit() const { return pit_; } /// set the offset of the paragraph this cursor is in pit_type & pit() { return pit_; } + /// return the last paragraph offset within the ParagraphList + pit_type lastpit() const; /// increments the paragraph this cursor is in void incrementPar(); /// decrements the paragraph this cursor is in @@ -95,13 +110,9 @@ public: /// texted specific stuff /// /// 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(); + Text * text() const { return inset_->getText(idx_); } /// paragraph in this cell - Paragraph const & paragraph() const; + Paragraph & paragraph() const; /// /// mathed specific stuff @@ -109,14 +120,28 @@ public: /// returns the owning inset if it is a InsetMath, else 0 InsetMath * asInsetMath() const { return inset_->asInsetMath(); } /// returns cell corresponding to this position - MathArray & cell() const; + MathData & cell() 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_; + /// move to next position + void forwardPos(); + /// move to previous position + void backwardPos(); + /// move to next cell + void forwardIdx(); + /// move to previous cell + void backwardIdx(); + /// are we at the end of this slice + bool at_end() const; + /// are we at the start of this slice + bool at_begin() const; + private: + + /// pointer to 'owning' inset. This is some kind of cache. + Inset * inset_; + /*! * Cell index of a position in this inset. * This is the primary cell information also for grid like insets, @@ -134,23 +159,10 @@ private: idx_type idx_; /// paragraph in this cell (used by texted) pit_type pit_; - /// true if 'pit' was properly initialized - bool pit_valid_; /// position in this cell pos_type pos_; }; -/// test for equality -bool operator==(CursorSlice const &, CursorSlice const &); -/// test for inequality -bool operator!=(CursorSlice const &, CursorSlice const &); -/// test for order -bool operator<(CursorSlice const &, CursorSlice const &); -/// test for order -bool operator>(CursorSlice const &, CursorSlice const &); -/// test for order -bool operator<=(CursorSlice const &, CursorSlice const &); - } // namespace lyx