X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_gridinset.h;h=c6de00adcff413fd495709e0b67bdd85b70abf4e;hb=7cccd80619f757b705ea14020b1fd00043607224;hp=8f555774023302506861063968fcb07d57d677f9;hpb=fda98080ccb5d208bd961fb9f73af578622f7d42;p=lyx.git diff --git a/src/mathed/math_gridinset.h b/src/mathed/math_gridinset.h index 8f55577402..c6de00adcf 100644 --- a/src/mathed/math_gridinset.h +++ b/src/mathed/math_gridinset.h @@ -2,7 +2,9 @@ #ifndef MATH_GRID_H #define MATH_GRID_H -#include "math_inset.h" +#include "math_nestinset.h" +#include "vspace.h" +#include "LString.h" #ifdef __GNUG__ #pragma interface @@ -14,112 +16,150 @@ \author André Pönitz 2001 */ -class MathGridInset : public MathInset { +class MathGridInset : public MathNestInset { /// additional per-row information struct RowInfo { /// RowInfo(); /// - int descent_; - /// - int ascent_; - /// - int offset_; - /// + int skipPixels() const; + /// cached descent + mutable int descent_; + /// cached ascent + mutable int ascent_; + /// cached offset + mutable int offset_; + /// hline abow this row? bool upperline_; - /// + /// hline below this row? bool lowerline_; + /// distance + LyXLength skip_; }; // additional per-row information struct ColInfo { /// ColInfo(); - /// - char h_align_; + /// currently possible: 'l', 'c', 'r' + char align_; /// cache for drawing int h_offset; - /// - int width_; - /// - int offset_; - /// + /// cached width + mutable int width_; + /// cached offset + mutable int offset_; + /// do we need a line to the left? bool leftline_; - /// + /// do we need a line to the right? bool rightline_; + /// additional amount to be skipped when drawing + int skip_; }; public: + /// Note: columns first! + MathGridInset(col_type m, row_type n); /// - MathGridInset(int m, int n, string const & nm, MathInsetTypes ot); + MathGridInset(int m, int n, char valign, string const & halign); /// - virtual MathInset * clone() const = 0; + void write(MathWriteInfo & os) const; /// - void write(std::ostream &, bool fragile) const; + void writeNormal(std::ostream &) const; /// - void metrics(MathStyles st); + void metrics(MathMetricsInfo const & st) const; /// - void draw(Painter &, int, int); + void draw(Painter &, int x, int y) const; /// void halign(string const &); /// - void halign(char c, int col); + void halign(char c, col_type col); /// - char halign(int col) const; + char halign(col_type col) const; /// void valign(char c); /// char valign() const; /// - void resize(short int type, int cols); + void vskip(LyXLength const &, row_type row); + /// + LyXLength vskip(row_type row) const; /// - const RowInfo & rowinfo(int row) const; + void resize(short int type, col_type cols); /// - RowInfo & rowinfo(int row); + const RowInfo & rowinfo(row_type row) const; + /// + RowInfo & rowinfo(row_type row); + /// identifies GridInset + virtual MathGridInset * asGridInset() { return this; } /// - int ncols() const { return colinfo_.size(); } + col_type ncols() const { return colinfo_.size(); } + /// + row_type nrows() const { return rowinfo_.size(); } /// - int nrows() const { return rowinfo_.size(); } + col_type col(idx_type idx) const { return idx % ncols(); } /// - int col(int idx) const { return idx % ncols(); } + row_type row(idx_type idx) const { return idx / ncols(); } /// - int row(int idx) const { return idx / ncols(); } + int cellXOffset(idx_type idx) const; + /// + int cellYOffset(idx_type idx) const; /// - bool idxUp(int &, int &) const; + bool idxUp(idx_type &, pos_type &) const; + /// + bool idxDown(idx_type &, pos_type &) const; + /// + bool idxLeft(idx_type &, pos_type &) const; /// - bool idxDown(int &, int &) const; + bool idxRight(idx_type &, pos_type &) const; /// - bool idxLeft(int &, int &) const; + bool idxFirst(idx_type &, pos_type &) const; /// - bool idxRight(int &, int &) const; + bool idxLast(idx_type &, pos_type &) const; /// - bool idxFirst(int &, int &) const; + bool idxHome(idx_type &, pos_type &) const; /// - bool idxLast(int &, int &) const; + bool idxEnd(idx_type &, pos_type &) const; /// - void idxDelete(int &, bool &, bool &); + void idxDelete(idx_type &, bool &, bool &); /// - void idxDeleteRange(int, int); + void idxDeleteRange(idx_type, idx_type); /// - void addRow(int); + void addRow(row_type); /// - void delRow(int); + void delRow(row_type); /// - void addCol(int); + void addCol(col_type); /// - void delCol(int); + void delCol(col_type); /// virtual void appendRow(); /// - int index(int row, int col) const; + idx_type index(row_type row, col_type col) const; + /// + std::vector idxBetween(idx_type from, idx_type to) const; + /// + virtual int defaultColSpace(col_type) { return 10; } /// - std::vector idxBetween(int from, int to) const; + virtual char defaultColAlign(col_type) { return 'c'; } + /// + void setDefaults(); + + /// + void octavize(OctaveStream &) const; + /// + void maplize(MapleStream &) const; protected: + /// returns proper 'end of line' code for LaTeX + string eolString(row_type row) const; + /// returns proper 'end of column' code for LaTeX + string eocString(col_type col) const; + /// row info std::vector rowinfo_; /// column info