#include <iosfwd>
#include <vector>
+class Buffer;
class BufferView;
class FuncStatus;
class FuncRequest;
+class Point;
// these should go
class MathUnknownInset;
-class MathGridInset;
class Encoding;
explicit LCursor(BufferView & bv);
/// dispatch from innermost inset upwards
- DispatchResult dispatch(FuncRequest const & cmd);
- /// are we willing to handle this event?
+ void dispatch(FuncRequest const & cmd);
+ /// get the resut of the last dispatch
+ DispatchResult result() const;
+ /**
+ * \returns true if this function made a definitive decision on
+ * whether the inset at this cursor position wants to handle the
+ * request \p cmd or not. The result of this decision is put into
+ * \p status.
+ */
bool getStatus(FuncRequest const & cmd, FuncStatus & flag);
/// add a new cursor slice
/// pop one slice off the cursor stack and go right
bool popRight();
/// sets cursor part
- void setCursor(DocIterator const & it, bool sel);
+ void setCursor(DocIterator const & it);
//
// selection
///
void clearSelection();
/// access start of selection
- CursorSlice const & selBegin() const;
+ CursorSlice selBegin() const;
/// access end of selection
- CursorSlice const & selEnd() const;
+ CursorSlice selEnd() const;
/// access start of selection
DocIterator selectionBegin() const;
/// access start of selection
DocIterator selectionEnd() const;
///
- std::string grabSelection();
- ///
- void eraseSelection();
- ///
- std::string grabAndEraseSelection();
- // other selection methods
- ///
- void selCopy();
- ///
- void selCut();
- ///
- void selDel();
- /// pastes n-th element of cut buffer
- void selPaste(size_t n);
- ///
void selHandle(bool selecting);
- /// start selection
- void selStart();
- /// clear selection
- void selClear();
- /// clears or deletes selection depending on lyxrc setting
- void selClearOrDel();
//
std::string selectionAsString(bool label) const;
///
/// insert a string
void insert(std::string 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();
- /// access to selection anchor
- CursorSlice & anchor();
- /// access to selection anchor
- CursorSlice const & anchor() const;
- /// cache the absolute coordinate from the top inset
- void updatePos();
+ /// access to normalized selection anchor
+ CursorSlice anchor() const;
/// sets anchor to cursor position
- void resetAnchor();
+ void resetAnchor();
/// access to owning BufferView
- BufferView & bv() const;
+ BufferView & bv() const;
+ /// access to owning Buffer
+ Buffer & buffer() const;
/// get some interesting description of top position
void info(std::ostream & os) const;
/// are we in math mode (2), text mode (1) or unsure (0)?
void reset(InsetBase &);
/// for spellchecking
void replaceWord(std::string const & replacestring);
- /// update our view
- void update();
/// the event was not (yet) dispatched
void undispatched();
/// the event was already dispatched
void dispatched();
+ /// call update() when done
+ void needsUpdate();
/// don't call update() when done
void noUpdate();
//private:
/// the anchor position
DocIterator anchor_;
-
- ///
+
+ ///
DispatchResult disp_;
+
private:
- ///
- int cached_y_;
/**
* The target x position of the cursor. This is used for when
* we have text like :
/// are we on the way to get one?
bool mark_;
+private:
+
//
// math specific stuff that could be promoted to "global" later
//
/// in pixels from top of screen
void setScreenPos(int x, int y);
- /// in pixels from left of screen
- int targetX() const;
- /// return the next enclosing grid inset and the cursor's index in it
- MathGridInset * enclosingGrid(idx_type & idx) const;
- /// adjust anchor position after deletions/insertions
- void adjust(pos_type from, int diff);
/// current offset in the top cell
/// interpret name a name of a macro
void macroModeClose();
bool inMacroMode() const;
/// get access to the macro we are currently typing
MathUnknownInset * activeMacro();
- /// are we currently typing '#1' or '#2' or...?
- bool inMacroArgMode() 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"
- //inline std::string getLastCode() { return "mathnormal"; }
///
bool isInside(InsetBase const *);
- ///
- char valign();
- ///
- char halign();
/// make sure cursor position is valid
void normalize();
/// mark current cursor trace for redraw
void touch();
- /// returns the normalized anchor of the selection
- CursorSlice normalAnchor();
-
/// hack for reveal codes
void markInsert();
void markErase();
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);
};
+
+
#endif // LYXCURSOR_H