#include "support/lstrings.h"
#include "support/LAssert.h"
+#include "support/limited_stack.h"
#include "debug.h"
#include "frontends/Painter.h"
#include "math_cursor.h"
// matheds own cut buffer
-string theCutBuffer;
+limited_stack<string> theCutBuffer;
MathCursor::MathCursor(InsetFormulaBase * formula, bool front)
bool MathCursor::popLeft()
{
- //cerr << "Leaving atom to the left\n";
+ //lyxerr << "Leaving atom to the left\n";
if (depth() <= 1) {
if (depth() == 1)
par()->notifyCursorLeaves(idx());
bool MathCursor::popRight()
{
- //cerr << "Leaving atom "; par()->write(cerr, false); cerr << " right\n";
+ //lyxerr << "Leaving atom "; par()->write(cerr, false); cerr << " right\n";
if (depth() <= 1) {
if (depth() == 1)
par()->notifyCursorLeaves(idx());
}
if (pos() == 0) {
- if (par()->ncols() == 1 && par()->nrows() == 1 && depth() == 1 && size() == 0)
+ if (par()->ncols() == 1 &&
+ par()->nrows() == 1 &&
+ depth() == 1 &&
+ size() == 0)
return false;
- else{
- pullArg();
- return true;
- }
+ pullArg();
+ return true;
}
if (inMacroMode()) {
--pos();
plainErase();
- return true;
+ return true;
}
{
dump("selCopy");
if (selection_) {
- theCutBuffer = grabSelection();
+ theCutBuffer.push(grabSelection());
selection_ = false;
} else {
- theCutBuffer.erase();
+ //theCutBuffer.erase();
}
}
void MathCursor::selCut()
{
dump("selCut");
- theCutBuffer = grabAndEraseSelection();
+ theCutBuffer.push(grabAndEraseSelection());
}
}
-void MathCursor::selPaste()
+void MathCursor::selPaste(int n)
{
dump("selPaste");
selClearOrDel();
- paste(theCutBuffer);
+ if (n < theCutBuffer.size())
+ paste(theCutBuffer[n]);
//grabSelection();
selection_ = false;
}
}
-void MathCursor::drawSelection(MathPainterInfo & pi) const
+void MathCursor::drawSelection(PainterInfo & pi) const
{
if (!selection_)
return;
}
}
- // try current cell
+ // try current cell for e.g. text insets
+ if (par()->idxUpDown2(idx(), pos(), up, targetx_))
+ return true;
+
//xarray().boundingBox(xlow, xhigh, ylow, yhigh);
//if (up)
// yhigh = yo - 4;
it.back().getPos(xo, yo);
if (xlow <= xo && xo <= xhigh && ylow <= yo && yo <= yhigh) {
double d = (x - xo) * (x - xo) + (y - yo) * (y - yo);
+ //lyxerr << "x: " << x << " y: " << y << " d: " << endl;
// '<=' in order to take the last possible position
// this is important for clicking behind \sum in e.g. '\sum_i a'
if (d <= best_dist) {
it.back().setPos(0);
MathIterator et = Cursor_;
et.back().setPos(it.cell().size());
- while (1) {
+ for (int i = 0; ; ++i) {
int xo, yo;
it.back().getPos(xo, yo);
double d = (x - xo) * (x - xo) + (y - yo) * (y - yo);
// '<=' in order to take the last possible position
// this is important for clicking behind \sum in e.g. '\sum_i a'
+ lyxerr << "i: " << i << " d: " << d << " best: " << best_dist << endl;
if (d <= best_dist) {
best_dist = d;
Cursor_ = it;
return pos() != size();
}
- if (c == '#') {
- insert(c);
- return true;
- }
-
- if (c == '{' || c == '}') {
- niceInsert(createMathInset(string(1, c)));
- return true;
- }
-
- if (c == '$') {
- insert(createMathInset("$"));
+ if (c == '{' || c == '}' || c == '#' || c == '&' || c == '$') {
+ createMathInset(string(1, c));
return true;
}