From 7cfc5e86a4ebca3a62bc8a10fd755f40acb60dff Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Tue, 13 Jan 2004 15:25:52 +0000 Subject: [PATCH] globalize the cursor git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8339 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Makefile.am | 2 -- src/cursor.h | 2 -- src/cursor_slice.C | 17 +++------- src/lyxtext.h | 73 +++++++++++++++++++++++++++++++++---------- src/text.C | 57 +++++++++++++++++++++++++++++++-- src/text2.C | 22 +------------ src/textcursor.C | 64 ------------------------------------- src/textcursor.h | 78 ---------------------------------------------- 8 files changed, 116 insertions(+), 199 deletions(-) delete mode 100644 src/textcursor.C delete mode 100644 src/textcursor.h diff --git a/src/Makefile.am b/src/Makefile.am index 6a6193e14e..1cc8e44aae 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -260,8 +260,6 @@ lyx_SOURCES = \ text.C \ text2.C \ text3.C \ - textcursor.C \ - textcursor.h \ toc.C \ toc.h \ trans.C \ diff --git a/src/cursor.h b/src/cursor.h index 18050ff0e4..689f84ee4c 100644 --- a/src/cursor.h +++ b/src/cursor.h @@ -12,7 +12,6 @@ #ifndef CURSOR_H #define CURSOR_H -#include "textcursor.h" #include "cursor_slice.h" #include @@ -30,7 +29,6 @@ class InsetTabular; * The cursor class describes the position of a cursor within a document. */ - class LCursor { public: /// type for cell number in inset diff --git a/src/cursor_slice.C b/src/cursor_slice.C index 278a29e8bb..5956907b7e 100644 --- a/src/cursor_slice.C +++ b/src/cursor_slice.C @@ -112,7 +112,7 @@ void CursorSlice::setPos(int pos) LyXText * CursorSlice::text() const { - return asUpdatableInset()->getText(idx_); + return asUpdatableInset() ? asUpdatableInset()->getText(idx_) : 0; } @@ -155,24 +155,15 @@ bool operator>(CursorSlice const & p, CursorSlice const & q) } -//std::ostream & operator<<(std::ostream & os, CursorSlice const & p) -//{ -// os << "(par: " << p.inset_ << " idx: " << p.idx_ << " pos: " << p.pos_ << ')'; -// return os; -//} - - std::ostream & operator<<(std::ostream & os, CursorSlice const & item) { os << " inset: " << item.inset_ -// << " text: " << item.text() + << " text: " << item.text() << " idx: " << item.idx_ -// << " par: " << item.par_ -// << " pos: " << item.pos_ + << " par: " << item.par_ + << " pos: " << item.pos_ // << " x: " << item.inset_->x() // << " y: " << item.inset_->y() ; return os; } - - diff --git a/src/lyxtext.h b/src/lyxtext.h index 06d2f0c144..282a12e9b7 100644 --- a/src/lyxtext.h +++ b/src/lyxtext.h @@ -15,13 +15,13 @@ #define LYXTEXT_H #include "bufferview_funcs.h" +#include "cursor_slice.h" #include "Bidi.h" #include "layout.h" #include "lyxfont.h" #include "lyxtextclass.h" #include "ParagraphList_fwd.h" #include "RowList_fwd.h" -#include "textcursor.h" #include "insets/inset.h" @@ -41,17 +41,31 @@ class UpdatableInset; 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 +// The structure that keeps track of the selections set. +struct Selection { + Selection() + : set_(false), mark_(false) + {} + bool set() const { + return set_; + } + void set(bool s) { + set_ = s; + } + bool mark() const { + return mark_; + } + void mark(bool m) { + mark_ = m; + } +private: + bool set_; // former selection + bool mark_; // former mark_set +}; + + +/// This class encapsulates the main text data and operations in LyX +class LyXText { public: /// Constructor LyXText(BufferView *, bool ininset); @@ -164,11 +178,6 @@ public: 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(CursorSlice & from, CursorSlice & to, lyx::word_location const); /// just selects the word the cursor is in @@ -415,8 +424,38 @@ public: /// access to the selection anchor CursorSlice const & anchor() const; + /// + void setSelection(); + /// + void clearSelection(); + /// + CursorSlice const & selStart() const; + /// + CursorSlice const & selEnd() const; + /// + CursorSlice & selStart(); + /// + CursorSlice & selEnd(); + public: +/** The cursor. + Later this variable has to be removed. There should be no internal + cursor in a text (and thus not in a buffer). By keeping this it is + (I think) impossible to have several views with the same buffer, but + the cursor placed at different places. + [later] + Since the LyXText now has been moved from Buffer to BufferView + it should not be absolutely needed to move the cursor... + [even later] + Nevertheless, it should still be moved, in order to keep classes + and interdependencies small. + */ + // the other end of the selection + CursorSlice anchor_; + // + Selection selection; + /// int height; /// diff --git a/src/text.C b/src/text.C index 3828e4efe6..781772a33e 100644 --- a/src/text.C +++ b/src/text.C @@ -21,6 +21,7 @@ #include "buffer.h" #include "bufferparams.h" #include "BufferView.h" +#include "cursor.h" #include "debug.h" #include "dispatchresult.h" #include "encoding.h" @@ -1936,13 +1937,13 @@ int LyXText::cursorY(CursorSlice const & cur) const CursorSlice & LyXText::cursor() { - return cursor_; + return bv()->cursor().top(); } CursorSlice const & LyXText::cursor() const { - return cursor_; + return bv()->cursor().top(); } @@ -1958,3 +1959,55 @@ CursorSlice const & LyXText::anchor() const } +CursorSlice const & LyXText::selStart() const +{ + if (!selection.set()) + return cursor(); + // can't use std::min as this creates a new object + return anchor() < cursor() ? anchor() : cursor(); +} + + +CursorSlice const & LyXText::selEnd() const +{ + if (!selection.set()) + return cursor(); + return anchor() > cursor() ? anchor() : cursor(); +} + + +CursorSlice & LyXText::selStart() +{ + if (!selection.set()) + return cursor(); + return anchor() < cursor() ? anchor() : cursor(); +} + + +CursorSlice & LyXText::selEnd() +{ + if (!selection.set()) + return cursor(); + return anchor() > cursor() ? anchor() : cursor(); +} + + +void LyXText::setSelection() +{ + selection.set(true); + // a selection with no contents is not a selection + if (cursor().par() == anchor().par() && cursor().pos() == anchor().pos()) + selection.set(false); +} + + +void LyXText::clearSelection() +{ + selection.set(false); + selection.mark(false); + anchor() = cursor(); + // reset this in the bv()! + if (bv() && bv()->text()) + bv()->unsetXSel(); +} + diff --git a/src/text2.C b/src/text2.C index 3e25913b84..263ddfa46d 100644 --- a/src/text2.C +++ b/src/text2.C @@ -471,28 +471,8 @@ void LyXText::setFont(LyXFont const & font, bool toggleall) } -// important for the screen - - // the cursor set functions have a special mechanism. When they -// realize, that you left an empty paragraph, they will delete it. - -// need the selection cursor: -void LyXText::setSelection() -{ - TextCursor::setSelection(); -} - - -void LyXText::clearSelection() -{ - TextCursor::clearSelection(); - - // reset this in the bv()! - if (bv() && bv()->text()) - bv()->unsetXSel(); -} - +// realize you left an empty paragraph, they will delete it. void LyXText::cursorHome() { diff --git a/src/textcursor.C b/src/textcursor.C deleted file mode 100644 index 407825c3df..0000000000 --- a/src/textcursor.C +++ /dev/null @@ -1,64 +0,0 @@ -/** - * \file textcursor.C - * 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. - */ - -#include - -#include "textcursor.h" - - -CursorSlice const & TextCursor::selStart() const -{ - if (!selection.set()) - return cursor_; - // can't use std::min as this creates a new object - return anchor_ < cursor_ ? anchor_ : cursor_; -} - - -CursorSlice const & TextCursor::selEnd() const -{ - if (!selection.set()) - return cursor_; - return anchor_ > cursor_ ? anchor_ : cursor_; -} - - -CursorSlice & TextCursor::selStart() -{ - if (!selection.set()) - return cursor_; - return anchor_ < cursor_ ? anchor_ : cursor_; -} - - -CursorSlice & TextCursor::selEnd() -{ - if (!selection.set()) - return cursor_; - return anchor_ > cursor_ ? anchor_ : cursor_; -} - - -void TextCursor::setSelection() -{ - selection.set(true); - // a selection with no contents is not a selection - if (cursor_.par() == anchor_.par() && cursor_.pos() == anchor_.pos()) - selection.set(false); -} - - -void TextCursor::clearSelection() -{ - selection.set(false); - selection.mark(false); - anchor_ = cursor_; -} - diff --git a/src/textcursor.h b/src/textcursor.h deleted file mode 100644 index 8aca6619c4..0000000000 --- a/src/textcursor.h +++ /dev/null @@ -1,78 +0,0 @@ -// -*- C++ -*- -/** - * \file textcursor.h - * This file is part of LyX, the document processor. - * Licence details can be found in the file COPYING. - * - * \author unknown - * \author Lars Gullik Bjønnes - * \author John Levon - * \author André Pönitz - * - * Full author contact details are available in file CREDITS. - */ - -#ifndef TEXTCURSOR_H -#define TEXTCURSOR_H - -#include "cursor_slice.h" - -// Do not even think of forward declaring LyXText/BufferView etc here! -// If you need Paragraph proper, go to text_func.h - -/** The cursor. - Later this variable has to be removed. There should be no internal - cursor in a text (and thus not in a buffer). By keeping this it is - (I think) impossible to have several views with the same buffer, but - the cursor placed at different places. - [later] - Since the LyXText now has been moved from Buffer to BufferView - it should not be absolutely needed to move the cursor... - [even later] - Nevertheless, it should still be moved, in order to keep classes - and interdependencies small. - */ - -// The structure that keeps track of the selections set. -struct Selection { - Selection() - : set_(false), mark_(false) - {} - bool set() const { - return set_; - } - void set(bool s) { - set_ = s; - } - bool mark() const { - return mark_; - } - void mark(bool m) { - mark_ = m; - } -private: - bool set_; // former selection - bool mark_; // former mark_set - -}; - -struct TextCursor { - /// - void setSelection(); - /// - void clearSelection(); - - // actual cursor position - CursorSlice cursor_; - // the other end of the selection - CursorSlice anchor_; - - Selection selection; - - CursorSlice const & selStart() const; - CursorSlice const & selEnd() const; - CursorSlice & selStart(); - CursorSlice & selEnd(); -}; - -#endif -- 2.39.2