Fix the assert when copying rows or columns in math.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10114 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Martin Vermeer 2005-06-30 18:02:39 +00:00
parent 58f654142c
commit 883decc7da
5 changed files with 51 additions and 15 deletions

View File

@ -1,3 +1,9 @@
2005-06-29 Martin Vermeer <martin.vermeer@hut.fi>
* cursor_slice.h:
* dociterator.h: Fix the assert when copying rows/cols in math
2005-06-25 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* BufferView_pimpl.C:

View File

@ -62,6 +62,10 @@ public:
idx_type idx() const { return idx_; }
/// return the cell this cursor is in
idx_type & idx() { return idx_; }
/// Save current cursor idx as row, col
void idxSave() { col_ = idx_ % ncols(); row_ = idx_ / ncols(); }
/// update idx to correspond to row, col
void idxLoad() { idx_ = col_ + ncols() * row_; }
/// return the last cell in this inset
idx_type lastidx() const { return nargs() - 1; }
/// return the offset of the paragraph this cursor is in
@ -70,7 +74,7 @@ public:
pit_type & pit() { return pit_; }
/// increments the paragraph this cursor is in
void incrementPar();
/// increments the paragraph this cursor is in
/// decrements the paragraph this cursor is in
void decrementPar();
/// return the position within the paragraph
pos_type pos() const { return pos_; }
@ -80,13 +84,13 @@ public:
pos_type lastpos() const;
/// return the number of embedded cells
size_t nargs() const;
/// return the number of embedded cells
/// return the number of columns
size_t ncols() const;
/// return the number of embedded cells
/// return the number of rows
size_t nrows() const;
/// return the grid row of the current cell
row_type row() const;
/// return the grid row of the current cell
/// return the grid column of the current cell
col_type col() const;
///
@ -123,6 +127,10 @@ public:
private:
/// cell index of a position in this inset
idx_type idx_;
/// row position in inset
row_type row_;
/// column position in inset
col_type col_;
/// paragraph in this cell (used by texted)
pit_type pit_;
/// true of 'pit' was properly initialized

View File

@ -91,6 +91,10 @@ public:
idx_type idx() const { return top().idx(); }
/// return the cell of the inset this cursor is in
idx_type & idx() { return top().idx(); }
///
void idxSave() { top().idxSave(); }
///
void idxLoad() { top().idxLoad(); }
/// return the last possible cell in this inset
idx_type lastidx() const;
/// return the paragraph this cursor is in

View File

@ -1,3 +1,9 @@
2005-06-29 Martin Vermeer <martin.vermeer@hut.fi>
* math_gridinset.C (doDispatch): fix assert copying row or
column in math
2005-06-24 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* math_nestinset.C (doDispatch): use text font attributes in text mode.

View File

@ -1108,11 +1108,20 @@ void MathGridInset::doDispatch(LCursor & cur, FuncRequest & cmd)
if (cur.idx() > nargs())
cur.idx() -= ncols();
}
else if (s == "copy-row")
else if (s == "copy-row") {
// Here (as later) we save the cursor col/row
// in order to restore it after operation.
cur.idxSave();
for (int i = 0, n = extractInt(is); i < n; ++i)
copyRow(cur.row());
else if (s == "swap-row")
cur.idxLoad();
}
else if (s == "swap-row") {
swapRow(cur.row());
// Trick to suppress same-idx-means-different-cell
// assertion crash:
cur.pos() = 0;
}
else if (s == "add-hline-above")
rowinfo_[cur.row()].lines_++;
else if (s == "add-hline-below")
@ -1123,24 +1132,27 @@ void MathGridInset::doDispatch(LCursor & cur, FuncRequest & cmd)
rowinfo_[cur.row()+1].lines_--;
else if (s == "append-column")
for (int i = 0, n = extractInt(is); i < n; ++i) {
row_type const r = cur.row();
col_type const c = cur.col();
addCol(c);
cur.idx() = index(r, c);
cur.idxSave();
addCol(cur.col());
cur.idxLoad();
}
else if (s == "delete-column")
for (int i = 0, n = extractInt(is); i < n; ++i) {
row_type const r = cur.row();
col_type const c = cur.col();
cur.idxSave();
delCol(col(cur.idx()));
cur.idx() = index(r, c);
cur.idxLoad();
if (cur.idx() > nargs())
cur.idx() -= ncols();
}
else if (s == "copy-column")
else if (s == "copy-column") {
cur.idxSave();
copyCol(cur.col());
else if (s == "swap-column")
cur.idxLoad();
}
else if (s == "swap-column") {
swapCol(cur.col());
cur.pos() = 0; // trick, see above
}
else if (s == "add-vline-left")
colinfo_[cur.col()].lines_++;
else if (s == "add-vline-right")