#include "math_data.h"
#include "math_mathmlstream.h"
#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 "LColor.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 const & 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();
- cur.dispatched(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() != 0)
+ } else if (cur.idx() % cur.ncols() != 0) {
+ cur.idx() -= cur.idx() % cur.ncols();
+ cur.pos() = 0;
+ } else if (cur.idx() != 0) {
cur.idx() = 0;
- else
- cur.dispatched(FINISHED_LEFT);
+ 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.dispatched(FINISHED_RIGHT);
+ cur.pos() = cur.lastpos();
+ } else {
+ cmd = FuncRequest(LFUN_FINISHED_RIGHT);
+ }
break;
default:
- MathNestInset::priv_dispatch(cur, cmd);
- return;
+ MathNestInset::doDispatch(cur, cmd);
+ }
+}
+
+
+bool MathGridInset::getStatus(LCursor & cur, FuncRequest const & cmd,
+ FuncStatus & flag) const
+{
+ bool ret = true;
+ switch (cmd.action) {
+ case LFUN_TABULAR_FEATURE:
+#if 0
+ // should be more precise
+ if (v_align_ == '\0') {
+ flag.enable(true);
+ break;
+ }
+ if (cmd.argument.empty()) {
+ flag.enable(false);
+ break;
+ }
+ if (!contains("tcb", cmd.argument[0])) {
+ flag.enable(false);
+ break;
+ }
+ flag.setOnOff(cmd.argument[0] == v_align_);
+#endif
+ flag.enabled(true);
+ break;
+ default:
+ ret = MathNestInset::getStatus(cur, cmd, flag);
+ break;
}
+ return ret;
}