X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_cursor.h;h=59d6a18e630bc7757d873f43586f1f11e69d4323;hb=a97ed20502fb6a19949cf7ef6fc18a6c6d9e347b;hp=91063d8be64bbd33c093f756e50aa4cbde434f57;hpb=10fd14e55b6887e3be09baa9ed1f5467c40a3889;p=lyx.git diff --git a/src/mathed/math_cursor.h b/src/mathed/math_cursor.h index 91063d8be6..59d6a18e63 100644 --- a/src/mathed/math_cursor.h +++ b/src/mathed/math_cursor.h @@ -1,43 +1,38 @@ // -*- C++ -*- -/* - * File: math_cursor.h - * Purpose: Declaration of interaction classes for mathed - * Author: Alejandro Aguilar Sierra - * Created: January 1996 - * Description: MathCursor control all user interaction - * - * Dependencies: Xlib, XForms +/** + * \file math_cursor.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * Copyright: 1996, Alejandro Aguilar Sierra + * \author Alejandro Aguilar Sierra + * \author André Pönitz * - * You are free to use and modify this code under the terms of - * the GNU General Public Licence version 2 or later. + * Full author contact details are available in file CREDITS. */ #ifndef MATH_CURSOR #define MATH_CURSOR -#ifdef __GNUG__ -#pragma interface -#endif - #include "math_inset.h" -#include "math_pos.h" -#include "LString.h" +#include "math_data.h" +#include "math_iterator.h" + +#include + class InsetFormulaBase; -class MathPainterInfo; +class BufferView; +class PainterInfo; class MathUnknownInset; -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 CursorSlice, 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. */ @@ -46,6 +41,8 @@ class MathCursor { public: /// short of anything else reasonable typedef MathInset::size_type size_type; + /// type for column numbers + typedef MathArray::difference_type difference_type; /// type for cursor positions within a cell typedef MathInset::pos_type pos_type; /// type for cell indices @@ -54,8 +51,6 @@ 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); @@ -66,13 +61,13 @@ public: /// void insert(MathArray const &); /// - void paste(MathArray const &); - /// - void paste(MathGridInset const & data); + void insert2(std::string const &); /// - void erase(); - /// - void backspace(); + void paste(std::string const & data); + /// return false for empty math insets + bool erase(); + /// return false for empty math insets + bool backspace(); /// called for LFUN_HOME etc bool home(bool sel = false); /// called for LFUN_END etc @@ -99,23 +94,27 @@ public: void plainInsert(MathAtom const &); /// void niceInsert(MathAtom const &); - /// - void delLine(); + void niceInsert(std::string const &); + /// in pixels from top of screen void setPos(int x, int y); /// in pixels from top of screen - void getPos(int & x, int & y); + void getPos(int & x, int & y) const; + /// in pixels from left of screen + int targetX() const; /// current inset - MathInset * par() const; + MathInset * inset() 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(); + /// go up to the hull inset + void popToHere(MathInset const * p); + /// adjust anchor position after deletions/insertions + void adjust(pos_type from, difference_type diff); /// InsetFormulaBase * formula() const; /// current offset in the current cell @@ -127,15 +126,15 @@ public: /// bool script(bool); /// - bool interpret(string const &); - /// bool interpret(char); - /// - bool toggleLimits(); /// interpret name a name of a macro void macroModeClose(); /// are we currently typing the name of a macro? - MathUnknownInset * inMacroMode() const; + 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? @@ -150,8 +149,8 @@ public: void selCut(); /// void selDel(); - /// - void selPaste(); + /// pastes n-th element of cut buffer + void selPaste(size_t n); /// void selHandle(bool); /// @@ -160,36 +159,19 @@ public: void selClear(); /// clears or deletes selection depending on lyxrc setting void selClearOrDel(); - /// - void selGet(MathArray & ar); - /// - void drawSelection(MathPainterInfo & pain) const; - /// - 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 - void breakLine(); - /// read contents of line into an array - void readLine(MathArray & ar) const; + /// draws light-blue selection background + void drawSelection(PainterInfo & pi) const; + /// replace selected stuff with at, placing the former + // selection in given cell of atom + void handleNest(MathAtom const & at, int cell = 0); /// remove this as soon as LyXFunc::getStatus is "localized" - string getLastCode() const { return "mathnormal"; } - /// - void pullArg(bool goright); + std::string getLastCode() const { return "mathnormal"; } /// bool isInside(MathInset const *) const; /// char valign() const; /// char halign() const; - /// - col_type hullCol() const; - /// - row_type hullRow() const; - /// - col_type gridCol() const; - /// - row_type gridRow() const; /// make sure cursor position is valid void normalize(); @@ -212,8 +194,6 @@ public: /// MathArray & array() const; /// - MathXArray & xarray() const; - /// bool hasPrevAtom() const; /// bool hasNextAtom() const; @@ -227,50 +207,50 @@ public: MathAtom & nextAtom(); /// returns the selection - void getSelection(MathCursorPos &, MathCursorPos &) const; + void getSelection(CursorSlice &, CursorSlice &) const; /// returns the normalized anchor of the selection - MathCursorPos normalAnchor() const; + CursorSlice normalAnchor() const; /// reference to the last item of the path, i.e. "The Cursor" - MathCursorPos & cursor(); + CursorSlice & cursor(); /// reference to the last item of the path, i.e. "The Cursor" - MathCursorPos const & cursor() const; + CursorSlice const & cursor() const; /// how deep are we nested? unsigned depth() const; - - /// local dispatcher - int dispatch(string const & cmd); /// describe the situation - string info() const; + std::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 setSelection(MathIterator const & where, size_type n); + /// grab selection marked by anchor and current cursor + std::string grabSelection() const; + /// guess what + std::string grabAndEraseSelection(); /// void insert(char c); /// - void insert(string const & str); + void insert(std::string const & str); /// lock/unlock inset void insetToggle(); /// hack for reveal codes void markInsert(); void markErase(); - void handleExtern(string const & arg); - + /// injects content of a cell into parent + void pullArg(); + /// split font inset etc + void handleFont(std::string const & font); /// - friend class Selection; - - + DispatchResult + dispatch(FuncRequest const & cmd); private: /// 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 @@ -279,21 +259,20 @@ private: 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); + /// moves position closest to (x, y) in given box + bool bruteFind(int x, int y, int xlow, int xhigh, int ylow, int yhigh); + /// moves position closest to (x, y) in current cell + void bruteFind2(int x, int y); + /// 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; + /// the name of the macro we are currently inputting + std::string macroName() const; + /// where in the curent cell does the macro name start? + difference_type macroNamePos() const; /// can we enter the inset? bool openable(MathAtom const &, bool selection) const; /// write access to cursor cell position @@ -302,9 +281,9 @@ private: idx_type & idx(); /// path of positions the cursor had to go if it were leaving each inset - cursor_type Cursor_; + MathIterator Cursor_; /// path of positions the anchor had to go if it were leaving each inset - mutable cursor_type Anchor_; + mutable MathIterator Anchor_; /// pointer to enclsing LyX inset InsetFormulaBase * formula_; // Selection stuff @@ -321,5 +300,6 @@ private: }; extern MathCursor * mathcursor; +void releaseMathCursor(BufferView * bv); #endif