4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
15 #include "cursor_slice.h"
29 * The cursor class describes the position of a cursor within a document.
34 /// type for cell number in inset
35 typedef CursorSlice::idx_type idx_type;
36 /// type for paragraph numbers positions within a cell
37 typedef CursorSlice::par_type par_type;
38 /// type for cursor positions within a cell
39 typedef CursorSlice::pos_type pos_type;
41 /// create 'empty' cursor
42 explicit LCursor(BufferView * bv);
43 /// dispatch from innermost inset upwards
44 DispatchResult dispatch(FuncRequest const & cmd);
46 void push(UpdatableInset * inset);
47 /// restrict cursor nesting to given size
49 /// pop one level off the cursor
51 /// access to cursor 'tip'
52 CursorSlice & top() { return cursor_.back(); }
53 /// access to cursor 'tip'
54 CursorSlice const & top() const { return cursor_.back(); }
56 /// set the cell the cursor is in
58 /// return the cell this cursor is in
61 UpdatableInset * innerInset() const;
63 UpdatableInset * innerInsetOfType(int code) const;
65 InsetTabular * innerInsetTabular() const;
67 LyXText * innerText() const;
68 /// returns x,y position
69 void getPos(int & x, int & y) const;
70 /// returns cursor dimension
71 void getDim(int & asc, int & desc) const;
72 /// cache the absolute coordinate from the top inset
74 /// sets anchor to cursor position
77 friend std::ostream & operator<<(std::ostream &, LCursor const &);
79 /// mainly used as stack, but wee need random access
80 std::vector<CursorSlice> cursor_;
82 std::vector<CursorSlice> anchor_;