#include "bufferview_funcs.h"
#include "Bidi.h"
-#include "layout.h"
+#include "dispatchresult.h"
#include "lyxfont.h"
-#include "lyxtextclass.h"
+#include "layout.h"
+#include "lyxlayout_ptr_fwd.h"
#include "ParagraphList_fwd.h"
#include "RowList_fwd.h"
-#include "textcursor.h"
-
-#include "insets/inset.h"
#include <iosfwd>
class Buffer;
class BufferParams;
class BufferView;
+class CursorSlice;
class Dimension;
+class InsetBase;
+class InsetOld_code;
+class FuncRequest;
class LColor_color;
-class LyXCursor;
+class LCursor;
+class LyXTextClass;
class MetricsInfo;
+class PainterInfo;
class Paragraph;
class Row;
class Spacing;
class VSpace;
-/**
- This class used to hold the mapping between buffer paragraphs and
- screen rows. Nowadays, the Paragraphs take care of their rows
- themselves and this contains just most of the code for manipulating
- them and interaction with the Cursor.
- */
-
-// The inheritance from TextCursor should go. It's just there to ease
-// transition...
-class LyXText : public TextCursor {
- // Public Functions
+/// This class encapsulates the main text data and operations in LyX
+class LyXText {
public:
- /// Constructor
+ /// constructor
LyXText(BufferView *, bool ininset);
///
void init(BufferView *);
-
/// update y coordinate cache of all paragraphs
void updateParPositions();
///
ParagraphList::iterator end);
/// rebreaks the given par
void redoParagraph(ParagraphList::iterator pit);
-
/// rebreaks the cursor par
void redoParagraph();
///
std::string getStringToIndex();
- /** insert a character, moves all the following breaks in the
- same Paragraph one to the right and make a little rebreak
- */
+ /// insert a character at cursor position
void insertChar(char c);
- ///
- void insertInset(InsetOld * inset);
+ /// insert an inset at cursor position
+ void insertInset(InsetBase * inset);
/// a full rebreak of the whole text
void fullRebreak();
void draw(PainterInfo & pi, int x, int y) const;
/// try to handle that request
- DispatchResult dispatch(FuncRequest const & cmd);
-
+ DispatchResult dispatch(LCursor & cur, FuncRequest const & cmd);
+ /// access to out BufferView. This should go...
BufferView * bv();
-
+ /// access to out BufferView. This should go...
BufferView * bv() const;
- friend class LyXScreen;
-
/// returns an iterator pointing to a cursor paragraph
- ParagraphList::iterator getPar(LyXCursor const & cursor) const;
+ ParagraphList::iterator getPar(CursorSlice const & cursor) const;
///
ParagraphList::iterator getPar(lyx::paroffset_type par) const;
///
lyx::pos_type getColumnNearX(ParagraphList::iterator pit,
Row const & row, int & x, bool & boundary) const;
- /// need the selection cursor:
- void setSelection();
- ///
- void clearSelection();
-
- /// select the word we need depending on word_location
- void getWord(LyXCursor & from, LyXCursor & to, lyx::word_location const);
+ /** Find the word under \c from in the relative location
+ * defined by \c word_location.
+ * @param from return here the start of the word
+ * @param to return here the end of the word
+ */
+ void getWord(CursorSlice & from, CursorSlice & to, lyx::word_location const);
/// just selects the word the cursor is in
void selectWord(lyx::word_location loc);
- /// returns the inset at cursor (if it exists), 0 otherwise
- InsetOld * getInset() const;
/// accept selected change
void acceptChange();
-
/// reject selected change
void rejectChange();
bool setCursor(lyx::paroffset_type par, lyx::pos_type pos,
bool setfont = true, bool boundary = false);
///
- void setCursor(LyXCursor &, lyx::paroffset_type par,
+ void setCursor(CursorSlice &, lyx::paroffset_type par,
lyx::pos_type pos, bool boundary = false);
///
void setCursorIntern(lyx::paroffset_type par, lyx::pos_type pos,
///
void setCursorFromCoordinates(int x, int y);
///
- void setCursorFromCoordinates(LyXCursor &, int x, int y);
+ void setCursorFromCoordinates(CursorSlice &, int x, int y);
+ ///
+ void edit(LCursor & cur, int x, int y);
///
void cursorUp(bool selecting = false);
///
* characters to the right. No safety checks.
*/
void setSelectionRange(lyx::pos_type length);
-
/** simple replacing. The font of the first selected character
is used
*/
void insertStringAsParagraphs(std::string const & str);
/// Find next inset of some specified type.
- bool gotoNextInset(std::vector<InsetOld::Code> const & codes,
+ bool gotoNextInset(std::vector<InsetOld_code> const & codes,
std::string const & contents = std::string());
///
- void gotoInset(std::vector<InsetOld::Code> const & codes,
+ void gotoInset(std::vector<InsetOld_code> const & codes,
bool same_content);
///
- void gotoInset(InsetOld::Code code, bool same_content);
+ void gotoInset(InsetOld_code code, bool same_content);
/// current max text width
int textWidth() const;
/// updates all counters
void updateCounters();
/// Returns an inset if inset was hit, or 0 if not.
- InsetOld * checkInsetHit(int x, int y);
+ InsetBase * checkInsetHit(int x, int y);
///
int singleWidth(ParagraphList::iterator pit, lyx::pos_type pos) const;
* the cursor and when creating a visible row */
void prepareToPrint(ParagraphList::iterator pit, Row & row) const;
- //
- // special owner functions
- ///
+ /// access to our paragraphs
ParagraphList & paragraphs() const;
-
/// return true if this is owned by an inset.
bool isInInset() const;
-
- ///
- ParagraphList::iterator firstPar() const;
- ///
- ParagraphList::iterator lastPar() const;
- ///
- ParagraphList::iterator endPar() const;
/// return first row of text
RowList::iterator firstRow() const;
///
double spacing(Paragraph const &) const;
///
- void cursorLeftOneWord(LyXCursor &);
+ void cursorLeftOneWord(CursorSlice &);
///
- void cursorRightOneWord(LyXCursor &);
+ void cursorRightOneWord(CursorSlice &);
///
DispatchResult moveRight();
///
int descent() const;
///
- int cursorX() const;
+ int cursorX(CursorSlice const & cursor) const;
///
- int cursorY() const;
- ///
- int cursorX(LyXCursor const & cursor) const;
- ///
- int cursorY(LyXCursor const & cursor) const;
+ int cursorY(CursorSlice const & cursor) const;
- /// the topmost cursor slice
- LyXCursor & cursor();
- /// the topmost cursor slice
- LyXCursor const & cursor() const;
- /// access to the selection anchor
- LyXCursor & anchor();
- /// access to the selection anchor
- LyXCursor const & anchor() const;
+ /// the current cursor slice
+ CursorSlice & cursor();
+ /// the current cursor slice
+ CursorSlice const & cursor() const;
+ friend class LyXScreen;
public:
///
// fix the cursor `cur' after a characters has been deleted at `where'
// position. Called by deleteEmptyParagraphMechanism
- void fixCursorAfterDelete(LyXCursor & cur, LyXCursor const & where);
+ void fixCursorAfterDelete(CursorSlice & cur, CursorSlice const & where);
/// delete double space (false) or empty paragraphs (true) around old_cursor
- bool deleteEmptyParagraphMechanism(LyXCursor const & old_cursor);
+ bool deleteEmptyParagraphMechanism(CursorSlice const & old_cursor);
///
void setCounter(Buffer const &, ParagraphList::iterator pit);
/// sets row.end to the pos value *after* which a row should break.
/// for example, the pos after which isNewLine(pos) == true
void rowBreakPoint(ParagraphList::iterator pit, Row & row) const;
-
/// sets row.witdh to the minimum space a row needs on the screen in pixel
void fill(ParagraphList::iterator pit, Row & row, int workwidth) const;
-
- /**
- * returns the minimum space a manual label needs on the
- * screen in pixels
- */
+ /// the minimum space a manual label needs on the screen in pixels
int labelFill(ParagraphList::iterator pit, Row const & row) const;
-
/// FIXME
int labelEnd(ParagraphList::iterator pit) const;
};
/// return the default height of a row in pixels, considering font zoom
-extern int defaultRowHeight();
+int defaultRowHeight();
///
std::string expandLabel(LyXTextClass const & textclass,