mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-11 05:33:33 +00:00
82fbc52bbb
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8242 a592a061-630c-0410-9148-cb99ea01b6c8
97 lines
1.9 KiB
C++
97 lines
1.9 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file cursor.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author André Pönitz
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#ifndef CURSOR_H
|
|
#define CURSOR_H
|
|
|
|
#include "textcursor.h"
|
|
|
|
#include "support/types.h"
|
|
|
|
#include <iosfwd>
|
|
#include <vector>
|
|
|
|
class BufferView;
|
|
class UpdatableInset;
|
|
class DispatchResult;
|
|
class FuncRequest;
|
|
class LyXText;
|
|
class InsetTabular;
|
|
|
|
|
|
/**
|
|
* The cursor class describes the position of a cursor within a document.
|
|
*/
|
|
|
|
class CursorItem {
|
|
public:
|
|
///
|
|
CursorItem() : inset_(0), idx_(0), par_(0), pos_(0) {}
|
|
///
|
|
explicit CursorItem(UpdatableInset * inset)
|
|
: inset_(inset), idx_(0), par_(0), pos_(0)
|
|
{}
|
|
///
|
|
LyXText * text() const;
|
|
///
|
|
friend std::ostream & operator<<(std::ostream &, CursorItem const &);
|
|
public:
|
|
///
|
|
UpdatableInset * inset_;
|
|
///
|
|
int idx_;
|
|
///
|
|
int par_;
|
|
///
|
|
int pos_;
|
|
};
|
|
|
|
|
|
class LCursor {
|
|
public:
|
|
/// create 'empty' cursor
|
|
explicit LCursor(BufferView * bv);
|
|
/// dispatch from innermost inset upwards
|
|
DispatchResult dispatch(FuncRequest const & cmd);
|
|
///
|
|
void push(UpdatableInset * inset);
|
|
/// restrict cursor nesting to given size
|
|
void pop(int depth);
|
|
/// pop one level off the cursor
|
|
void pop();
|
|
///
|
|
UpdatableInset * innerInset() const;
|
|
///
|
|
UpdatableInset * innerInsetOfType(int code) const;
|
|
///
|
|
InsetTabular * innerInsetTabular() const;
|
|
///
|
|
LyXText * innerText() const;
|
|
/// returns x,y position
|
|
void getPos(int & x, int & y) const;
|
|
/// returns cursor dimension
|
|
void getDim(int & asc, int & desc) const;
|
|
/// cache the absolute coordinate from the top inset
|
|
void updatePos();
|
|
///
|
|
friend std::ostream & operator<<(std::ostream &, LCursor const &);
|
|
public:
|
|
/// mainly used as stack, but wee need random access
|
|
std::vector<CursorItem> data_;
|
|
///
|
|
BufferView * bv_;
|
|
private:
|
|
///
|
|
int cached_y_;
|
|
};
|
|
|
|
#endif // LYXCURSOR_H
|