2 /* This file is part of
3 * ======================================================
5 * LyX, The Document Processor
7 * Copyright 1998 The LyX Team.
10 *======================================================
12 // The pristine updatable inset: Text
24 #include "lyxcursor.h"
36 A text inset is like a TeX box to write full text
37 (including styles and other insets) in a given space.
40 class InsetText : public UpdatableInset {
43 /// numbers need because of test if codeA < codeB
76 InsetText(InsetText const &);
80 Inset * Clone(Buffer const &) const;
82 InsetText & operator=(InsetText const & it);
86 void Read(Buffer const *, LyXLex &);
88 void Write(Buffer const *, std::ostream &) const;
90 int ascent(BufferView *, LyXFont const &) const;
92 int descent(BufferView *, LyXFont const &) const;
94 int width(BufferView *, LyXFont const & f) const;
96 int textWidth(BufferView *) const;
98 void draw(BufferView *, LyXFont const &, int , float &, bool) const;
100 void update(BufferView *, LyXFont const &, bool =false);
102 void SetUpdateStatus(BufferView *, int what) const;
104 string const EditMessage() const;
106 void Edit(BufferView *, int, int, unsigned int);
108 bool IsTextInset() const { return true; }
110 bool doClearArea() const;
112 void InsetUnlock(BufferView *);
114 bool LockInsetInInset(BufferView *, UpdatableInset *);
116 bool UnlockInsetInInset(BufferView *, UpdatableInset *, bool lr = false);
118 bool UpdateInsetInInset(BufferView *, Inset *);
120 void InsetButtonRelease(BufferView *, int, int, int);
122 void InsetButtonPress(BufferView *, int, int, int);
124 void InsetMotionNotify(BufferView *, int, int, int);
126 void InsetKeyPress(XKeyEvent *);
128 UpdatableInset::RESULT LocalDispatch(BufferView *, kb_action, string const &);
130 int Latex(Buffer const *, std::ostream &,
131 bool fragile, bool free_spc) const;
133 int Ascii(Buffer const *, std::ostream &, int linelen) const;
135 int Linuxdoc(Buffer const *, std::ostream &) const { return 0; }
137 int DocBook(Buffer const *, std::ostream &) const ;
139 void Validate(LaTeXFeatures & features) const;
141 Inset::Code LyxCode() const { return Inset::TEXT_CODE; }
143 void GetCursorPos(BufferView *, int & x, int & y) const;
145 unsigned int InsetInInsetY();
147 void ToggleInsetCursor(BufferView *);
149 bool InsertInset(BufferView *, Inset *);
151 UpdatableInset * GetLockingInset();
153 UpdatableInset * GetFirstLockingInsetOfType(Inset::Code);
155 void SetFont(BufferView *, LyXFont const &, bool toggleall = false,
156 bool selectall = false);
158 int getMaxWidth(BufferView *, UpdatableInset const *) const;
160 void init(InsetText const * ins = 0);
162 void WriteParagraphData(Buffer const *, std::ostream &) const;
164 void SetParagraphData(LyXParagraph *);
166 void SetText(string const &);
168 void SetAutoBreakRows(bool);
170 void SetDrawFrame(BufferView *, DrawFrame);
172 void SetFrameColor(BufferView *, LColor::color);
174 LyXText * getLyXText(BufferView const *, bool const recursive=false) const;
176 void deleteLyXText(BufferView *, bool recursive=true) const;
178 void resizeLyXText(BufferView *) const;
180 bool ShowInsetDialog(BufferView *) const;
182 std::vector<string> const getLabelList() const;
186 int scroll(bool recursive=true) const;
187 void scroll(BufferView *bv, float sx) const {
188 UpdatableInset::scroll(bv, sx);
190 void scroll(BufferView *bv, int offset) const {
191 UpdatableInset::scroll(bv, offset);
194 void selectAll(BufferView *bv);
196 void clearSelection(BufferView *bv);
200 mutable int need_update;
204 void UpdateLocal(BufferView *, int what, bool mark_dirty);
206 mutable int drawTextXOffset;
208 mutable int drawTextYOffset;
212 DrawFrame drawFrame_;
214 LColor::color frame_color;
218 typedef std::map<BufferView *, LyXText *> Cache;
220 typedef Cache::value_type value_type;
222 int BeginningOfMainBody(Buffer const *, LyXParagraph * par) const;
224 void ShowInsetCursor(BufferView *, bool show=true);
226 void HideInsetCursor(BufferView *);
228 UpdatableInset::RESULT moveRight(BufferView *, bool activate_inset = true,
229 bool selecting = false);
231 UpdatableInset::RESULT moveLeft(BufferView *, bool activate_inset = true,
232 bool selecting = false);
234 UpdatableInset::RESULT moveRightIntern(BufferView *, bool behind,
235 bool activate_inset = true,
236 bool selecting = false);
238 UpdatableInset::RESULT moveLeftIntern(BufferView *, bool behind,
239 bool activate_inset = true,
240 bool selecting = false);
243 UpdatableInset::RESULT moveUp(BufferView *);
245 UpdatableInset::RESULT moveDown(BufferView *);
247 void SetCharFont(Buffer const *, int pos, LyXFont const & font);
249 string const getText(int);
251 bool checkAndActivateInset(BufferView * bv, bool behind);
253 bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0,
256 void removeNewlines();
258 int cx(BufferView *) const;
260 int cy(BufferView *) const;
262 LyXParagraph::size_type cpos(BufferView *) const;
264 LyXParagraph * cpar(BufferView *) const;
266 bool cboundary(BufferView *) const;
268 Row * crow(BufferView *) const;
270 /// This instead of a macro
271 LyXText * TEXT(BufferView * bv) const {
272 return getLyXText(bv);
275 void drawFrame(Painter &, bool cleared) const;
276 void clearFrame(Painter &, bool cleared) const;
279 /* Private structures and variables */
283 mutable int insetAscent;
285 mutable int insetDescent;
287 mutable int insetWidth;
289 mutable int last_width;
291 mutable int last_height;
295 LyXParagraph * inset_par;
297 LyXParagraph::size_type inset_pos;
305 mutable int old_max_width;
311 UpdatableInset * the_locking_inset;
313 LyXParagraph * old_par;
317 mutable int last_drawn_width;
319 mutable bool frame_is_visible;