#include "lyxcursor.h"
#include "lyxparagraph.h"
#include "layout.h"
+#include "lyxrow.h"
class Buffer;
class BufferParams;
-class Row;
class BufferView;
class InsetText;
///
NEED_MORE_REFRESH,
///
- NEED_VERY_LITTLE_REFRESH
- };
-
- enum Letter_Form {
- FORM_ISOLATED,
- FORM_INITIAL,
- FORM_MEDIAL,
- FORM_FINAL
+ NEED_VERY_LITTLE_REFRESH,
+ ///
+ CHANGED_IN_DRAW
};
/// Constructor
LyXText(BufferView *);
+ ///
LyXText(InsetText *);
/// Destructor
///
mutable int number_of_rows;
///
- mutable long height;
+ mutable int height;
+ ///
mutable unsigned int width;
/// the current font settings
mutable LyXFont current_font;
/// the current font
mutable LyXFont real_current_font;
/// first visible pixel-row is set from LyXScreen!!!
- unsigned long first;
+ // unsigned is wrong here for text-insets!
+ int first;
///
BufferView * bv_owner;
///
InsetText * inset_owner;
+ ///
+ UpdatableInset * the_locking_inset;
///
- // void owner(BufferView *);
-
+ int GetRealCursorX(BufferView *) const;
///
- LyXFont GetFont(Buffer const *, LyXParagraph * par,
+ LyXFont const GetFont(Buffer const *, LyXParagraph * par,
LyXParagraph::size_type pos) const;
///
void SetCharFont(Buffer const *, LyXParagraph * par,
Returns true if something was broken. */
bool FullRebreak(BufferView *);
- ///
- LyXParagraph::footnote_flag GetFootnoteFlag(int row);
///
Row * need_break_row;
///
- mutable long refresh_y;
+ mutable int refresh_y;
///
int refresh_height;
///
(relative to the whole text). y is set to the real beginning
of this row
*/
- Row * GetRowNearY(long & y) const;
+ Row * GetRowNearY(int & y) const;
/** returns the column near the specified x-coordinate of the row
x is set to the real beginning of this column
*/
- int GetColumnNearX(BufferView *, Row * row, int & x, bool & boundary) const;
+ int GetColumnNearX(BufferView *, Row * row,
+ int & x, bool & boundary) const;
/** returns a pointer to a specified row. y is set to the beginning
of the row
*/
Row * GetRow(LyXParagraph * par,
- LyXParagraph::size_type pos, long & y) const;
+ LyXParagraph::size_type pos, int & y) const;
/** returns the height of a default row, needed for scrollbar
*/
LyXCursor toggle_end_cursor;
/// need the selection cursor:
- void SetSelection();
+ void SetSelection(BufferView *);
///
- void ClearSelection() const;
+ void ClearSelection(BufferView *) const;
///
- string selectionAsString(Buffer const *) const;
+ string const selectionAsString(Buffer const *) const;
/// just selects the word the cursor is in
void SelectWord(BufferView *);
to the beginning of this word.
With SelectSelectedWord can this be highlighted really
*/
- char * SelectNextWord(BufferView *, float & value);
+ string const SelectNextWord(BufferView *, float & value) const;
///
void SelectSelectedWord(BufferView *);
///
LyXParagraph::size_type pos,
bool setfont = true,
bool boundary = false) const;
-
+ ///
void SetCursor(BufferView *, LyXCursor &, LyXParagraph * par,
LyXParagraph::size_type pos,
bool boundary = false) const;
LyXFont const & font) const;
///
- void SetCursorFromCoordinates(BufferView *, int x, long y) const;
- void SetCursorFromCoordinates(BufferView *, LyXCursor &, int x, long y) const;
+ void SetCursorFromCoordinates(BufferView *, int x, int y) const;
+ ///
+ void SetCursorFromCoordinates(BufferView *, LyXCursor &,
+ int x, int y) const;
///
void CursorUp(BufferView *) const;
///
///
void CursorRight(BufferView *, bool internal = true) const;
///
- void CursorLeftIntern(BufferView *, bool internal = true) const;
- ///
- void CursorRightIntern(BufferView *, bool internal = true) const;
- ///
void CursorLeftOneWord(BufferView *) const;
///
void CursorRightOneWord(BufferView *) const;
void DeleteLineForward(BufferView *);
///
bool SelectWordWhenUnderCursor(BufferView *);
-
+ ///
enum TextCase {
+ ///
text_lowercase = 0,
+ ///
text_capitalization = 1,
+ ///
text_uppercase = 2
};
/// Change the case of the word at cursor position.
void ChangeWordCase(BufferView *, TextCase action);
-
+ void TransposeChars(BufferView const &);
+
/** returns a printed row in a pixmap. The y value is needed to
decide, wether it is selected text or not. This is a strange
solution but faster.
*/
void GetVisibleRow(BufferView *, int y_offset, int x_offset,
- Row * row_ptr, long y);
-
- /* footnotes: */
- ///
- void ToggleFootnote(BufferView *);
- ///
- void OpenStuff(BufferView *);
- ///
- void OpenFootnotes();
- ///
- void OpenFootnote(BufferView *);
- ///
- void CloseFootnotes();
- ///
- void CloseFootnote(BufferView *);
+ Row * row_ptr, int y, bool cleared=false);
- /** turn the selection into a new environment. If there is no
- selection, create an empty environment
- */
- void InsertFootnoteEnvironment(BufferView *,
- LyXParagraph::footnote_kind kind);
- ///
- void MeltFootnoteEnvironment(BufferView *);
///
void CutSelection(BufferView *, bool = true);
///
LyXAlignment align,
string labelwidthstring,
bool noindent);
- void SetParagraphExtraOpt(BufferView *, int type,
- char const * width,
- char const * widthp,
- int alignment, bool hfill,
- bool start_minipage);
/* these things are for search and replace */
- /** returns true if the specified string is at the specified
- position
- */
- bool IsStringInText(LyXParagraph * par,
- LyXParagraph::size_type pos,
- char const * str) const;
/** sets the selection over the number of characters of string,
no check!!
*/
- void SetSelectionOverString(BufferView *, char const * str);
+ void SetSelectionOverString(BufferView *, string const & str);
/** simple replacing. The font of the first selected character
is used
*/
- void ReplaceSelectionWithString(BufferView *, char const * str);
-
- /** if the string can be found: return true and set the cursor to
- the new position */
- bool SearchForward(BufferView *, char const * str) const;
- bool SearchBackward(BufferView *, char const * str) const;
+ void ReplaceSelectionWithString(BufferView *, string const & str);
/// needed to insert the selection
void InsertStringA(BufferView *, string const & str);
/// needed to insert the selection
void InsertStringB(BufferView *, string const & str);
- /// usefull when texing from within LyX
- bool GotoNextError(BufferView *) const;
-
- /// just another feature :)
- bool GotoNextNote(BufferView *) const;
+ /// Find next inset of some specified type.
+ bool GotoNextInset(BufferView *, std::vector<Inset::Code> const & codes,
+ string const & contents = string()) const;
+ ///
/* for the greater insets */
///
int NumberOfCell(LyXParagraph * par,
LyXParagraph::size_type pos) const;
- /* table stuff -- begin*/
-
- /** all table features of the text-class are put together in
- this function. Possible values of feature are defined in table.h
- */
- void TableFeatures(BufferView *, int feature, string const & val) const;
- ///
- void TableFeatures(BufferView *, int feature) const;
-
- /** pos points at the beginning of the next cell (if there is one)
- */
- int WidthOfCell(BufferView *, LyXParagraph * par,
- LyXParagraph::size_type & pos) const;
- ///
- void CheckParagraphInTable(BufferView *, LyXParagraph * par,
- LyXParagraph::size_type pos);
- ///
- void InsertCharInTable(BufferView *, char c);
- ///
- void BackspaceInTable(BufferView *);
- ///
- bool HitInTable(BufferView *, Row * row, int x) const;
- ///
- bool MouseHitInTable(BufferView *, int x, long y) const;
- /* table stuff -- end*/
///
LyXParagraph * GetParFromID(int id);
///
int workWidth(BufferView *) const;
///
- // Buffer * buffer() const;
- ///
void ComputeBidiTables(Buffer const *, Row * row) const;
/// Maps positions in the visual string to positions in logical string.
else
return vis2log_list[pos-bidi_start];
}
-
+ ///
inline
- int bidi_level(LyXParagraph::size_type pos) const {
+ LyXParagraph::size_type bidi_level(LyXParagraph::size_type pos) const {
if (bidi_start == -1)
return 0;
else
return bidi_levels[pos-bidi_start];
}
-
+ ///
inline
bool bidi_InRange(LyXParagraph::size_type pos) const {
return bidi_start == -1 ||
///
mutable Row * lastrow;
- /** Copybuffer for copy environment type
+ /** Copybuffer for copy environment type.
Asger has learned that this should be a buffer-property instead
Lgb has learned that 'char' is a lousy type for non-characters
*/
LyXTextClass::size_type copylayouttype;
/** inserts a new row behind the specified row, increments
- * the touched counters */
+ the touched counters */
void InsertRow(Row * row, LyXParagraph * par,
LyXParagraph::size_type pos) const;
/** removes the row and reset the touched counters */
void RemoveParagraph(Row * row) const;
/** insert the specified paragraph behind the specified row */
- void InsertParagraph(BufferView *, LyXParagraph * par, Row * row) const;
+ void InsertParagraph(BufferView *,
+ LyXParagraph * par, Row * row) const;
/** appends the implizit specified paragraph behind the specified row,
* start at the implizit given position */
///
mutable bool bidi_same_direction;
- ///
- unsigned char TransformChar(unsigned char c, Letter_Form form) const;
-
///
unsigned char TransformChar(unsigned char c, LyXParagraph * par,
LyXParagraph::size_type pos) const;
///
void charInserted();
- ///
- /// special owner functions
+ //
+ // special owner functions
///
LyXParagraph * OwnerParagraph() const;
- ///
+ //
LyXParagraph * OwnerParagraph(LyXParagraph *) const;
- ///
};
+
+/* returns a pointer to the row near the specified y-coordinate
+ * (relative to the whole text). y is set to the real beginning
+ * of this row */
+inline
+Row * LyXText::GetRowNearY(int & y) const
+{
+ // If possible we should optimize this method. (Lgb)
+ Row * tmprow = firstrow;
+ int tmpy = 0;
+
+ while (tmprow->next() && tmpy + tmprow->height() <= y) {
+ tmpy += tmprow->height();
+ tmprow = tmprow->next();
+ }
+
+ y = tmpy; // return the real y
+ return tmprow;
+}
#endif