#include <config.h>
#include <lyxrc.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "support/lstrings.h"
#include "support/LAssert.h"
MathCursor::MathCursor(InsetFormulaBase * formula, bool front)
- : formula_(formula), autocorrect_(false), selection_(false)
+ : formula_(formula), autocorrect_(false), selection_(false), targetx_(-1)
{
front ? first() : last();
Anchor_ = Cursor_;
#if FILEDEBUG
void MathCursor::dump(char const * what) const
{
- lyxerr << "MC: " << what << "\n";
- lyxerr << " Cursor: " << depth() << "\n";
+ lyxerr << "MC: " << what << endl;
+ lyxerr << " Cursor: " << depth() << endl;
for (unsigned i = 0; i < depth(); ++i)
- lyxerr << " i: " << i << " " << Cursor_[i] << "\n";
- lyxerr << " Anchor: " << Anchor_.size() << "\n";
+ lyxerr << " i: " << i << ' ' << Cursor_[i] << endl;
+ lyxerr << " Anchor: " << Anchor_.size() << endl;
for (unsigned i = 0; i < Anchor_.size(); ++i)
- lyxerr << " i: " << i << " " << Anchor_[i] << "\n";
- lyxerr << " sel: " << selection_ << "\n";
+ lyxerr << " i: " << i << ' ' << Anchor_[i] << endl;
+ lyxerr << " sel: " << selection_ << endl;
}
#else
void MathCursor::dump(char const *) const {}
}
-void MathCursor::backspace()
+bool MathCursor::backspace()
{
autocorrect_ = false;
if (selection_) {
selDel();
- return;
+ return true;
}
if (pos() == 0) {
- pullArg();
- return;
+ if (par()->ncols() == 1 && par()->nrows() == 1 && depth() == 1 && size() == 0)
+ return false;
+ else{
+ pullArg();
+ return true;
+ }
}
if (inMacroMode()) {
MathUnknownInset * p = activeMacro();
if (p->name().size() > 1) {
p->setName(p->name().substr(0, p->name().size() - 1));
- return;
+ return true;
}
}
--pos();
plainErase();
+ return true;
}
-void MathCursor::erase()
+bool MathCursor::erase()
{
autocorrect_ = false;
if (inMacroMode())
- return;
+ return true;
if (selection_) {
selDel();
- return;
+ return true;
}
// delete empty cells if possible
if (array().empty())
if (par()->idxDelete(idx()))
- return;
+ return true;
// old behaviour when in last position of cell
if (pos() == size()) {
- par()->idxGlue(idx());
- return;
+ if (par()->ncols() == 1 && par()->nrows() == 1 && depth() == 1 && size() == 0)
+ return false;
+ else{
+ par()->idxGlue(idx());
+ return true;
+ }
}
plainErase();
+ return true;
}
{
if (idx() >= par()->nargs()) {
lyxerr << "this should not really happen - 1: "
- << idx() << " " << par()->nargs() << " in: " << par() << "\n";
+ << idx() << ' ' << par()->nargs()
+ << " in: " << par() << endl;
dump("error 2");
}
idx() = min(idx(), par()->nargs() - 1);
if (pos() > size()) {
lyxerr << "this should not really happen - 2: "
- << pos() << " " << size() << " in idx: " << idx()
- << " in atom: '";
+ << pos() << ' ' << size() << " in idx: " << idx()
+ << " in atom: '";
WriteStream wi(lyxerr, false, true);
par()->write(wi);
- lyxerr << "\n";
+ lyxerr << endl;
dump("error 4");
}
pos() = min(pos(), size());
os << " ";
}
if (hasPrevAtom())
- if (prevAtom()->asSymbolInset() || prevAtom()->asScriptInset())
- prevAtom()->infoize(os);
+ prevAtom()->infoize2(os);
os << " ";
return STRCONV(os.str());
}
data += "\\\\";
for (col_type col = c1; col <= c2; ++col) {
if (col > c1)
- data += "&";
+ data += '&';
data += asString(i1.par_->cell(i1.par_->index(row, col)));
}
}
void releaseMathCursor(BufferView * bv)
{
- if (!mathcursor)
- return;
- mathcursor->formula()->hideInsetCursor(bv);
- delete mathcursor;
- mathcursor = 0;
+ if (mathcursor) {
+ InsetFormulaBase * f = mathcursor->formula();
+ f->hideInsetCursor(bv);
+ delete mathcursor;
+ mathcursor = 0;
+ f->insetUnlock(bv);
+ }
}