X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_inset.h;h=bd97f31d3375a9d0d950336ef4d9642296ad447c;hb=51e0c8bd1f265913a64fb46bc61fcfdb26f02303;hp=f83a2e934e2dd69905b1ce950bfafeb5f7070ddc;hpb=47b341b9963935f5421661109b497d671f21a885;p=lyx.git diff --git a/src/mathed/math_inset.h b/src/mathed/math_inset.h index f83a2e934e..bd97f31d33 100644 --- a/src/mathed/math_inset.h +++ b/src/mathed/math_inset.h @@ -10,17 +10,19 @@ * * Copyright: 1996, 1997 Alejandro Aguilar Sierra * - * Version: 0.8beta, Mathed & Lyx project. + * Version: 0.8beta, Math & Lyx project. * * You are free to use and modify this code under the terms of * the GNU General Public Licence version 2 or later. */ -// Note: These math insets are internal to Mathed and are not derived +// Note: These math insets are internal to Math and are not derived // from lyx inset. -#ifndef MATH_INSET -#define MATH_INSET +#ifndef MATH_INSET_H +#define MATH_INSET_H + +#include #ifdef __GNUG__ #pragma interface @@ -28,95 +30,200 @@ #include "LString.h" #include "symbol_def.h" - -class Painter; -class MathMacro; +#include "xarray.h" /** Abstract base class for all math objects. A math insets is for use of the math editor only, it isn't a general LyX inset. It's used to represent all the math objects. The formulaInset (a LyX inset) encapsulates a math inset. */ -class MathedInset { + + +class LaTeXFeatures; + +class MathInset { public: - /** A math inset has a name (usually its LaTeX name), - type and font-size - */ - MathedInset(string const & nm, short ot, short st); - /// The virtual base destructor - virtual ~MathedInset() {} - /// Draw the object + /// + explicit MathInset(string const & nm = string()); + + /// the virtual base destructor + virtual ~MathInset() {} + + /// draw the object, sets xo_ and yo_ cached values virtual void draw(Painter &, int x, int baseline) = 0; - /// Write LaTeX and Lyx code - virtual void Write(std::ostream &, bool fragile) = 0; - /// Write normalized content - virtual void WriteNormal(std::ostream &) = 0; - /// Reproduces itself - virtual MathedInset * Clone() = 0; - /// Reproduces itself with macro arguments substituted - virtual void substitute(MathMacro * macro); - /// Compute the size of the object - virtual void Metrics() = 0; + /// write LaTeX and Lyx code + virtual void write(std::ostream &, bool fragile) const = 0; + /// write normalized content + virtual void writeNormal(std::ostream &) const; + /// reproduce itself + virtual MathInset * clone() const = 0; + /// 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; /// - virtual int Ascent() const; + virtual int ascent() const; /// - virtual int Descent() const; + virtual int descent() const; /// - virtual int Width() const; + virtual int width() const; /// - virtual int Height() const; + virtual int height() const; /// - virtual bool GetLimits() const; + string const & name() const; /// - virtual void SetLimits(bool); + virtual void setName(string const & n); /// - string const & GetName() const; + virtual MathStyles size() const; + + /// Where should we go when we press the up cursor key? + virtual bool idxUp(int & idx, int & pos) const; + /// The down key + virtual bool idxDown(int & idx, int & pos) const; + /// 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 left by pressing "Up" + virtual bool idxFirstUp(int & idx, int & pos) const; + /// Target pos when we enter the inset from the left by pressing "Down" + virtual bool idxFirstDown(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; + /// Target pos when we enter the inset from the right by pressing "Up" + virtual bool idxLastUp(int & idx, int & pos) const; + /// Target pos when we enter the inset from the right by pressing "Down" + virtual bool idxLastDown(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; + + /// Delete a cell and move cursor + // the return value indicates whether the cursor should leave the inset + // and/or the whole inset should be deleted + virtual void idxDelete(int & idx, bool & popit, bool & deleteit); + // deletes a cell range and moves the cursor + virtual void idxDeleteRange(int from, int to); + // returns list of cell indices that are "between" from and to for + // selection purposes + virtual std::vector idxBetween(int from, int to) const; + /// - short GetType() const; + virtual int nargs() const; + /// - short GetStyle() const; - //Man: Avoid to use these functions if it's not strictly necessary + virtual MathArray & cell(int); /// - virtual void SetType(short t); + virtual MathArray const & cell(int) const; /// - virtual void SetStyle(short st); + virtual MathXArray & xcell(int); /// - virtual void SetName(string const & n); + virtual MathXArray const & xcell(int) const; + /// - static int workWidth; + virtual int xo() const; /// - static void defaultAscent(int da); + virtual int yo() const; /// - static void defaultDescent(int dd); + virtual void xo(int tx); /// - static void defaultWidth(int dw); + virtual void yo(int ty); /// - short size() const; -protected: + /// - string name; + virtual int ncols() const { return 1; } /// - short objtype; + virtual int nrows() const { return 1; } /// - int width; + virtual int col(int) const { return 0; } /// - int ascent; + virtual int row(int) const { return 0; } /// - int descent; - /// Default metrics - static int df_asc; + virtual void addRow(int) {} /// - static int df_des; + virtual void delRow(int) {} /// - static int df_width; - /// In a near future maybe we use a better fonts renderer than X - void drawStr(Painter &, short, int, int, int, string const &); + virtual void addCol(int) {} /// - void size(short s); + virtual void delCol(int) {} + /// - void incSize(); -private: + virtual void userSetSize(MathStyles &) {} + + /// + virtual void getXY(int & x, int & y) const; + /// + virtual bool covers(int x, int y) const; + /// identifies things that can get scripts + virtual bool isScriptable() const { return false; } + /// identifies ScriptInsets + virtual bool isScriptInset() const { return false; } + /// identifies SpaceInsets + virtual bool isSpaceInset() const { return false; } + /// identifies GridInsets + virtual bool isGrid() const { return false; } + /// identifies ArrayInsets + virtual bool isArray() const { return false; } + /// identifies Charinsets + virtual bool isCharInset() const { return false; } + /// + virtual bool isActive() const { return nargs() > 0; } + /// + virtual char getChar() const { return 0; } + + /// + virtual void push_back(MathInset *); + /// + virtual void push_back(unsigned char ch, MathTextCodes fcode); + /// + virtual void dump() const; + + /// + virtual void validate(LaTeXFeatures & features) const; + + /// + static int workwidth; + + /// the inherited text style + virtual MathTextCodes code() const; + /// + virtual void code(MathTextCodes t); + +protected: + /// usually the LaTeX name of the thingy + string name_; + /// the width of this inset as computed by metrics() + int width_; + /// + int ascent_; /// - short size_; + int descent_; + /// + void size(MathStyles s); + /// the used font size + MathStyles size_; + /// the inherited text style + MathTextCodes code_; + +private: + /// the following are used for positioning the cursor with the mouse + /// cached cursor start position in pixels from the document left + int xo_; + /// cached cursor start position in pixels from the document top + int yo_; }; + +std::ostream & operator<<(std::ostream &, MathInset const &); + #endif