}
-void MathCursor::seldump(char const *) const
+void MathCursor::seldump(char const * str) const
{
//lyxerr << "SEL: " << str << ": '" << theSelection << "'\n";
//dump(" Pos");
return;
- //lyxerr << "\n\n\\n=================vvvvvvvvvvvvv======================= "
- // << str << "\ntheSelection: " << theSelection;
- //for (unsigned int i = 0; i < Cursor_.size(); ++i)
- // lyxerr << Cursor_[i].par_ << "\n'" << Cursor_[i].cell() << "'\n";
+ lyxerr << "\n\n\n=================vvvvvvvvvvvvv======================= "
+ << str << "\ntheSelection: " << selection_
+ << " '" << theSelection.glue() << "'\n";
+ for (unsigned int i = 0; i < Cursor_.size(); ++i)
+ lyxerr << Cursor_[i].par_ << "\n'" << Cursor_[i].cell() << "'\n";
+ lyxerr << "\n";
+ for (unsigned int i = 0; i < Anchor_.size(); ++i)
+ lyxerr << Anchor_[i].par_ << "\n'" << Anchor_[i].cell() << "'\n";
//lyxerr << "\ncursor.pos_: " << cursor().pos_;
//lyxerr << "\nanchor.pos_: " << anchor().pos_;
- //lyxerr << "\n===================^^^^^^^^^^^^=====================\n\n\n";
+ lyxerr << "\n===================^^^^^^^^^^^^=====================\n\n\n";
}
{
if (!p)
return false;
+
if (!(p->isActive() || (useupdown && p->isScriptInset())))
return false;
}
+void MathCursor::plainRight()
+{
+ ++cursor().pos_;
+}
+
+
bool MathCursor::left(bool sel)
{
dump("Left 1");
}
-void MathCursor::plainRight()
-{
- ++cursor().pos_;
-}
-
-
bool MathCursor::right(bool sel)
{
dump("Right 1");
push(p, true);
return true;
}
- if (array().next(cursor().pos_))
+ if (cursor().pos_ != array().size()) {
+ plainRight();
return true;
- if (cursor().par_->idxRight(cursor().idx_, cursor().pos_))
+ }
+ if (cursor().par_->idxRight(cursor().idx_, cursor().pos_)) {
return true;
- if (!pop())
- return false;
- array().next(cursor().pos_);
- return true;
+ }
+ if (pop()) {
+ plainRight();
+ return true;
+ }
+ return false;
}
}
array().insert(cursor().pos_, c, t);
- ++cursor().pos_;
+ plainRight();
}
}
array().insert(cursor().pos_, p);
- ++cursor().pos_;
+ plainRight();
}
}
// delete empty cells if necessary
- if (cursor().pos_ == 0 && array().size() == 0) {
+ if (cursor().pos_ == 0 && array().empty()) {
bool popit;
bool removeit;
cursor().par_->idxDelete(cursor().idx_, popit, removeit);
p = new MathFuncInset(s);
} else {
switch (l->token) {
- case LM_TK_BIGSYM:
+ case LM_TK_BIGSYM:
p = new MathBigopInset(l);
break;
}
if (p) {
- bool oldsel = selection_;
- if (oldsel)
- selCut();
+ selCut();
insert(p);
if (p->nargs()) {
plainLeft();
right(); // do not push for e.g. MathSymbolInset
- if (oldsel)
- selPaste();
+ selPaste();
}
p->metrics(p->size());
}
theSelection.grab(*this);
theSelection.erase(*this);
selClear();
+ } else {
+ theSelection.clear();
}
}
void MathCursor::selHandle(bool sel)
{
- if (sel && !selection_)
- selStart();
- if (!sel && selection_)
- selClear();
+ if (sel == selection_)
+ return;
+
+ theSelection.clear();
+ Anchor_ = Cursor_;
+ selection_ = sel;
}
if (selection_)
return;
+ theSelection.clear();
Anchor_ = Cursor_;
selection_ = true;
}
void MathCursor::selClear()
{
+ seldump("selClear");
selection_ = false;
}
MathInset * MathCursor::prevInset() const
{
normalize();
- int c = cursor().pos_;
- if (!c)
+ int pos = cursor().pos_;
+ if (!pos)
return 0;
- return array().nextInset(c);
+ return array().nextInset(pos - 1);
}
MathCursorPos normal = Anchor_[Cursor_.size() - 1];
if (Cursor_.size() < Anchor_.size() && !(normal < cursor())) {
// anchor is behind cursor -> move anchor behind the inset
- normal.cell().next(normal.pos_);
+ ++normal.pos_;
}
//lyxerr << "normalizing: from " << Anchor_[Anchor_.size() - 1] << " to "
// << normal << "\n";