X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fcursor.h;h=46f1834f191df2957166ab25954d133c28701eee;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=e99a8a06bd4e16ba32c5e91988ea2e5cdae4e1d5;hpb=ba0a69bcd964c1962ddfb0ac01f92127da26171c;p=lyx.git diff --git a/src/cursor.h b/src/cursor.h index e99a8a06bd..46f1834f19 100644 --- a/src/cursor.h +++ b/src/cursor.h @@ -18,13 +18,17 @@ #include #include + +namespace lyx { + class Buffer; class BufferView; class FuncStatus; class FuncRequest; +class LyXFont; // these should go -class MathUnknownInset; +class InsetMathUnknown; class Encoding; @@ -38,10 +42,9 @@ public: explicit LCursor(BufferView & bv); /// dispatch from innermost inset upwards - DispatchResult dispatch(FuncRequest const & cmd); - /// are we willing to handle this event? - bool getStatus(FuncRequest const & cmd, FuncStatus & flag); - + void dispatch(FuncRequest const & cmd); + /// get the resut of the last dispatch + DispatchResult result() const; /// add a new cursor slice void push(InsetBase & inset); /// add a new cursor slice, place cursor on left end @@ -52,8 +55,10 @@ public: bool popLeft(); /// pop one slice off the cursor stack and go right bool popRight(); + /// make sure we are outside of given inset + void leaveInset(InsetBase const & inset); /// sets cursor part - void setCursor(DocIterator const & it, bool sel); + void setCursor(DocIterator const & it); // // selection @@ -69,7 +74,7 @@ public: /// void setSelection(); /// set selection at given position - void setSelection(DocIterator const & where, size_t n); + void setSelection(DocIterator const & where, int n); /// void clearSelection(); /// access start of selection @@ -81,11 +86,9 @@ public: /// access start of selection DocIterator selectionEnd() const; /// - void selHandle(bool selecting); + bool selHandle(bool selecting); // - std::string selectionAsString(bool label) const; - /// - void paste(std::string const & data); + docstring selectionAsString(bool label) const; /// std::string currentState(); @@ -99,8 +102,6 @@ public: bool & macromode() { return macromode_; } /// returns x,y position void getPos(int & x, int & y) const; - /// returns cursor dimension - void getDim(int & asc, int & desc) const; // // common part @@ -113,14 +114,18 @@ public: /// insert an inset void insert(InsetBase *); /// insert a single char - void insert(char c); + void insert(char_type c); /// insert a string - void insert(std::string const & str); + void insert(docstring const & str); + /// in pixels from left of screen + int targetX() const; /// write acess to target x position of cursor int & x_target(); /// return target x position of cursor int x_target() const; + /// set targetX in current position + void setTargetX(); /// clear target x position of cursor void clearTargetX(); @@ -133,7 +138,7 @@ public: /// access to owning Buffer Buffer & buffer() const; /// get some interesting description of top position - void info(std::ostream & os) const; + void info(odocstream & os) const; /// are we in math mode (2), text mode (1) or unsure (0)? int currentMode(); /// reset cursor bottom to the beginning of the given inset @@ -141,12 +146,33 @@ public: void reset(InsetBase &); /// for spellchecking void replaceWord(std::string const & replacestring); - /// the event was not (yet) dispatched + /** + * the event was not (yet) dispatched. + * + * Should only be called by an inset's doDispatch() method. It means: + * I, the doDispatch() method of InsetFoo, hereby declare that I am + * not able to handle that request and trust my parent will do the + * Right Thing (even if my getStatus partner said that I can do it). + * It is sort of a kludge that should be used only rarely... + */ void undispatched(); /// the event was already dispatched void dispatched(); - /// don't call update() when done + /// Set which update should be done + void updateFlags(Update::flags f); + /** + * don't call update() when done + * + * Should only be called by an inset's doDispatch() method. It means: + * I handled that request and I can reassure you that the screen does + * not need to be re-drawn and all entries in the coord cache stay + * valid (and there are no other things to put in the coord cache). + * This is a fairly rare event as well and only some optimization. + * Not using noUpdate() should never be wrong. + */ void noUpdate(); + /// fix cursor in circumstances that should never happen + void fixIfBroken(); /// output friend std::ostream & operator<<(std::ostream & os, LCursor const & cur); @@ -161,6 +187,7 @@ public: /// DispatchResult disp_; + private: /** * The target x position of the cursor. This is used for when @@ -179,6 +206,13 @@ private: bool selection_; /// are we on the way to get one? bool mark_; + /// If true, we are behind the previous char, otherwise we are in front + // of the next char. This only make a difference when we are in front + // of a big inset spanning a whole row and computing coordinates for + // displaying the cursor. + bool logicalpos_; + +private: // // math specific stuff that could be promoted to "global" later @@ -217,19 +251,19 @@ public: /// void niceInsert(MathAtom const & at); /// - void niceInsert(std::string const & str); + void niceInsert(docstring const & str); /// in pixels from top of screen void setScreenPos(int x, int y); - /// in pixels from left of screen - int targetX() const; /// current offset in the top cell - /// interpret name a name of a macro - void macroModeClose(); + + /// interpret name a name of a macro. Returns true if + /// something got inserted. + bool macroModeClose(); /// are we currently typing the name of a macro? bool inMacroMode() const; /// get access to the macro we are currently typing - MathUnknownInset * activeMacro(); + InsetMathUnknown * activeMacro(); /// replace selected stuff with at, placing the former // selection in given cell of atom @@ -251,29 +285,29 @@ public: void handleFont(std::string const & font); /// display a message - void message(std::string const & msg) const; + void message(docstring const & msg) const; /// display an error message - void errorMessage(std::string const & msg) const; + void errorMessage(docstring const & msg) const; /// - std::string getPossibleLabel(); + docstring getPossibleLabel(); /// moves position somehow up or down bool goUpDown(bool up); /// the name of the macro we are currently inputting - std::string macroName(); + docstring macroName(); /// where in the curent cell does the macro name start? int macroNamePos(); /// can we enter the inset? bool openable(MathAtom const &) const; /// Encoding const * getEncoding() const; - -private: - /// moves position closest to (x, y) in current cell - void bruteFind2(int x, int y); - /// moves position closest to (x, y) in given box - bool bruteFind(int x, int y, int xlow, int xhigh, int ylow, int yhigh); + /// font at cursor position + LyXFont getFont() const; }; + + +} // namespace lyx + #endif // LYXCURSOR_H