* This is the base to all grid-like editable math objects
*/
class MathGridInset : public MathNestInset {
-
public:
/// additional per-cell information
- struct CellInfo {
+ class CellInfo {
+ public:
///
CellInfo();
/// a dummy cell before a multicolumn cell
};
/// additional per-row information
- struct RowInfo {
+ class RowInfo {
+ public:
///
RowInfo();
///
/// cached offset
mutable int offset_;
/// how many hlines above this row?
- int lines_;
+ unsigned int lines_;
/// parameter to the line break
LyXLength crskip_;
/// extra distance between lines
};
// additional per-row information
- struct ColInfo {
+ class ColInfo {
+ public:
///
ColInfo();
/// currently possible: 'l', 'c', 'r'
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_;
/// how many lines to the left of this column?
- int lines_;
+ unsigned int lines_;
/// additional amount to be skipped when drawing
int skip_;
};
/// Ensures that the dialog is closed.
~MathGridInset();
///
- virtual std::auto_ptr<InsetBase> clone() const;
- ///
void metrics(MetricsInfo & mi) const;
///
void metrics(MetricsInfo & mi, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
+ void drawWithMargin(PainterInfo & pi, int x, int y,
+ int lmargin = 0, int rmargin = 0) const;
+ ///
void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
///
void drawT(TextPainter & pi, int x, int y) const;
row_type row(idx_type idx) const;
///
- bool idxUpDown(idx_type & idx, pos_type & pos, bool up, int targetx) const;
- ///
- bool idxLeft(idx_type & idx, pos_type & pos) const;
+ bool idxUpDown(LCursor &, bool up) const;
///
- bool idxRight(idx_type & idx, pos_type & pos) const;
+ bool idxLeft(LCursor &) const;
///
- bool idxFirst(idx_type & idx, pos_type & pos) const;
+ bool idxRight(LCursor &) const;
///
- bool idxLast(idx_type & idx, pos_type & pos) const;
+ bool idxFirst(LCursor &) const;
///
- bool idxHome(idx_type & idx, pos_type & pos) const;
- ///
- bool idxEnd(idx_type & idx, pos_type & pos) const;
+ bool idxLast(LCursor &) const;
///
bool idxDelete(idx_type & idx);
/// pulls cell after pressing erase
void idxGlue(idx_type idx);
- ///
+ /// add a row
virtual void addRow(row_type r);
- ///
+ /// delete a row
virtual void delRow(row_type r);
- ///
+ /// copy a row
virtual void copyRow(row_type r);
- ///
+ /// swap two rows
virtual void swapRow(row_type r);
- ///
+ /// add a column
virtual void addCol(col_type c);
- ///
+ /// delete a column
virtual void delCol(col_type c);
- ///
+ /// copy a column
virtual void copyCol(col_type c);
- ///
+ /// swap two columns
virtual void swapCol(col_type c);
///
virtual void appendRow();
//void octave(OctaveStream &) const;
protected:
+ virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
///
- virtual
- DispatchResult
- priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos);
-
+ bool getStatus(LCursor & cur, FuncRequest const & cmd,
+ FuncStatus & flag) const;
/// returns x offset of cell compared to inset
int cellXOffset(idx_type idx) const;
/// returns y offset of cell compared to inset
/// extract number of columns from alignment string
col_type guessColumns(std::string const & halign) const;
/// splits cells and shifts right part to the next cell
- void splitCell(idx_type &, pos_type & pos);
+ void splitCell(LCursor & cur);
public:
- /// row info
+ /// row info.
+ /// rowinfo_[nrows()] is a dummy row used only for hlines.
std::vector<RowInfo> rowinfo_;
- /// column info
+ /// column info.
+ /// colinfo_[ncols()] is a dummy column used only for vlines.
std::vector<ColInfo> colinfo_;
/// cell info
std::vector<CellInfo> cellinfo_;
///
char v_align_; // add approp. type
+private:
+ virtual std::auto_ptr<InsetBase> doClone() const;
};
#endif