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
|
|
|
|
|
|
|
|
|
|
#include "textcursor.h"
|
|
|
|
|
|
|
|
|
|
#include "support/types.h"
|
|
|
|
|
|
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 CursorItem {
|
2003-09-17 16:44:51 +00:00
|
|
|
|
public:
|
|
|
|
|
///
|
2003-12-12 15:18:29 +00:00
|
|
|
|
CursorItem() : inset_(0), idx_(0), par_(0), pos_(0) {}
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
2003-11-10 09:06:48 +00:00
|
|
|
|
explicit CursorItem(UpdatableInset * inset)
|
2003-12-12 15:18:29 +00:00
|
|
|
|
: inset_(inset), idx_(0), par_(0), pos_(0)
|
2003-11-04 12:36:59 +00:00
|
|
|
|
{}
|
|
|
|
|
///
|
2003-11-10 09:06:48 +00:00
|
|
|
|
LyXText * text() const;
|
|
|
|
|
///
|
2003-11-04 12:36:59 +00:00
|
|
|
|
friend std::ostream & operator<<(std::ostream &, CursorItem const &);
|
2003-09-17 16:44:51 +00:00
|
|
|
|
public:
|
2003-10-29 12:18:08 +00:00
|
|
|
|
///
|
2003-11-10 09:06:48 +00:00
|
|
|
|
UpdatableInset * inset_;
|
2003-10-29 12:18:08 +00:00
|
|
|
|
///
|
2003-12-12 15:18:29 +00:00
|
|
|
|
int idx_;
|
|
|
|
|
///
|
2003-10-29 12:18:08 +00:00
|
|
|
|
int par_;
|
2003-09-17 16:44:51 +00:00
|
|
|
|
///
|
|
|
|
|
int pos_;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2003-11-04 12:36:59 +00:00
|
|
|
|
class LCursor {
|
2003-09-17 16:44:51 +00:00
|
|
|
|
public:
|
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
|
|
|
|
///
|
2003-11-10 09:06:48 +00:00
|
|
|
|
void push(UpdatableInset * inset);
|
|
|
|
|
/// 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();
|
|
|
|
|
///
|
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();
|
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
|
2003-09-17 16:44:51 +00:00
|
|
|
|
std::vector<CursorItem> data_;
|
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
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // LYXCURSOR_H
|