X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_nestinset.h;h=64caa87a8e1124ceae9228e63923affec1c66bbd;hb=c649284611c4198c9d70be8a16d153cdf1ec0700;hp=114b7994de7cd42b0e296579ffbef728b6c887b3;hpb=51e0c8bd1f265913a64fb46bc61fcfdb26f02303;p=lyx.git diff --git a/src/mathed/math_nestinset.h b/src/mathed/math_nestinset.h index 114b7994de..64caa87a8e 100644 --- a/src/mathed/math_nestinset.h +++ b/src/mathed/math_nestinset.h @@ -5,75 +5,94 @@ #pragma interface #endif -#include "math_inset.h" +#include "math_diminset.h" -/** Abstract base class for all math objects that conatin nested items. +/** Abstract base class for all math objects that contain nested items. + This is basically everything that is not a single character or a + single symbol. */ class LaTeXFeatures; -class MathNestInset : public MathInset { -public: - /// - explicit MathNestInset(int na = 0, string const & nm = string()); - - /// draw the object, sets xo_ and yo_ cached values - virtual void draw(Painter &, int x, int baseline); +class MathNestInset : public MathDimInset { +public: + /// nestinsets have a fixed size to start with + explicit MathNestInset(idx_type ncells); + + /// the size is usuall some sort of convex hull of the cells + void metrics(MathMetricsInfo const & mi) const; + /// draw background if locked + void draw(MathPainterInfo & pi, int x, int y) const; + /// draw angular markers + void drawMarkers(MathPainterInfo & pi, int x, int y) const; /// appends itself with macro arguments substituted - virtual void substitute(MathArray & array, MathMacro const & macro) const; - /// compute the size of the object, sets ascend_, descend_ and width_ - virtual void metrics(MathStyles st) = 0; - - /// The left key - virtual bool idxLeft(int & idx, int & pos) const; - /// The right key - virtual bool idxRight(int & idx, int & pos) const; - - /// Move one physical cell up - virtual bool idxNext(int & idx, int & pos) const; - /// Move one physical cell down - virtual bool idxPrev(int & idx, int & pos) const; - - /// Target pos when we enter the inset from the left by pressing "Right" - virtual bool idxFirst(int & idx, int & pos) const; - /// Target pos when we enter the inset from the right by pressing "Left" - virtual bool idxLast(int & idx, int & pos) const; - - /// Where should we go if we press home? - virtual bool idxHome(int & idx, int & pos) const; - /// Where should we go if we press end? - virtual bool idxEnd(int & idx, int & pos) const; - - /// - int nargs() const; - - /// - MathArray & cell(int); - /// - MathArray const & cell(int) const; - /// - MathXArray & xcell(int); - /// - MathXArray const & xcell(int) const; - - /// - bool isActive() const { return nargs() > 0; } - /// - void push_back(MathInset *); - /// - void push_back(unsigned char ch, MathTextCodes fcode); - /// - void dump() const; - - /// + void substitute(MathMacro const & macro); + /// identifies NestInsets + MathNestInset * asNestInset() { return this; } + + /// order of movement through the cells when pressing the left key + bool idxLeft(idx_type & idx, pos_type & pos) const; + /// order of movement through the cells when pressing the right key + bool idxRight(idx_type & idx, pos_type & pos) const; + + /// move one physical cell up + bool idxNext(idx_type & idx, pos_type & pos) const; + /// move one physical cell down + bool idxPrev(idx_type & idx, pos_type & pos) const; + + /// target pos when we enter the inset from the left by pressing "Right" + bool idxFirst(idx_type & idx, pos_type & pos) const; + /// target pos when we enter the inset from the right by pressing "Left" + bool idxLast(idx_type & idx, pos_type & pos) const; + + /// where should we go if we press home? + bool idxHome(idx_type & idx, pos_type & pos) const; + /// where should we go if we press end? + bool idxEnd(idx_type & idx, pos_type & pos) const; + + /// number of cells currently governed by us + idx_type nargs() const; + /// access to the lock + bool lock() const; + /// access to the lock + void lock(bool); + + /// direct access to the cell + MathArray & cell(idx_type); + /// direct access to the cell + MathArray const & cell(idx_type) const; + /// direct access to the cell including the drawing cache + MathXArray & xcell(idx_type); + /// direct access to the cell including the drawing cache + MathXArray const & xcell(idx_type) const; + + /// can we move into this cell (see macroarg.h) + bool isActive() const; + /// request "external features" void validate(LaTeXFeatures & features) const; + /// match in all cells + bool match(MathInset *) const; + /// replace in all cells + void replace(ReplaceData &); + /// do we contain a given pattern? + bool contains(MathArray const &); + /// glue everything to a single cell + MathArray glue() const; + + /// debug helper + void dump() const; + /// is the cursor currently somewhere within this inset? + virtual bool editing() const; + protected: - /// + /// we store the cells in a vector typedef std::vector cells_type; - /// The nested contents of the inset are contained here. + /// thusly: cells_type cells_; + /// if the inset is locked, it can't be entered with the cursor + bool lock_; }; #endif