X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_cursor.h;h=96d0348085baebb5a80f0bfa5afc51de198e5ad9;hb=d359dd8fca52c4f0100f7cf4bf636113c5c4e49f;hp=f38125aa459c82c4873e85dde7e7cea28523ee9c;hpb=aed2b1804c474ad4927a681c708b45bee6c4a36f;p=lyx.git diff --git a/src/mathed/math_cursor.h b/src/mathed/math_cursor.h index f38125aa45..96d0348085 100644 --- a/src/mathed/math_cursor.h +++ b/src/mathed/math_cursor.h @@ -2,7 +2,7 @@ /* * File: math_cursor.h * Purpose: Declaration of interaction classes for mathed - * Author: Alejandro Aguilar Sierra + * Author: Alejandro Aguilar Sierra * Created: January 1996 * Description: MathCursor control all user interaction * @@ -21,12 +21,13 @@ #pragma interface #endif -#include "math_defs.h" #include "math_inset.h" +#include "math_pos.h" #include "LString.h" class InsetFormulaBase; -class Painter; +class MathPainterInfo; +class MathUnknownInset; class Selection; /** @@ -41,32 +42,6 @@ this formula's mathHullInset to the current position. */ -/// Description of a position -struct MathCursorPos { - /// pointer to an inset - MathAtom * par_; - /// cell index of a position in this inset - MathInset::idx_type idx_; - /// position in this cell - MathInset::pos_type pos_; - - /// returns cell corresponding to this position - MathArray & cell() const; - /// returns cell corresponding to this position - MathArray & cell(MathInset::idx_type idx) const; - /// returns xcell corresponding to this position - MathXArray & xcell() const; - /// returns xcell corresponding to this position - MathXArray & xcell(MathInset::idx_type idx) const; -}; - -/// test for equality -bool operator==(MathCursorPos const &, MathCursorPos const &); -/// test for unequality -bool operator<(MathCursorPos const &, MathCursorPos const &); - - -/// see above class MathCursor { public: /// short of anything else reasonable @@ -85,12 +60,16 @@ public: /// 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(); @@ -127,12 +106,18 @@ public: void setPos(int x, int y); /// in pixels from top of screen void getPos(int & x, int & y); - /// - MathAtom & par() const; + /// current inset + MathInset * par() const; /// return the next enclosing grid inset and the cursor's index in it - MathGridInset * enclosingGrid(idx_type &) const; - /// - InsetFormulaBase const * formula(); + 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() const; /// current offset in the current cell pos_type pos() const; /// current cell @@ -140,16 +125,22 @@ public: /// size of current cell size_type size() const; /// - bool interpret(string const &); + bool script(bool); /// + bool interpret(string const &); + /// bool interpret(char); /// bool toggleLimits(); /// interpret name a name of a macro void macroModeClose(); - /// - bool inMacroMode() const; - + /// are we currently typing the name of a macro? + MathUnknownInset * inMacroMode() const; + /// are we currently typing '#1' or '#2' or...? + bool inMacroArgMode() const; + /// are we in an mbox? + bool inMathMode() const; + // Local selection methods /// bool selection() const; @@ -167,47 +158,49 @@ public: void selStart(); /// void selClear(); + /// clears or deletes selection depending on lyxrc setting + void selClearOrDel(); /// void selGet(MathArray & ar); /// - void drawSelection(Painter & pain) const; - /// - void handleFont(MathTextCodes t); + void drawSelection(MathPainterInfo & pain) const; /// void handleDelim(string const & l, string const & r); /// void handleNest(MathInset * p); /// splits cells and shifts right part to the next cell void splitCell(); - /// splits line and insert new row of cell + /// splits line and insert new row of cell void breakLine(); /// read contents of line into an array void readLine(MathArray & ar) const; - /// - MathTextCodes getLastCode() const; + /// remove this as soon as LyXFunc::getStatus is "localized" + string getLastCode() const { return "mathnormal"; } /// void pullArg(bool goright); /// bool isInside(MathInset const *) const; /// - MathTextCodes nextCode() const; - /// char valign() const; /// char halign() const; /// - col_type ncols() const; + col_type hullCol() const; /// - col_type col() const; + row_type hullRow() const; /// - row_type row() const; + col_type gridCol() const; + /// + row_type gridRow() const; /// make sure cursor position is valid - void normalize() const; + void normalize(); + /// mark current cursor trace for redraw + void touch(); /// UpdatableInset * asHyperActiveInset() const; - /// enter a MathInset + /// enter a MathInset void push(MathAtom & par); /// enter a MathInset from the front void pushLeft(MathAtom & par); @@ -240,64 +233,93 @@ public: /// returns the normalized anchor of the selection MathCursorPos normalAnchor() const; - /// 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 - cursor_type Anchor_; - /// reference to the last item of the path, i.e. "The Cursor" 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; + /// moves on + void setSelection(cursor_type const & where, size_type n); + /// + void insert(char c); /// - void stripFromLastEqualSign(); + 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(); /// moves cursor index one cell to the left bool idxLeft(); /// moves cursor index one cell to the right bool idxRight(); - /// moves position somehow up - bool goUp(); - /// moves position somehow down - bool goDown(); - /// moves position somehow down - bool bruteUpDown(int ylow, int yhigh); + /// 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); + + + /// 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; /// - int macroNamePos() const; - /// - void insert(char, MathTextCodes t); - /// can we enter the inset? + MathInset::difference_type macroNamePos() const; + /// can we enter the inset? bool openable(MathAtom const &, bool selection) const; - /// can the setPos routine enter that inset? - bool positionable(MathAtom const &, int x, int y) const; /// write access to cursor cell position pos_type & pos(); /// write access to cursor cell index idx_type & idx(); - /// - InsetFormulaBase * const formula_; - /// - MathTextCodes lastcode_; + /// path of positions the cursor had to go if it were leaving each inset + cursor_type Cursor_; + /// path of positions the anchor had to go if it were leaving each inset + mutable cursor_type Anchor_; + /// pointer to enclsing LyX inset + InsetFormulaBase * formula_; // Selection stuff + /// text code of last char entered + //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;