5 #include "math_nestinset.h"
13 /** Gridded math inset base class.
14 This is the base to all grid-like editable math objects
15 like array and eqnarray.
16 \author André Pönitz 2001
19 class MathGridInset : public MathNestInset {
21 /// additional per-row information
26 int skipPixels() const;
33 /// hline abow this row?
35 /// hline below this row?
41 // additional per-row information
45 /// currently possible: 'l', 'c', 'r'
53 /// do we need a line to the left?
55 /// do we need a line to the right?
57 /// additional amount to be skipped when drawing
62 /// Note: columns first!
63 MathGridInset(col_type m, row_type n);
65 MathGridInset(int m, int n, char valign, string const & halign);
67 void write(std::ostream &, bool fragile) const;
69 void metrics(MathStyles st) const;
71 void draw(Painter &, int x, int y) const;
73 void halign(string const &);
75 void halign(char c, col_type col);
77 char halign(col_type col) const;
83 void vskip(LyXLength const &, row_type row);
85 LyXLength vskip(row_type row) const;
87 void resize(short int type, col_type cols);
89 const RowInfo & rowinfo(row_type row) const;
91 RowInfo & rowinfo(row_type row);
92 /// identifies GridInset
93 virtual MathGridInset * asGridInset() { return this; }
96 col_type ncols() const { return colinfo_.size(); }
98 row_type nrows() const { return rowinfo_.size(); }
100 col_type col(idx_type idx) const { return idx % ncols(); }
102 row_type row(idx_type idx) const { return idx / ncols(); }
104 int cellXOffset(idx_type idx) const;
106 int cellYOffset(idx_type idx) const;
109 bool idxUp(idx_type &, pos_type &) const;
111 bool idxDown(idx_type &, pos_type &) const;
113 bool idxLeft(idx_type &, pos_type &) const;
115 bool idxRight(idx_type &, pos_type &) const;
117 bool idxFirst(idx_type &, pos_type &) const;
119 bool idxLast(idx_type &, pos_type &) const;
121 void idxDelete(idx_type &, bool &, bool &);
123 void idxDeleteRange(idx_type, idx_type);
126 void addRow(row_type);
128 void delRow(row_type);
130 void addCol(col_type);
132 void delCol(col_type);
134 virtual void appendRow();
136 idx_type index(row_type row, col_type col) const;
138 std::vector<idx_type> idxBetween(idx_type from, idx_type to) const;
140 virtual int defaultColSpace(col_type) { return 10; }
142 virtual char defaultColAlign(col_type) { return 'c'; }
147 /// returns proper 'end of line' code for LaTeX
148 string eolString(row_type row) const;
149 /// returns proper 'end of column' code for LaTeX
150 string eocString(col_type col) const;
153 std::vector<RowInfo> rowinfo_;
155 std::vector<ColInfo> colinfo_;
157 char v_align_; // add approp. type