*
* Copyright 1998 The LyX Team.
*
+ *
*======================================================
*/
// The pristine updatable inset: Text
class LyXScreen;
/**
- * A text inset is like a TeX box to write full text
- * (including styles and other insets) in a given space.
+ A text inset is like a TeX box to write full text
+ (including styles and other insets) in a given space.
+ @author: Jürgen Vigna
*/
class InsetText : public UpdatableInset {
public:
- ///
- enum { TEXT_TO_INSET_OFFSET = 2 };
- ///
- enum UpdateCodes {
- NONE = 0,
- INIT,
- FULL,
- CURSOR_PAR,
- CURSOR,
- SELECTION
- };
- ///
- explicit
- InsetText();
- ///
- InsetText(InsetText const &);
- ///
- ~InsetText();
- ///
- Inset * Clone() const;
- ///
- InsetText & operator= (InsetText const & it);
- ///
- void clear() const { par->clearContents(); }
- ///
- void Read(Buffer const *, LyXLex &);
- ///
- void Write(Buffer const *, std::ostream &) const;
- ///
- int ascent(Painter &, LyXFont const &) const;
- ///
- int descent(Painter &, LyXFont const &) const;
- ///
- int width(Painter &, LyXFont const & f) const;
- ///
- int textWidth(Painter &) const;
- ///
- void draw(BufferView *, LyXFont const &, int , float &, bool) const;
- ///
- void update(BufferView *, LyXFont const &, bool =false);
- ///
- char const * EditMessage() const;
- ///
- void Edit(BufferView *, int, int, unsigned int);
- ///
- bool IsTextInset() const { return true; }
- ///
- bool doClearArea() const { return !locked; }
- ///
- void InsetUnlock(BufferView *);
- ///
- bool LockInsetInInset(BufferView *, UpdatableInset *);
- ///
- bool UnlockInsetInInset(BufferView *, UpdatableInset *, bool lr = false);
- ///
- bool UpdateInsetInInset(BufferView *, Inset *);
- ///
- void InsetButtonRelease(BufferView *, int, int, int);
- ///
- void InsetButtonPress(BufferView *, int, int, int);
- ///
- void InsetMotionNotify(BufferView *, int, int, int);
- ///
- void InsetKeyPress(XKeyEvent *);
- ///
- UpdatableInset::RESULT LocalDispatch(BufferView *, int, string const &);
- ///
- int Latex(Buffer const *, std::ostream &, bool fragile, bool free_spc) const;
- ///
- int Ascii(Buffer const *, std::ostream &) const { return 0; }
- ///
- int Linuxdoc(Buffer const *, std::ostream &) const { return 0; }
- ///
- int DocBook(Buffer const *, std::ostream &) const { return 0; }
- ///
- void Validate(LaTeXFeatures & features) const;
- ///
- Inset::Code LyxCode() const { return Inset::TEXT_CODE; }
- ///
- void GetCursorPos(BufferView *, int & x, int & y) const;
- ///
- int InsetInInsetY();
- ///
- void ToggleInsetCursor(BufferView *);
- ///
- bool InsertInset(BufferView *, Inset *);
- ///
- UpdatableInset * GetLockingInset();
- ///
- UpdatableInset * GetFirstLockingInsetOfType(Inset::Code);
- ///
- void SetFont(BufferView *, LyXFont const &, bool toggleall = false);
- ///
- void init(InsetText const * ins = 0);
- ///
- void SetParagraphData(LyXParagraph *);
- ///
- void SetAutoBreakRows(bool);
- ///
- void SetDrawLockedFrame(bool);
- ///
- void SetFrameColor(LColor::color);
- ///
- LyXFont GetDrawFont(BufferView *, LyXParagraph *, int pos) const;
- ///
- LyXText * getLyXText(BufferView *) const;
- void deleteLyXText(BufferView *);
-
- LyXParagraph * par;
+ ///
+ /// numbers need because of test if codeA < codeB
+ ///
+ enum UpdateCodes {
+ ///
+ NONE = 0,
+ ///
+ CURSOR = 1,
+ ///
+ CLEAR_FRAME = 2,
+ ///
+ DRAW_FRAME = 4,
+ ///
+ SELECTION = 8,
+ ///
+ CURSOR_PAR = 16,
+ ///
+ FULL = 32,
+ ///
+ INIT = 64
+ };
+ ///
+ enum DrawFrame {
+ ///
+ NEVER = 0,
+ ///
+ LOCKED,
+ ///
+ ALWAYS
+ };
+ ///
+ InsetText();
+ ///
+ explicit
+ InsetText(InsetText const &);
+ ///
+ ~InsetText();
+ ///
+ Inset * Clone(Buffer const &) const;
+ ///
+ InsetText & operator=(InsetText const & it);
+ ///
+ void clear();
+ ///
+ void Read(Buffer const *, LyXLex &);
+ ///
+ void Write(Buffer const *, std::ostream &) const;
+ ///
+ int ascent(BufferView *, LyXFont const &) const;
+ ///
+ int descent(BufferView *, LyXFont const &) const;
+ ///
+ int width(BufferView *, LyXFont const & f) const;
+ ///
+ int textWidth(BufferView *) const;
+ ///
+ void draw(BufferView *, LyXFont const &, int , float &, bool) const;
+ ///
+ void update(BufferView *, LyXFont const &, bool =false);
+ ///
+ void SetUpdateStatus(BufferView *, int what);
+ ///
+ string const EditMessage() const;
+ ///
+ void Edit(BufferView *, int, int, unsigned int);
+ ///
+ bool IsTextInset() const { return true; }
+ ///
+ bool doClearArea() const { return !locked; }
+ ///
+ void InsetUnlock(BufferView *);
+ ///
+ bool LockInsetInInset(BufferView *, UpdatableInset *);
+ ///
+ bool UnlockInsetInInset(BufferView *, UpdatableInset *, bool lr = false);
+ ///
+ bool UpdateInsetInInset(BufferView *, Inset *);
+ ///
+ void InsetButtonRelease(BufferView *, int, int, int);
+ ///
+ void InsetButtonPress(BufferView *, int, int, int);
+ ///
+ void InsetMotionNotify(BufferView *, int, int, int);
+ ///
+ void InsetKeyPress(XKeyEvent *);
+ ///
+ UpdatableInset::RESULT LocalDispatch(BufferView *, kb_action, string const &);
+ ///
+ int Latex(Buffer const *, std::ostream &,
+ bool fragile, bool free_spc) const;
+ ///
+ int Ascii(Buffer const *, std::ostream &, int linelen) const;
+ ///
+ int Linuxdoc(Buffer const *, std::ostream &) const { return 0; }
+ ///
+ int DocBook(Buffer const *, std::ostream &) const ;
+ ///
+ void Validate(LaTeXFeatures & features) const;
+ ///
+ Inset::Code LyxCode() const { return Inset::TEXT_CODE; }
+ ///
+ void GetCursorPos(BufferView *, int & x, int & y) const;
+ ///
+ unsigned int InsetInInsetY();
+ ///
+ void ToggleInsetCursor(BufferView *);
+ ///
+ bool InsertInset(BufferView *, Inset *);
+ ///
+ UpdatableInset * GetLockingInset();
+ ///
+ UpdatableInset * GetFirstLockingInsetOfType(Inset::Code);
+ ///
+ void SetFont(BufferView *, LyXFont const &, bool toggleall = false);
+ ///
+ int getMaxWidth(BufferView *, UpdatableInset const *) const;
+ ///
+ void init(InsetText const * ins = 0);
+ ///
+ void WriteParagraphData(Buffer const *, std::ostream &) const;
+ ///
+ void SetParagraphData(LyXParagraph *);
+ ///
+ void SetText(string const &);
+ ///
+ void SetAutoBreakRows(bool);
+ ///
+ void SetDrawFrame(BufferView *, DrawFrame);
+ ///
+ void SetFrameColor(BufferView *, LColor::color);
+ ///
+ LyXText * getLyXText(BufferView const *, bool const recursive=false) const;
+ ///
+ void deleteLyXText(BufferView *, bool recursive=true) const;
+ ///
+ void resizeLyXText(BufferView *) const;
+ ///
+ bool ShowInsetDialog(BufferView *) const;
+ ///
+ LyXParagraph * par;
+ ///
+ mutable int need_update;
protected:
- ///
- void UpdateLocal(BufferView *, UpdateCodes, bool mark_dirty);
- ///
- void WriteParagraphData(Buffer const *, std::ostream &) const;
- ///
- virtual int getMaxTextWidth(Painter &, UpdatableInset const *) const;
-
- mutable int drawTextXOffset;
- mutable int drawTextYOffset;
- ///
- bool autoBreakRows;
- bool drawLockedFrame;
- ///
- LColor::color frame_color;
+ ///
+ void UpdateLocal(BufferView *, int what, bool mark_dirty);
+ ///
+ mutable int drawTextXOffset;
+ ///
+ mutable int drawTextYOffset;
+ ///
+ bool autoBreakRows;
+ ///
+ DrawFrame drawFrame;
+ ///
+ LColor::color frame_color;
private:
- ///
- typedef std::map<BufferView *, LyXText *> Cache;
- ///
- typedef Cache::value_type value_type;
- ///
- int BeginningOfMainBody(Buffer const *, LyXParagraph * par) const;
- ///
- void ShowInsetCursor(BufferView *);
- ///
- void HideInsetCursor(BufferView *);
- ///
- UpdatableInset::RESULT moveRight(BufferView *, bool activate_inset = true);
- ///
- UpdatableInset::RESULT moveLeft(BufferView *, bool activate_inset = true);
- ///
- UpdatableInset::RESULT moveUp(BufferView *);
- ///
- UpdatableInset::RESULT moveDown(BufferView *);
- ///
- void SetCharFont(Buffer const *, int pos, LyXFont const & font);
- ///
- string getText(int);
- ///
- bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0,
- int button = 0);
- ///
- int cx(BufferView *) const;
- int cy(BufferView *) const;
- int cpos(BufferView *) const;
- LyXParagraph * cpar(BufferView *) const;
- Row * crow(BufferView *) const;
+ ///
+ typedef std::map<BufferView *, LyXText *> Cache;
+ ///
+ typedef Cache::value_type value_type;
+ ///
+ int BeginningOfMainBody(Buffer const *, LyXParagraph * par) const;
+ ///
+ void ShowInsetCursor(BufferView *, bool show=true);
+ ///
+ void HideInsetCursor(BufferView *);
+ ///
+ UpdatableInset::RESULT moveRight(BufferView *, bool activate_inset = true,
+ bool selecting = false);
+ ///
+ UpdatableInset::RESULT moveLeft(BufferView *, bool activate_inset = true,
+ bool selecting = false);
+ ///
+ UpdatableInset::RESULT moveRightIntern(BufferView *, bool behind,
+ bool activate_inset = true,
+ bool selecting = false);
+ ///
+ UpdatableInset::RESULT moveLeftIntern(BufferView *, bool behind,
+ bool activate_inset = true,
+ bool selecting = false);
+
+ ///
+ UpdatableInset::RESULT moveUp(BufferView *);
+ ///
+ UpdatableInset::RESULT moveDown(BufferView *);
+ ///
+ void SetCharFont(Buffer const *, int pos, LyXFont const & font);
+ ///
+ string const getText(int);
+ ///
+ bool checkAndActivateInset(BufferView * bv, bool behind);
+ ///
+ bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0,
+ int button = 0);
+ void removeNewlines();
+
+ ///
+ int cx(BufferView *) const;
+ ///
+ int cy(BufferView *) const;
+ ///
+ LyXParagraph::size_type cpos(BufferView *) const;
+ ///
+ LyXParagraph * cpar(BufferView *) const;
+ ///
+ bool cboundary(BufferView *) const;
+ ///
+ Row * crow(BufferView *) const;
/// This instead of a macro
LyXText * TEXT(BufferView * bv) const {
return getLyXText(bv);
}
- /* Private structures and variables */
- ///
- mutable bool locked;
- ///
- int insetAscent;
- int insetDescent;
- int insetWidth;
- mutable int last_width;
- mutable int last_height;
- mutable int top_y;
- ///
- int inset_pos;
- ///
- mutable int inset_x;
- ///
- mutable int inset_y;
- ///
- int interline_space;
- ///
- bool no_selection;
- ///
- mutable float xpos;
- ///
- mutable UpdateCodes need_update;
- ///
- UpdatableInset * the_locking_inset;
- ///
- LyXParagraph * old_par;
- /// The cache.
- mutable Cache cache;
+ /* Private structures and variables */
+ ///
+ mutable bool locked;
+ ///
+ mutable int insetAscent;
+ ///
+ mutable int insetDescent;
+ ///
+ mutable int insetWidth;
+ ///
+ mutable int last_width;
+ ///
+ mutable int last_height;
+ ///
+ mutable int top_y;
+ ///
+ LyXParagraph * inset_par;
+ ///
+ LyXParagraph::size_type inset_pos;
+ ///
+ bool inset_boundary;
+ ///
+ mutable int inset_x;
+ ///
+ mutable int inset_y;
+ ///
+ int interline_space;
+ ///
+ bool no_selection;
+ ///
+ mutable float xpos;
+ ///
+ UpdatableInset * the_locking_inset;
+ ///
+ LyXParagraph * old_par;
+ /// The cache.
+ mutable Cache cache;
+ ///
+ mutable int last_drawn_width;
};
#endif