2003-09-17 16:44:51 +00:00
|
|
|
|
// -*- C++ -*-
|
|
|
|
|
/**
|
|
|
|
|
* \file cursor.h
|
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
|
*
|
|
|
|
|
* \author Andr<EFBFBD> P<EFBFBD>nitz
|
|
|
|
|
*
|
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef CURSOR_H
|
|
|
|
|
#define CURSOR_H
|
|
|
|
|
|
2003-12-15 11:36:19 +00:00
|
|
|
|
#include "cursor_slice.h"
|
2003-09-17 16:44:51 +00:00
|
|
|
|
|
2003-11-10 09:40:14 +00:00
|
|
|
|
#include <iosfwd>
|
2003-09-17 16:44:51 +00:00
|
|
|
|
#include <vector>
|
|
|
|
|
|
2003-09-18 11:21:53 +00:00
|
|
|
|
class BufferView;
|
2003-11-10 09:06:48 +00:00
|
|
|
|
class UpdatableInset;
|
2003-09-18 11:21:53 +00:00
|
|
|
|
class DispatchResult;
|
|
|
|
|
class FuncRequest;
|
2003-09-17 16:44:51 +00:00
|
|
|
|
class LyXText;
|
2003-11-10 09:06:48 +00:00
|
|
|
|
class InsetTabular;
|
2003-09-17 16:44:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The cursor class describes the position of a cursor within a document.
|
|
|
|
|
*/
|
|
|
|
|
|
2003-11-04 12:36:59 +00:00
|
|
|
|
class LCursor {
|
2003-09-17 16:44:51 +00:00
|
|
|
|
public:
|
2004-01-13 12:28:35 +00:00
|
|
|
|
/// type for cell number in inset
|
|
|
|
|
typedef CursorSlice::idx_type idx_type;
|
|
|
|
|
/// type for paragraph numbers positions within a cell
|
|
|
|
|
typedef CursorSlice::par_type par_type;
|
|
|
|
|
/// type for cursor positions within a cell
|
|
|
|
|
typedef CursorSlice::pos_type pos_type;
|
|
|
|
|
|
2003-11-10 09:06:48 +00:00
|
|
|
|
/// create 'empty' cursor
|
|
|
|
|
explicit LCursor(BufferView * bv);
|
2003-11-06 10:30:43 +00:00
|
|
|
|
/// dispatch from innermost inset upwards
|
2003-09-18 11:21:53 +00:00
|
|
|
|
DispatchResult dispatch(FuncRequest const & cmd);
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
2004-01-15 17:34:44 +00:00
|
|
|
|
void push(InsetBase * inset);
|
2003-11-10 09:06:48 +00:00
|
|
|
|
/// restrict cursor nesting to given size
|
|
|
|
|
void pop(int depth);
|
|
|
|
|
/// pop one level off the cursor
|
2003-11-04 12:36:59 +00:00
|
|
|
|
void pop();
|
2004-01-13 10:37:38 +00:00
|
|
|
|
/// access to cursor 'tip'
|
2004-01-13 18:08:13 +00:00
|
|
|
|
CursorSlice & top() { return cursor_.back(); }
|
2004-01-13 10:37:38 +00:00
|
|
|
|
/// access to cursor 'tip'
|
2004-01-13 18:08:13 +00:00
|
|
|
|
CursorSlice const & top() const { return cursor_.back(); }
|
2004-01-13 10:37:38 +00:00
|
|
|
|
|
2004-01-08 18:30:14 +00:00
|
|
|
|
/// set the cell the cursor is in
|
|
|
|
|
void cell(int);
|
|
|
|
|
/// return the cell this cursor is in
|
|
|
|
|
int cell() const;
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
2003-11-10 09:06:48 +00:00
|
|
|
|
UpdatableInset * innerInset() const;
|
|
|
|
|
///
|
|
|
|
|
UpdatableInset * innerInsetOfType(int code) const;
|
|
|
|
|
///
|
|
|
|
|
InsetTabular * innerInsetTabular() const;
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
|
|
|
|
LyXText * innerText() const;
|
2003-11-10 09:06:48 +00:00
|
|
|
|
/// returns x,y position
|
|
|
|
|
void getPos(int & x, int & y) const;
|
2003-11-13 08:50:26 +00:00
|
|
|
|
/// returns cursor dimension
|
|
|
|
|
void getDim(int & asc, int & desc) const;
|
2003-11-11 13:17:28 +00:00
|
|
|
|
/// cache the absolute coordinate from the top inset
|
|
|
|
|
void updatePos();
|
2004-01-13 18:08:13 +00:00
|
|
|
|
/// sets anchor to cursor position
|
|
|
|
|
void resetAnchor();
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
|
|
|
|
friend std::ostream & operator<<(std::ostream &, LCursor const &);
|
2003-09-17 16:44:51 +00:00
|
|
|
|
public:
|
2003-11-04 12:36:59 +00:00
|
|
|
|
/// mainly used as stack, but wee need random access
|
2004-01-13 18:08:13 +00:00
|
|
|
|
std::vector<CursorSlice> cursor_;
|
|
|
|
|
/// The
|
|
|
|
|
std::vector<CursorSlice> anchor_;
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
|
|
|
|
BufferView * bv_;
|
2003-11-11 09:06:41 +00:00
|
|
|
|
private:
|
|
|
|
|
///
|
|
|
|
|
int cached_y_;
|
2003-09-17 16:44:51 +00:00
|
|
|
|
};
|
|
|
|
|
|
2004-01-13 18:08:13 +00:00
|
|
|
|
|
|
|
|
|
class LCursorS
|
|
|
|
|
{
|
|
|
|
|
};
|
|
|
|
|
|
2003-09-17 16:44:51 +00:00
|
|
|
|
#endif // LYXCURSOR_H
|