#include "math_streamstr.h"
#include "BufferView.h"
+#include "CutAndPaste.h"
#include "FuncStatus.h"
#include "LColor.h"
#include "cursor.h"
#include "debug.h"
#include "funcrequest.h"
+#include "undo.h"
#include "frontends/Painter.h"
-#include "support/std_sstream.h"
-
#include "insets/mailinset.h"
+#include <sstream>
+
using std::endl;
using std::max;
using std::min;
}
-auto_ptr<InsetBase> MathGridInset::clone() const
+auto_ptr<InsetBase> MathGridInset::doClone() const
{
return auto_ptr<InsetBase>(new MathGridInset(*this));
}
cxrow->setBaseline(cxrow->getBaseline() - ascent);
}
*/
+ metricsMarkers2(dim_);
}
xx, y + dim_.descent() - 1,
LColor::foreground);
}
+ drawMarkers2(pi, x, y);
}
}
-void MathGridInset::priv_dispatch(LCursor & cur, FuncRequest & cmd)
+void MathGridInset::doDispatch(LCursor & cur, FuncRequest & cmd)
{
//lyxerr << "*** MathGridInset: request: " << cmd << endl;
switch (cmd.action) {
// GridInsetMailer(*this).showDialog();
// return DispatchResult(true, true);
//}
- MathNestInset::priv_dispatch(cur, cmd);
- return;
+ MathNestInset::doDispatch(cur, cmd);
+ break;
case LFUN_INSET_DIALOG_UPDATE:
GridInsetMailer(*this).updateDialog(&cur.bv());
- return;
+ break;
// insert file functions
case LFUN_DELETE_LINE_FORWARD:
+ recordUndo(cur);
//autocorrect_ = false;
//macroModeClose();
//if (selection_) {
// selDel();
- // return;
+ // break;
//}
if (nrows() > 1)
delRow(cur.row());
cur.idx() = cur.lastidx();
if (cur.pos() > cur.lastpos())
cur.pos() = cur.lastpos();
- return;
+ break;
case LFUN_CELL_SPLIT:
- ////recordUndo(cur, Undo::ATOMIC);
+ recordUndo(cur);
splitCell(cur);
- return;
+ break;
case LFUN_BREAKLINE: {
- ////recordUndo(cur, Undo::INSERT);
+ recordUndo(cur);
row_type const r = cur.row();
addRow(r);
swap(cell(cur.idx()), cell(cur.idx() + ncols() - 1));
if (cur.idx() > 0)
--cur.idx();
- cur.idx() = cur.lastpos();
+ cur.pos() = cur.lastpos();
//mathcursor->normalize();
- cmd = FuncRequest(LFUN_FINISHED_LEFT);
- return;
+ //cmd = FuncRequest(LFUN_FINISHED_LEFT);
+ break;
}
case LFUN_TABULAR_FEATURE: {
+ recordUndo(cur);
//lyxerr << "handling tabular-feature " << cmd.argument << endl;
istringstream is(cmd.argument);
string s;
swapCol(col(cur.idx()));
else {
cur.undispatched();
- return;
+ break;
}
lyxerr << "returning FINISHED_LEFT" << endl;
- return;
+ break;
}
case LFUN_PASTE: {
- //lyxerr << "pasting '" << cmd.argument << "'" << endl;
+ recordUndo(cur);
+ lyxerr << "MathGridInset: PASTE: " << cmd << std::endl;
+ istringstream is(cmd.argument);
+ int n = 0;
+ is >> n;
MathGridInset grid(1, 1);
- mathed_parse_normal(grid, cmd.argument);
+ mathed_parse_normal(grid, lyx::cap::getSelection(cur.buffer(), n));
if (grid.nargs() == 1) {
// single cell/part of cell
cur.cell().insert(cur.pos(), grid.cell(0));
for (col_type c = 0; c < grid.ncols(); ++c)
cell(i).append(grid.cell(grid.index(r, c)));
}
- return;
+ break;
}
case LFUN_HOMESEL:
case LFUN_WORDLEFT:
cur.selHandle(cmd.action == LFUN_WORDLEFTSEL || cmd.action == LFUN_HOMESEL);
cur.macroModeClose();
- if (cur.pos() != 0)
+ if (cur.pos() != 0) {
+ cur.pos() = 0;
+ } else if (cur.idx() % cur.ncols() != 0) {
+ cur.idx() -= cur.idx() % cur.ncols();
cur.pos() = 0;
- else if (cur.idx() != 0)
+ } else if (cur.idx() != 0) {
cur.idx() = 0;
- else
+ cur.pos() = 0;
+ } else {
cmd = FuncRequest(LFUN_FINISHED_LEFT);
+ }
break;
case LFUN_WORDRIGHTSEL:
cur.selHandle(cmd.action == LFUN_WORDRIGHTSEL || cmd.action == LFUN_ENDSEL);
cur.macroModeClose();
cur.clearTargetX();
- if (cur.pos() != cur.lastpos())
+ if (cur.pos() != cur.lastpos()) {
+ cur.pos() = cur.lastpos();
+ } else if ((cur.idx() + 1) % cur.ncols() != 0) {
+ cur.idx() += cur.ncols() - 1 - cur.idx() % cur.ncols();
cur.pos() = cur.lastpos();
- else if (cur.idx() != cur.lastidx())
+ } else if (cur.idx() != cur.lastidx()) {
cur.idx() = cur.lastidx();
- else
+ cur.pos() = cur.lastpos();
+ } else {
cmd = FuncRequest(LFUN_FINISHED_RIGHT);
+ }
break;
default:
- MathNestInset::priv_dispatch(cur, cmd);
+ MathNestInset::doDispatch(cur, cmd);
}
}