X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_nestinset.h;h=dda150a6dbd282394c9db5e78100b38163bc496e;hb=2c30e9b17afc036515a3d23fb657c4f55815d7c5;hp=5cf17786de0f11c708c2817b4efda77840831dc5;hpb=9295f8236e01a5e425d808eb0d2bdd0460d1f423;p=lyx.git diff --git a/src/mathed/math_nestinset.h b/src/mathed/math_nestinset.h index 5cf17786de..dda150a6db 100644 --- a/src/mathed/math_nestinset.h +++ b/src/mathed/math_nestinset.h @@ -1,79 +1,135 @@ +// -*- C++ -*- +/** + * \file math_nestinset.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author André Pönitz + * + * Full author contact details are available in file CREDITS. + */ + #ifndef MATH_NESTINSET_H #define MATH_NESTINSET_H -#ifdef __GNUG__ -#pragma interface -#endif - #include "math_diminset.h" -/** Abstract base class for all math objects that conatin nested items. -*/ - -class LaTeXFeatures; +/** 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 MathNestInset : public MathDimInset { -public: - /// +public: + /// nestinsets have a fixed size to start with explicit MathNestInset(idx_type ncells); - /// - void metrics(MathStyles st) const; - /// draw the object, sets xo_ and yo_ cached values - void draw(Painter &, int x, int y) const; - /// appends itself with macro arguments substituted - void substitute(MathMacro const & macro); + /// the size is usually some sort of convex hull of the cells + /// hides inset::metrics() intentionally! + void metrics(MetricsInfo const & mi) const; + /// draw background if locked + void draw(PainterInfo & pi, int x, int y) const; + /// draw selection background + void drawSelection(PainterInfo & pi, int x, int y) const; /// identifies NestInsets MathNestInset * asNestInset() { return this; } + /// identifies NestInsets + MathNestInset const * asNestInset() const { return this; } + /// get cursor position + void cursorPos(CursorSlice const & sl, bool boundary, int & x, int & y) const; + /// + void edit(LCursor & cur, bool left); + /// + InsetBase * editXY(LCursor & cur, int x, int y); - /// The left key - bool idxLeft(idx_type & idx, pos_type & pos) const; - /// 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; + /// order of movement through the cells when pressing the left key + bool idxLeft(LCursor &) const; + /// order of movement through the cells when pressing the right key + bool idxRight(LCursor &) 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; + /// move one physical cell up + bool idxNext(LCursor &) const; + /// move one physical cell down + bool idxPrev(LCursor &) 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; + /// target pos when we enter the inset from the left by pressing "Right" + bool idxFirst(LCursor &) const; + /// target pos when we enter the inset from the right by pressing "Left" + bool idxLast(LCursor &) 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); + /// get notification when the cursor leaves this inset + void notifyCursorLeaves(LCursor & cur); + + /// direct access to the cell MathArray & cell(idx_type); - /// + /// direct access to the cell MathArray const & cell(idx_type) const; + + /// can we move into this cell (see macroarg.h) + bool isActive() const; + /// request "external features" + void validate(LaTeXFeatures & features) const; + + /// replace in all cells + void replace(ReplaceData &); + /// do we contain a given pattern? + bool contains(MathArray const &) const; + /// glue everything to a single cell + MathArray glue() const; + + /// debug helper + void dump() const; + + /// writes \\, name(), and args in braces and '\\lyxlock' if necessary + void write(WriteStream & os) const; + /// writes [, name(), and args in [] + void normalize(NormalStream & os) const; + /// + int latex(Buffer const &, std::ostream & os, + OutputParams const & runparams) const; + +protected: /// - MathXArray & xcell(idx_type); + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); + /// do we want to handle this event? + bool getStatus(LCursor & cur, FuncRequest const & cmd, + FuncStatus & status) const; /// - MathXArray const & xcell(idx_type) const; - + void handleFont(LCursor & cur, + std::string const & arg, std::string const & font); /// - bool isActive() const { return nargs() > 0; } + void handleFont2(LCursor & cur, std::string const & arg); + /// - void push_back(MathAtom const &); + bool interpret(LCursor & cur, char c); /// - void dump() const; + bool script(LCursor & cur, bool); + +private: + /// lfun handler + void lfunMousePress(LCursor &, FuncRequest &); /// - void validate(LaTeXFeatures & features) const; + void lfunMouseRelease(LCursor &, FuncRequest &); + /// + void lfunMouseMotion(LCursor &, FuncRequest &); protected: - /// - typedef std::vector cells_type; - /// The nested contents of the inset are contained here. + /// we store the cells in a vector + typedef std::vector cells_type; + /// thusly: cells_type cells_; + /// if the inset is locked, it can't be entered with the cursor + bool lock_; + /// + std::string safe_; }; #endif