X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_cursor.h;h=fae5867490b95784e71310b1fa48571092feedb2;hb=b54bf51387237b8fd8e9c6064143cff4239c2eec;hp=350de76ad90177b7645a1e3b4236c61d75893d39;hpb=4dd8a4ed0ad7e8ef49b7c40cd96cc6d98b8410f9;p=lyx.git diff --git a/src/mathed/math_cursor.h b/src/mathed/math_cursor.h index 350de76ad9..fae5867490 100644 --- a/src/mathed/math_cursor.h +++ b/src/mathed/math_cursor.h @@ -21,13 +21,14 @@ #pragma interface #endif -#include "math_defs.h" #include "math_inset.h" -#include "math_pos.h" +#include "math_iterator.h" #include "LString.h" class InsetFormulaBase; -class Painter; +class BufferView; +class MathPainterInfo; +class MathUnknownInset; class Selection; /** @@ -35,9 +36,9 @@ class Selection; [Have a look at math_inset.h first] The MathCursor is different from the kind of cursor used in the Outer -World. It contains a stack of MathCursorPositions, each of which is made +World. It contains a stack of MathCursorPos, each of which is made up of a inset pointer, an index and a position offset, marking a path from -this formula's mathHullInset to the current position. +this formula's MathHullInset to the current position. */ @@ -54,25 +55,27 @@ public: typedef MathInset::row_type row_type; /// type for column numbers typedef MathInset::col_type col_type; - /// how to store a cursor - typedef std::vector cursor_type; /// explicit MathCursor(InsetFormulaBase *, bool left); /// + ~MathCursor(); + /// void insert(MathAtom const &); /// void insert(MathArray const &); /// void paste(MathArray const &); /// + void paste(MathGridInset const & data); + /// void erase(); /// void backspace(); /// called for LFUN_HOME etc - void home(bool sel = false); + bool home(bool sel = false); /// called for LFUN_END etc - void end(bool sel = false); + bool end(bool sel = false); /// called for LFUN_RIGHT and LFUN_RIGHTSEL bool right(bool sel = false); /// called for LFUN_LEFT etc @@ -105,11 +108,15 @@ public: /// current inset MathInset * par() const; /// return the next enclosing grid inset and the cursor's index in it - MathGridInset * enclosingGrid(idx_type &) const; - /// return the next enclosing grid inset and the cursor's index in it + MathGridInset * enclosingGrid(idx_type & idx) const; + /// return the next enclosing hull inset and the cursor's index in it + MathHullInset * enclosingHull(idx_type & idx) const; + /// go up to enclosing grid void popToEnclosingGrid(); + /// go up to the hull inset + void popToEnclosingHull(); /// - InsetFormulaBase * formula(); + InsetFormulaBase * formula() const; /// current offset in the current cell pos_type pos() const; /// current cell @@ -120,7 +127,7 @@ public: bool script(bool); /// bool interpret(string const &); - /// + /// bool interpret(char); /// bool toggleLimits(); @@ -128,8 +135,14 @@ public: void macroModeClose(); /// are we currently typing the name of a macro? bool inMacroMode() const; + /// get access to the macro we are currently typing + MathUnknownInset * activeMacro(); + /// get access to the macro we are currently typing + MathUnknownInset const * activeMacro() const; /// are we currently typing '#1' or '#2' or...? bool inMacroArgMode() const; + /// are we in math mode (1), text mode (-1) or unsure? + MathInset::mode_type currentMode() const; // Local selection methods /// @@ -153,13 +166,9 @@ public: /// void selGet(MathArray & ar); /// - void drawSelection(Painter & pain) const; - /// - void handleFont(MathTextCodes t); - /// - void handleDelim(string const & l, string const & r); + void drawSelection(MathPainterInfo & pain) const; /// - void handleNest(MathInset * p); + void handleNest(MathAtom const & at); /// splits cells and shifts right part to the next cell void splitCell(); /// splits line and insert new row of cell @@ -167,14 +176,10 @@ public: /// read contents of line into an array void readLine(MathArray & ar) const; /// remove this as soon as LyXFunc::getStatus is "localized" - MathTextCodes getLastCode() const { return lastcode_; } - /// - void pullArg(bool goright); + string getLastCode() const { return "mathnormal"; } /// bool isInside(MathInset const *) const; /// - MathTextCodes nextCode() const; - /// char valign() const; /// char halign() const; @@ -208,8 +213,6 @@ public: /// MathArray & array() const; /// - MathXArray & xarray() const; - /// bool hasPrevAtom() const; /// bool hasNextAtom() const; @@ -231,47 +234,69 @@ public: MathCursorPos & cursor(); /// reference to the last item of the path, i.e. "The Cursor" MathCursorPos const & cursor() const; + /// how deep are we nested? + unsigned depth() const; + /// local dispatcher + int dispatch(string const & cmd); /// describe the situation string info() const; /// dump selection information for debugging void seldump(char const * str) const; /// dump selection information for debugging void dump(char const * str) const; - /// - void stripFromLastEqualSign(); /// moves on - void setSelection(cursor_type const & where, size_type n); + void setSelection(MathIterator const & where, size_type n); + /// + void insert(char c); /// - void insert(char); + void insert(string const & str); + /// lock/unlock inset + void insetToggle(); /// hack for reveal codes void markInsert(); void markErase(); + void handleExtern(string const & arg); /// friend class Selection; + private: - /// moves cursor position one cell to the left - bool posLeft(); - /// moves cursor position one cell to the right - bool posRight(); + /// injects content of a cell into parent + void pullArg(); /// moves cursor index one cell to the left bool idxLeft(); /// moves cursor index one cell to the right bool idxRight(); + /// moves cursor to beginning first cell of current line + bool idxLineFirst(); + /// moves cursor to end of last cell of current line + bool idxLineLast(); + /// moves cursor position one cell to the left + bool posLeft(); + /// moves cursor position one cell to the right + bool posRight(); /// moves position somehow up or down bool goUpDown(bool up); /// moves position into box bool bruteFind(int xo, int yo, int xlow, int xhigh, int ylow, int yhigh); + /// are we in a nucleus of a script inset? + bool inNucleus() const; + + + /// grab grid marked by anchor and current cursor + MathGridInset grabSelection() const; + /// erase the selected part and re-sets the cursor + void eraseSelection(); + /// guess what + MathGridInset grabAndEraseSelection(); /// string macroName() const; /// MathInset::difference_type macroNamePos() const; - /// - void insert(char, MathTextCodes t); /// can we enter the inset? bool openable(MathAtom const &, bool selection) const; /// write access to cursor cell position @@ -279,20 +304,26 @@ private: /// write access to cursor cell index idx_type & idx(); - /// path of positions the cursor had to go if it were leving each inset - cursor_type Cursor_; - /// path of positions the anchor had to go if it were leving each inset - mutable cursor_type Anchor_; + /// path of positions the cursor had to go if it were leaving each inset + MathIterator Cursor_; + /// path of positions the anchor had to go if it were leaving each inset + mutable MathIterator Anchor_; /// pointer to enclsing LyX inset InsetFormulaBase * formula_; + // Selection stuff /// text code of last char entered - MathTextCodes lastcode_; + //MathTextCodes lastcode_; /// do we allow autocorrection bool autocorrect_; /// do we currently select bool selection_; + /// are we entering a macro name? + bool macromode_; + /// are we targeting a certain x coordinate, if so, which one? + int targetx_; }; extern MathCursor * mathcursor; +void releaseMathCursor(BufferView * bv); #endif