X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_hullinset.C;h=4926e1456eeaf65ee99c3adcc6538477eac9a3bc;hb=69bee02a8901793b34ac5ca6d07e93910cef4005;hp=5c376e051cd86f9c1f25f75adf46bb28d2af8fe1;hpb=20ae33cb2a31cd79ccaab684dfbf70c733745e57;p=lyx.git diff --git a/src/mathed/math_hullinset.C b/src/mathed/math_hullinset.C index 5c376e051c..4926e1456e 100644 --- a/src/mathed/math_hullinset.C +++ b/src/mathed/math_hullinset.C @@ -18,6 +18,7 @@ #include "math_extern.h" #include "math_charinset.h" #include "textpainter.h" +#include "dispatchresult.h" #include "debug.h" #include "funcrequest.h" #include "gettext.h" @@ -35,6 +36,7 @@ using lyx::support::trim; using std::endl; using std::max; +using std::string; using std::auto_ptr; using std::istringstream; using std::ostringstream; @@ -133,18 +135,20 @@ MathInset::mode_type MathHullInset::currentMode() const } -bool MathHullInset::idxFirst(idx_type & idx, pos_type & pos) const +bool MathHullInset::idxFirst(BufferView & bv) const { - idx = 0; - pos = 0; + CursorSlice & cur = cursorTip(bv); + cur.idx() = 0; + cur.pos() = 0; return true; } -bool MathHullInset::idxLast(idx_type & idx, pos_type & pos) const +bool MathHullInset::idxLast(BufferView & bv) const { - idx = nargs() - 1; - pos = cell(idx).size(); + CursorSlice & cur = cursorTip(bv); + cur.idx() = nargs() - 1; + cur.pos() = cur.lastpos(); return true; } @@ -509,7 +513,7 @@ void MathHullInset::setType(string const & type) void MathHullInset::mutate(string const & newtype) { - //lyxerr << "mutating from '" << type_ << "' to '" << newtype << "'" << endl; + lyxerr << "mutating from '" << type_ << "' to '" << newtype << "'" << endl; // we try to move along the chain // none <-> simple <-> equation <-> eqnarray @@ -692,9 +696,9 @@ void MathHullInset::check() const } -void MathHullInset::doExtern - (FuncRequest const & func, idx_type & idx, pos_type & pos) +void MathHullInset::doExtern(FuncRequest const & func, BufferView & bv) { + CursorSlice & cur = cursorTip(bv); string lang; string extra; istringstream iss(func.argument.c_str()); @@ -717,72 +721,75 @@ void MathHullInset::doExtern eq.push_back(MathAtom(new MathCharInset('='))); // go to first item in line - idx -= idx % ncols(); - pos = 0; + cur.idx() -= cur.idx() % ncols(); + cur.pos() = 0; if (getType() == "simple") { - size_type pos = cell(idx).find_last(eq); + size_type pos = cur.cell().find_last(eq); MathArray ar; if (mathcursor && mathcursor->selection()) { - asArray(mathcursor->grabAndEraseSelection(), ar); - } else if (pos == cell(idx).size()) { - ar = cell(idx); + asArray(mathcursor->grabAndEraseSelection(bv), ar); + } else if (pos == cur.cell().size()) { + ar = cur.cell(); lyxerr << "use whole cell: " << ar << endl; } else { - ar = MathArray(cell(idx).begin() + pos + 1, cell(idx).end()); + ar = MathArray(cur.cell().begin() + pos + 1, cur.cell().end()); lyxerr << "use partial cell form pos: " << pos << endl; } - cell(idx).append(eq); - cell(idx).append(pipeThroughExtern(lang, extra, ar)); - pos = cell(idx).size(); + cur.cell().append(eq); + cur.cell().append(pipeThroughExtern(lang, extra, ar)); + cur.pos() = cur.lastpos(); return; } if (getType() == "equation") { lyxerr << "use equation inset" << endl; mutate("eqnarray"); - MathArray & ar = cell(idx); + MathArray & ar = cur.cell(); lyxerr << "use cell: " << ar << endl; - cell(idx + 1) = eq; - cell(idx + 2) = pipeThroughExtern(lang, extra, ar); + ++cur.idx(); + cur.cell() = eq; + ++cur.idx(); + cur.cell() = pipeThroughExtern(lang, extra, ar); // move to end of line - idx += 2; - pos = cell(idx).size(); + cur.pos() = cur.lastpos(); return; } { lyxerr << "use eqnarray" << endl; - idx -= idx % ncols(); - idx += 2; - pos = 0; - MathArray ar = cell(idx); + cur.idx() += 2 - cur.idx() % ncols(); + cur.pos() = 0; + MathArray ar = cur.cell(); lyxerr << "use cell: " << ar << endl; #ifdef WITH_WARNINGS #warning temporarily disabled #endif - addRow(row(idx)); - cell(idx + 2) = eq; - cell(idx + 3) = pipeThroughExtern(lang, extra, ar); - idx += 3; - pos = cell(idx).size(); + addRow(cur.row()); + ++cur.idx(); + ++cur.idx(); + cur.cell() = eq; + ++cur.idx(); + cur.cell() = pipeThroughExtern(lang, extra, ar); + cur.pos() = cur.lastpos(); } } -dispatch_result MathHullInset::dispatch - (FuncRequest const & cmd, idx_type & idx, pos_type & pos) +DispatchResult +MathHullInset::priv_dispatch(BufferView & bv, FuncRequest const & cmd) { + CursorSlice & cur = cursorTip(bv); switch (cmd.action) { case LFUN_BREAKLINE: if (type_ == "simple" || type_ == "equation") { mutate("eqnarray"); - idx = 1; - pos = 0; - return DISPATCHED_POP; + cur.idx() = 1; + cur.pos() = 0; + return DispatchResult(true, FINISHED); } - return MathGridInset::dispatch(cmd, idx, pos); + return MathGridInset::priv_dispatch(bv, cmd); case LFUN_MATH_NUMBER: //lyxerr << "toggling all numbers" << endl; @@ -796,20 +803,20 @@ dispatch_result MathHullInset::dispatch numbered(row, !old); //bv->owner()->message(old ? _("No number") : _("Number")); } - return DISPATCHED; + return DispatchResult(true, true); case LFUN_MATH_NONUMBER: if (display()) { - row_type r = (type_ == "multline") ? nrows() - 1 : row(idx); + row_type r = (type_ == "multline") ? nrows() - 1 : cur.row(); //recordUndo(bv, Undo::INSERT); bool old = numbered(r); //bv->owner()->message(old ? _("No number") : _("Number")); numbered(r, !old); } - return DISPATCHED; + return DispatchResult(true, true); case LFUN_INSERT_LABEL: { - row_type r = (type_ == "multline") ? nrows() - 1 : row(idx); + row_type r = (type_ == "multline") ? nrows() - 1 : cur.row(); string old_label = label(r); string new_label = cmd.argument; @@ -820,7 +827,7 @@ dispatch_result MathHullInset::dispatch ? Alert::askForText(_("Enter new label to insert:"), default_label) : Alert::askForText(_("Enter label:"), old_label); if (!res.first) - return UNDISPATCHED; + return DispatchResult(false); new_label = trim(res.second); } @@ -830,34 +837,35 @@ dispatch_result MathHullInset::dispatch if (!new_label.empty()) numbered(r, true); label(r, new_label); - return DISPATCHED; + return DispatchResult(true, true); } case LFUN_MATH_EXTERN: - doExtern(cmd, idx, pos); - return DISPATCHED_POP; + doExtern(cmd, bv); + return DispatchResult(true, FINISHED); case LFUN_MATH_MUTATE: { - row_type r = row(idx); - col_type c = col(idx); + lyxerr << "Hull: MUTATE: " << cmd.argument << endl; + row_type r = cur.row(); + col_type c = cur.col(); mutate(cmd.argument); - idx = r * ncols() + c; - if (idx >= nargs()) - idx = nargs() - 1; - if (pos > cell(idx).size()) - pos = cell(idx).size(); - return DISPATCHED_POP; + cur.idx() = r * ncols() + c; + if (cur.idx() >= nargs()) + cur.idx() = nargs() - 1; + if (cur.pos() > cur.lastpos()) + cur.pos() = cur.lastpos(); + return DispatchResult(true, FINISHED); } case LFUN_MATH_DISPLAY: { mutate(type_ == "simple" ? "equation" : "simple"); - idx = 0; - pos = cell(idx).size(); - return DISPATCHED_POP; + cur.idx() = 0; + cur.pos() = cur.lastpos(); + return DispatchResult(true, FINISHED); } default: - return MathGridInset::dispatch(cmd, idx, pos); + return MathGridInset::priv_dispatch(bv, cmd); } }