lyx_mirror/src/lyxcursor.h

127 lines
3.5 KiB
C
Raw Normal View History

// -*- C++ -*-
/**
* \file lyxcursor.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Lars Gullik Bj<EFBFBD>nnes
* \author Matthias Ettrich
* \author John Levon
* \author Andr<EFBFBD> P<EFBFBD>nitz
* \author Dekel Tsur
* \author J<EFBFBD>rgen Vigna
*
* Full author contact details are available in file CREDITS.
*/
#ifndef LYXCURSOR_H
#define LYXCURSOR_H
#include "ParagraphList.h"
#include "support/types.h"
/**
* The cursor class describes the position of a cursor within a document.
* Several cursors exist within LyX; for example, when locking an inset,
* the position of the cursor in the containing inset is stored.
*
* FIXME: true ?
*/
class LyXCursor {
public:
LyXCursor();
/// set the paragraph that contains this cursor
void par(ParagraphList::iterator pit);
/// return the paragraph this cursor is in
ParagraphList::iterator par() const;
/// set the position within the paragraph
void pos(lyx::pos_type p);
/// return the position within the paragraph
lyx::pos_type pos() const;
/// FIXME
void boundary(bool b);
/// FIXME
bool boundary() const;
/// set the x position in pixels
void x(int i);
/// return the x position in pixels
int x() const;
/// set the stored next-line position when at the end of a row
void ix(int i);
/**
* Return the x position of the start of the next row, when this
* cursor is at the end of the previous row, for insets that take
* a full row.
*
* FIXME: explain why we need this ?
*/
int ix() const;
/// set the cached x position
void x_fix(int i);
/**
* Return the cached x position of the cursor. This is used for when
* we have text like :
*
* blah blah blah blah| blah blah blah
* blah blah blah
* blah blah blah blah blah blah
*
* When we move onto row 3, we would like to be vertically aligned
* with where we were in row 1, despite the fact that row 2 is
* shorter than x()
*/
int x_fix() const;
/// set the y position in pixels
void y(int i);
/// return the y position in pixels
int y() const;
/// set the stored next-line y position when at the end of a row
void iy(int i);
/**
* Return the y position of the start of the next row, when this
* cursor is at the end of the previous row, for insets that take
* a full row.
*
* FIXME: explain why we need this ? especially for y...
*/
int iy() const;
private:
/// The paragraph the cursor is in.
ParagraphList::iterator par_;
/// The position inside the paragraph
lyx::pos_type pos_;
/**
* When the cursor position is i, is the cursor is after the i-th char
* or before the i+1-th char ? Normally, these two interpretations are
* equivalent, except when the fonts of the i-th and i+1-th char
* differ.
* We use boundary_ to distinguish between the two options:
* If boundary_=true, then the cursor is after the i-th char
* and if boundary_=false, then the cursor is before the i+1-th char.
*
* We currently use the boundary only when the language direction of
* the i-th char is different than the one of the i+1-th char.
* In this case it is important to distinguish between the two
* cursor interpretations, in order to give a reasonable behavior to
* the user.
*/
bool boundary_;
/// the pixel x position
int x_;
/// the stored next-row x position
int ix_;
/// the cached x position
int x_fix_;
/// the pixel y position
int y_;
/// the stored next-row y position
int iy_;
};
///
bool operator==(LyXCursor const & a, LyXCursor const & b);
///
bool operator!=(LyXCursor const & a, LyXCursor const & b);
#endif // LYXCURSOR_H