X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsettext.h;h=a2dd9f98a993545f27db2a944adb93e8df52160f;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=c4f2c9beaa535fa0f0f95642d929b0940461749e;hpb=153ac7500c4626a4e0ed38bf2bf88163f953c910;p=lyx.git diff --git a/src/insets/insettext.h b/src/insets/insettext.h index c4f2c9beaa..a2dd9f98a9 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -12,189 +12,160 @@ #ifndef INSETTEXT_H #define INSETTEXT_H -#include "updatableinset.h" -#include "ParagraphList_fwd.h" +#include "inset.h" #include "RowList_fwd.h" #include "lyxfont.h" #include "lyxtext.h" +#include "ParagraphList_fwd.h" #include "support/types.h" #include "frontends/mouse_state.h" +namespace lyx { + class Buffer; class BufferParams; class BufferView; +class CursorSlice; class Dimension; class LColor_color; -class LyXCursor; -class Painter; -class Paragraph; -class Row; + /** 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 { +class InsetText : public InsetOld { public: - /// - enum DrawFrame { - /// - NEVER = 0, - /// - LOCKED, - /// - ALWAYS - }; /// explicit InsetText(BufferParams const &); /// - InsetText(InsetText const &); - /// - virtual std::auto_ptr clone() const; - /// - void operator=(InsetText const & it); - /// empty inset to empty par, or just mark as erased - void clear(bool just_mark_erased); + InsetText(); + /// empty inset to empty par + void clear(); /// void read(Buffer const & buf, LyXLex & lex); /// void write(Buffer const & buf, std::ostream & os) const; /// - void metrics(MetricsInfo & mi, Dimension & dim) const; + bool metrics(MetricsInfo & mi, Dimension & dim) const; /// void draw(PainterInfo & pi, int x, int y) const; + /// draw inset selection + void drawSelection(PainterInfo & pi, int x, int y) const; + /// are we inside the area covered by the inset? + virtual bool covers(BufferView const & bv, int x, int y) const; /// - std::string const editMessage() const; + virtual docstring const editMessage() const; /// - bool isTextInset() const { return true; } + EDITABLE editable() const { return HIGHLY_EDITABLE; } /// - int latex(Buffer const &, std::ostream &, - OutputParams const &) const; + bool canTrackChanges() const { return true; } /// - int plaintext(Buffer const &, std::ostream &, - OutputParams const &) const; + InsetText const * asTextInset() const { return this; } /// - int linuxdoc(Buffer const &, std::ostream &, - OutputParams const &) const ; + int latex(Buffer const &, odocstream &, OutputParams const &) const; /// - int docbook(Buffer const &, std::ostream &, - OutputParams const &) const ; + int plaintext(Buffer const &, odocstream &, OutputParams const &) const; /// - void validate(LaTeXFeatures & features) const; - /// - InsetOld::Code lyxCode() const { return InsetOld::TEXT_CODE; } - /// FIXME, document - void getCursorPos(int & x, int & y) const; + int docbook(Buffer const &, odocstream &, OutputParams const &) const; /// - bool insetAllowed(InsetOld::Code) const; + void validate(LaTeXFeatures & features) const; + + /// return x,y of given position relative to the inset's baseline + void cursorPos(BufferView const & bv, CursorSlice const & sl, + bool boundary, int & x, int & y) const; /// - void setFont(BufferView *, LyXFont const &, - bool toggleall = false, - bool selectall = false); + Code lyxCode() const { return TEXT_CODE; } /// - void setText(std::string const &, LyXFont const &); + void setText(docstring const &, LyXFont const &, bool trackChanges); /// void setAutoBreakRows(bool); /// - bool getAutoBreakRows() const { return autoBreakRows_; } + bool getAutoBreakRows() const { return text_.autoBreakRows_; } /// - void setDrawFrame(DrawFrame); + void setDrawFrame(bool); /// LColor_color frameColor() const; /// void setFrameColor(LColor_color); /// - void setViewCache(BufferView const * bv) const; - /// bool showInsetDialog(BufferView *) const; - /// Appends \c list with all labels found within this inset. - void getLabelList(Buffer const &, std::vector & list) const; - /// - int scroll(bool recursive = true) const; - /// - void scroll(BufferView * bv, float sx) const { - UpdatableInset::scroll(bv, sx); - } /// - void scroll(BufferView * bv, int offset) const { - UpdatableInset::scroll(bv, offset); + LyXText * getText(int i) const { + return (i == 0) ? const_cast(&text_) : 0; } /// - LyXText * getText(int) const; + bool getStatus(LCursor & cur, FuncRequest const & cmd, FuncStatus &) const; - /// mark as erased for change tracking - void markErased() { clear(true); }; - /** - * Mark as new. Used when pasting in tabular, and adding rows - * or columns. Note that pasting will ensure that tracking already - * happens, and this just resets the changes for the copied text, - * whereas for row/col add, we need to start tracking changes - * for the (empty) paragraph contained. - */ - void markNew(bool track_changes = false); + /// set the change for the entire inset + void setChange(Change const & change); + /// accept the changes within the inset + void acceptChanges(); + /// reject the changes within the inset + void rejectChanges(); /// append text onto the existing text void appendParagraphs(Buffer * bp, ParagraphList &); /// - void addPreview(lyx::graphics::PreviewLoader &) const; + void addPreview(graphics::PreviewLoader &) const; /// - void edit(BufferView *, bool); + void edit(LCursor & cur, bool left); /// - void edit(BufferView *, int, int); + InsetBase * editXY(LCursor & cur, int x, int y); + /// number of cells in this inset + size_t nargs() const { return 1; } /// - int numParagraphs() const { return 1; } + ParagraphList & paragraphs(); /// - ParagraphList & paragraphs() const; - -private: + ParagraphList const & paragraphs() const; /// - DispatchResult - priv_dispatch(FuncRequest const &, idx_type &, pos_type &); + bool insetAllowed(Code) const { return true; } /// - void updateLocal(BufferView *); + bool allowSpellCheck() const { return true; } + /// should paragraph indendation be ommitted in any case? + bool neverIndent(Buffer const &) const; /// - void init(); - // If the inset is empty set the language of the current font to the - // language to the surronding text (if different). - void sanitizeEmptyText(BufferView *); + InsetText(InsetText const &); /// - void setCharFont(Buffer const &, int pos, LyXFont const & font); + bool wide() const { return wide_inset_; } /// - void removeNewlines(); + void setWide(bool wide_inset) { wide_inset_ = wide_inset; } + +protected: /// - void drawFrame(Painter &, int x) const; + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); + +private: /// - void clearInset(Painter &, int x, int y) const; + virtual std::auto_ptr doClone() const; /// - void collapseParagraphs(BufferView *); + void init(); - /* Private structures and variables */ - /// - bool autoBreakRows_; /// - DrawFrame drawFrame_; + bool drawFrame_; /** We store the LColor::color value as an int to get LColor.h out * of the header file. */ int frame_color_; /// - mutable lyx::paroffset_type old_par; - - /** to remember old painted frame dimensions to clear it on - * the right spot! - */ - mutable bool in_insetAllowed; + mutable pit_type old_pit; + /// + static int border_; + /// + bool wide_inset_; public: /// mutable LyXText text_; /// mutable LyXFont font_; }; + +} // namespace lyx + #endif