X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsettext.h;h=a2dd9f98a993545f27db2a944adb93e8df52160f;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=bb5d1b980b9b98a15f75fa465682be1c5a9d553c;hpb=b8a3ae7449dc47aedbfb6c38428287f426b47ebc;p=lyx.git diff --git a/src/insets/insettext.h b/src/insets/insettext.h index bb5d1b980b..a2dd9f98a9 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -12,302 +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 &, LyXLex &); + void read(Buffer const & buf, LyXLex & lex); /// - void write(Buffer const &, std::ostream &) const; + void write(Buffer const & buf, std::ostream & os) const; /// - void metrics(MetricsInfo &, Dimension &) const; - /// - int textWidth() 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; - /// - bool isTextInset() const { return true; } + virtual docstring const editMessage() const; /// - void insetUnlock(BufferView *); + EDITABLE editable() const { return HIGHLY_EDITABLE; } /// - bool lockInsetInInset(BufferView *, UpdatableInset *); + bool canTrackChanges() const { return true; } /// - bool unlockInsetInInset(BufferView *, - UpdatableInset *, bool lr = false); + InsetText const * asTextInset() const { return this; } /// - int latex(Buffer const &, std::ostream &, - LatexRunParams const &) const; + int latex(Buffer const &, odocstream &, OutputParams const &) const; /// - int ascii(Buffer const &, std::ostream &, - LatexRunParams const &) const; + int plaintext(Buffer const &, odocstream &, OutputParams const &) const; /// - int linuxdoc(Buffer const &, std::ostream &, - LatexRunParams const &) const ; - /// - int docbook(Buffer const &, std::ostream &, - LatexRunParams const &) const ; + int docbook(Buffer const &, odocstream &, OutputParams const &) 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; /// - InsetOld::Code lyxCode() const { return InsetOld::TEXT_CODE; } - /// FIXME, document - void getCursorPos(BufferView *, int & x, int & y) const; - /// Get the absolute document x,y of the cursor - virtual void getCursor(BufferView &, int &, int &) const; - /// - int insetInInsetY() const; - /// - void fitInsetCursor(BufferView *) const; - /// - bool insertInset(BufferView *, InsetOld *); - /// - bool insetAllowed(InsetOld::Code) const; - /// - UpdatableInset * getLockingInset() const; - /// - UpdatableInset * getFirstLockingInsetOfType(InsetOld::Code); - /// - void setFont(BufferView *, LyXFont const &, - bool toggleall = false, - bool selectall = false); - /// - void writeParagraphData(Buffer const &, std::ostream &) const; + 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); - /// - LyXText * getLyXText(BufferView const *, - bool const recursive = false) const; - /// - void setViewCache(BufferView const * bv) const; /// - void deleteLyXText(BufferView *, bool recursive = true) const; + void setFrameColor(LColor_color); /// 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); + LyXText * getText(int i) const { + return (i == 0) ? const_cast(&text_) : 0; } /// - void scroll(BufferView * bv, int offset) const { - UpdatableInset::scroll(bv, offset); - } - /// - void clearSelection(BufferView * bv); - /// - ParagraphList * getParagraphs(int) const; - /// - LyXText * getText(int) const; - /// - LyXCursor const & cursor(BufferView *) const; - /// - bool allowSpellcheck() const { return true; } - /// - WordLangTuple const - selectNextWordToSpellcheck(BufferView *, float & value) const; - /// - void selectSelectedWord(BufferView *); + 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); - /// find next change - bool nextChange(BufferView *, lyx::pos_type & length); + /// 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(); - /// - bool searchForward(BufferView *, std::string const &, - bool = true, bool = false); - /// - bool searchBackward(BufferView *, std::string const &, - bool = true, bool = false); - /// - bool checkInsertChar(LyXFont &); - /// - void getDrawFont(LyXFont &) const; /// append text onto the existing text void appendParagraphs(Buffer * bp, ParagraphList &); /// - void addPreview(lyx::graphics::PreviewLoader &) const; + void addPreview(graphics::PreviewLoader &) const; /// - int numParagraphs() const { return 1; } + void edit(LCursor & cur, bool left); /// - mutable ParagraphList paragraphs; -protected: - /// - virtual - DispatchResult - priv_dispatch(FuncRequest const &, idx_type &, pos_type &); - /// - void updateLocal(BufferView *, bool mark_dirty); - /// set parameters for an initial lock of this inset - void lockInset(BufferView *); - /// lock an inset inside this one - void lockInset(BufferView *, UpdatableInset *); + InsetBase * editXY(LCursor & cur, int x, int y); -private: - /// - void init(); + /// number of cells in this inset + size_t nargs() const { return 1; } /// - void lfunMousePress(FuncRequest const &); + ParagraphList & paragraphs(); /// - bool lfunMouseRelease(FuncRequest const &); + ParagraphList const & paragraphs() const; /// - void lfunMouseMotion(FuncRequest const &); - + bool insetAllowed(Code) const { return true; } /// - DispatchResult moveRight(BufferView *); + bool allowSpellCheck() const { return true; } + /// should paragraph indendation be ommitted in any case? + bool neverIndent(Buffer const &) const; /// - DispatchResult moveLeft(BufferView *); + InsetText(InsetText const &); /// - DispatchResult moveRightIntern(BufferView *, bool front, - bool activate_inset = true, - bool selecting = false); + bool wide() const { return wide_inset_; } /// - DispatchResult moveLeftIntern(BufferView *, bool front, - bool activate_inset = true, - bool selecting = false); + void setWide(bool wide_inset) { wide_inset_ = wide_inset; } +protected: /// - DispatchResult moveUp(BufferView *); - /// - DispatchResult moveDown(BufferView *); - /// - void setCharFont(Buffer const &, int pos, LyXFont const & font); - /// - bool checkAndActivateInset(BufferView * bv, bool front); - /// - bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0, - mouse_button::state button = mouse_button::none); - /// - void removeNewlines(); - /// - int cx() const; - /// - int cy() const; - /// - lyx::pos_type cpos() const; - /// - ParagraphList::iterator cpar() const; - /// - bool cboundary() const; - /// - RowList::iterator crow() const; - /// - void drawFrame(Painter &, int x) const; + virtual void doDispatch(LCursor & cur, FuncRequest & cmd); + +private: /// - void clearInset(BufferView *, int start_x, int baseline) 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 bool locked; - /// - mutable int top_y; - /// - lyx::paroffset_type inset_par; - /// - lyx::pos_type inset_pos; - /// - bool inset_boundary; - /// - mutable int inset_x; + mutable pit_type old_pit; /// - mutable int inset_y; + static int border_; /// - bool no_selection; - /// - UpdatableInset * the_locking_inset; - /// - mutable lyx::paroffset_type old_par; - - /// - // to remember old painted frame dimensions to clear it on the right spot! - /// - mutable bool in_insetAllowed; - /// - // these are used to check for mouse movement in Motion selection code - /// - int mouse_x; - int mouse_y; + bool wide_inset_; public: /// mutable LyXText text_; /// - mutable int textwidth_; + mutable LyXFont font_; }; + +} // namespace lyx + #endif