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"
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
2003-09-18 11:21:53 +00:00
|
|
|
|
class BufferView;
|
2003-10-29 12:18:08 +00:00
|
|
|
|
class InsetOld;
|
2003-09-18 11:21:53 +00:00
|
|
|
|
class DispatchResult;
|
|
|
|
|
class FuncRequest;
|
2003-09-17 16:44:51 +00:00
|
|
|
|
class LyXText;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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-10-29 12:18:08 +00:00
|
|
|
|
CursorItem() : inset_(0), text_(0), idx_(0), par_(0), pos_(0) {}
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
|
|
|
|
CursorItem(InsetOld * inset, LyXText * text)
|
|
|
|
|
: inset_(inset), text_(text), idx_(0), par_(0), pos_(0)
|
|
|
|
|
{}
|
|
|
|
|
///
|
|
|
|
|
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
|
|
|
|
///
|
|
|
|
|
InsetOld * inset_;
|
2003-09-17 16:44:51 +00:00
|
|
|
|
///
|
|
|
|
|
LyXText * text_;
|
|
|
|
|
///
|
2003-10-29 12:18:08 +00:00
|
|
|
|
int idx_;
|
|
|
|
|
///
|
|
|
|
|
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-04 12:36:59 +00:00
|
|
|
|
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-06 10:30:43 +00:00
|
|
|
|
/// adjust cursor acording to result
|
|
|
|
|
bool handleResult(DispatchResult const & res);
|
2003-11-04 12:36:59 +00:00
|
|
|
|
///
|
|
|
|
|
void push(InsetOld *, LyXText *);
|
|
|
|
|
///
|
|
|
|
|
void pop();
|
|
|
|
|
///
|
|
|
|
|
InsetOld * innerInset() const;
|
|
|
|
|
///
|
|
|
|
|
LyXText * innerText() const;
|
|
|
|
|
///
|
|
|
|
|
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-09-17 16:44:51 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // LYXCURSOR_H
|