]> git.lyx.org Git - lyx.git/blobdiff - src/lyxtext.h
Collapse all those LFUN_XYZ_APPLY to a single LFUN_INSET_APPLY.
[lyx.git] / src / lyxtext.h
index 11cf4ff79301d05536e46b0ff37f17d3e9976d80..7fc88c31ea5162d7d0034b695110b3d58f1f8627 100644 (file)
 #ifndef LYXTEXT_H
 #define LYXTEXT_H
 
-#ifdef __GNUG__
-#pragma interface
-#endif
-
 #include "lyxfont.h"
 #include "lyxcursor.h"
 #include "layout.h"
@@ -86,8 +82,6 @@ public:
        // unsigned is wrong here for text-insets!
        int first_y;
        ///
-       BufferView * bv_owner;
-       ///
        InsetText * inset_owner;
        ///
        UpdatableInset * the_locking_inset;
@@ -107,6 +101,10 @@ public:
        void setCharFont(BufferView *, Paragraph * par,
                         lyx::pos_type pos, LyXFont const & font, bool toggleall);
 
+       /// return true if the row changed
+       void markChangeInDraw(BufferView * bv, Row * row, Row * next);
+       ///
+       void breakAgainOneRow(BufferView *, Row * row);
        /// what you expect when pressing <enter> at cursor position
        void breakParagraph(BufferView *, char keep_layout = 0);
 
@@ -175,13 +173,7 @@ public:
        ///
        mutable int refresh_y;
        ///
-       int refresh_width;
-       ///
-       int refresh_x;
-       ///
        mutable Row * refresh_row;
-       ///
-       lyx::pos_type refresh_pos;
 
        /// give and set the LyXText status
        text_status status() const;
@@ -192,6 +184,9 @@ public:
        Inset::RESULT dispatch(FuncRequest const & cmd);
 
 private:
+       /// only the top-level LyXText has this non-zero
+       BufferView * bv_owner;
+
        /** wether the screen needs a refresh,
           starting with refresh_y
           */
@@ -220,10 +215,6 @@ public:
        */
        Row * firstRow() { return firstrow; }
 
-       /** returns the height of a default row, needed  for scrollbar
-        */
-       int defaultHeight() const;
-
        /** The cursor.
          Later this variable has to be removed. There should be now internal
          cursor in a text (and thus not in a buffer). By keeping this it is
@@ -287,6 +278,12 @@ public:
        /// returns the inset at cursor (if it exists), 0 otherwise
        Inset * getInset() const;
 
+       /// accept selected change
+       void acceptChange(BufferView * bv);
+
+       /// reject selected change 
+       void rejectChange(BufferView * bv);
        /** 'selects" the next word, where the cursor is not in
         and returns this word as string. THe cursor will be moved
         to the beginning of this word.
@@ -372,17 +369,10 @@ public:
                text_uppercase = 2
        };
        /// Change the case of the word at cursor position.
-       void changeCase(BufferView *, TextCase action);
+       void changeCase(BufferView &, TextCase action);
        ///
        void transposeChars(BufferView &);
 
-       /** 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, int y, bool cleared=false);
-
        ///
        void toggleInset(BufferView *);
        ///
@@ -414,10 +404,11 @@ public:
 
        /* these things are for search and replace */
 
-       /** sets the selection over the number of characters of string,
-         no check!!
-         */
-       void setSelectionOverString(BufferView *, string const & str);
+       /**
+        * Sets the selection from the current cursor position to length
+        * characters to the right. No safety checks.
+        */
+       void setSelectionRange(BufferView *, lyx::pos_type length);
 
        /** simple replacing. The font of the first selected character
          is used
@@ -446,9 +437,9 @@ public:
        ///
        void checkParagraph(BufferView *, Paragraph * par, lyx::pos_type pos);
        ///
-       int workWidth(BufferView *) const;
+       int workWidth(BufferView &) const;
        ///
-       int workWidth(BufferView *, Inset * inset) const;
+       int workWidth(BufferView &, Inset * inset) const;
        ///
        void computeBidiTables(Buffer const *, Row * row) const;
 
@@ -491,17 +482,12 @@ private:
 
        ///
        void cursorLeftOneWord(LyXCursor &) const;
+
        ///
        float getCursorX(BufferView *, Row *, lyx::pos_type pos,
                                         lyx::pos_type last, bool boundary) const;
-       ///
-       void changeRegionCase(BufferView * bv,
-                                      LyXCursor const & from,
-                                      LyXCursor const & to,
-                                      LyXText::TextCase action);
        /// used in setlayout
-       void makeFontEntriesLayoutSpecific(Buffer const *, Paragraph * par);
+       void makeFontEntriesLayoutSpecific(Buffer const &, Paragraph & par);
 
        /** forces the redrawing of a paragraph. Needed when manipulating a
            right address box
@@ -517,13 +503,13 @@ private:
        /** inserts a new row behind the specified row, increments
            the touched counters */
        void insertRow(Row * row, Paragraph * par, lyx::pos_type pos) const;
-       /// removes the row and reset the touched counters 
+       /// removes the row and reset the touched counters
        void removeRow(Row * row) const;
 
        /// remove all following rows of the paragraph of the specified row.
        void removeParagraph(Row * row) const;
 
-       /// insert the specified paragraph behind the specified row 
+       /// insert the specified paragraph behind the specified row
        void insertParagraph(BufferView *,
                             Paragraph * par, Row * row) const;
 
@@ -533,78 +519,9 @@ private:
 
        ///
        void breakAgain(BufferView *, Row * row) const;
-       ///
-       void breakAgainOneRow(BufferView *, Row * row);
        /// Calculate and set the height of the row
        void setHeightOfRow(BufferView *, Row * row_ptr) const;
 
-       /** this calculates the specified parameters. needed when setting
-        * the cursor and when creating a visible row */
-       void prepareToPrint(BufferView *, Row * row, float & x,
-                           float & fill_separator,
-                           float & fill_hfill,
-                           float & fill_label_hfill,
-                           bool bidi = true) const;
-
-       /// A struct used for drawing routines
-       struct DrawRowParams {
-               // the bufferview
-               BufferView * bv;
-               // the row
-               Row * row;
-               // the painter to use
-               Painter * pain;
-               // has the background been cleared
-               bool cleared;
-               /// x offset (e.g. for insets)
-               int xo;
-               /// y offset (e.g. for insets)
-               int yo;
-               /// FIXME
-               float x;
-               /// FIXME
-               int y;
-               /// the inset/view full width
-               int width;
-               /// hfill size
-               float hfill;
-               /// label hfill size
-               float label_hfill;
-               /// fill separator size
-               float separator;
-       };
-
-       /// paint the background
-       bool paintRowBackground(DrawRowParams & p);
-
-       /// paint the selection background
-       void paintRowSelection(DrawRowParams & p);
-
-       /// paint appendix marker
-       void paintRowAppendix(DrawRowParams & p);
-
-       /// paint page break marker. Returns its height.
-       int paintPageBreak(string const & label, int y, DrawRowParams & p);
-       /// paint env depth bar
-       void paintRowDepthBar(DrawRowParams & p);
-
-       /// get the on-screen size of the length marker
-       int getLengthMarkerHeight(BufferView * bv, VSpace const & vsp) const;
-
-       /// paint an added space marker
-       int drawLengthMarker(DrawRowParams & p, string const & str,
-               VSpace const & vsp, int start);
-
-       /// paint a first row in a paragraph
-       void paintFirstRow(DrawRowParams & p);
-
-       /// paint a last row in a paragraph
-       void paintLastRow(DrawRowParams & p);
-
-       /// paint text
-       void paintRowText(DrawRowParams & p);
-
        // fix the cursor `cur' after a characters has been deleted at `where'
        // position. Called by deleteEmptyParagraphMechanism
        void fixCursorAfterDelete(BufferView * bv,
@@ -619,7 +536,7 @@ public:
        /** Updates all counters starting BEHIND the row. Changed paragraphs
         * with a dynamic left margin will be rebroken. */
        void updateCounters(BufferView *) const;
-       /// 
+       ///
        void update(BufferView * bv, bool changed = true);
        /**
         * Returns an inset if inset was hit, or 0 if not.
@@ -627,20 +544,6 @@ public:
         */
        Inset * checkInsetHit(BufferView * bv, int & x, int & y) const;
 
-private:
-       ///
-       void setCounter(Buffer const *, Paragraph * par) const;
-       ///
-       void deleteWordForward(BufferView *);
-       ///
-       void deleteWordBackward(BufferView *);
-       ///
-       void deleteLineForward(BufferView *);
-
-       /*
-        * some low level functions
-        */
-
        ///
        int singleWidth(BufferView *, Paragraph * par,
                lyx::pos_type pos) const;
@@ -648,36 +551,16 @@ private:
        int singleWidth(BufferView *, Paragraph * par,
                lyx::pos_type pos, char c) const;
 
-
-       /// draw normal chars
-       void drawChars(DrawRowParams & p, lyx::pos_type & vpos,
-               bool hebrew, bool arabic);
-       /// draw from arabic composed char
-       void drawArabicComposeChar(DrawRowParams & p, lyx::pos_type & vpos);
-       /// draw from hebrew composed char
-       void drawHebrewComposeChar(DrawRowParams & p, lyx::pos_type & vpos);
-       /// draw a mark for foreign language, starting from orig_x
-       void drawForeignMark(DrawRowParams & p, float const orig_x, LyXFont const & orig_font);
-       /// draw an inset
-       bool drawInset(DrawRowParams & p, lyx::pos_type const pos);
-       /// draw new line marker
-       void drawNewline(DrawRowParams & p, lyx::pos_type const pos);
-       /// draw text
-       bool draw(DrawRowParams & p, lyx::pos_type & vpos);
-
-       /// get the next breakpoint in a given paragraph
-       lyx::pos_type nextBreakPoint(BufferView *, Row const * row, int width) const;
-       /// returns the minimum space a row needs on the screen in pixel
-       int fill(BufferView *, Row * row, int workwidth) const;
-
-       /** returns the minimum space a manual label needs on the
-         screen in pixel */
-       int labelFill(BufferView *, Row const * row) const;
+       /// return the color of the canvas
+       LColor::color backgroundColor() const;
 
        ///
-       lyx::pos_type beginningOfMainBody(Buffer const *, Paragraph const * par) const;
+       mutable bool bidi_same_direction;
 
-       /** 
+       unsigned char transformChar(unsigned char c, Paragraph * par,
+                                   lyx::pos_type pos) const;
+
+       /**
         * Returns the left beginning of the text.
         * This information cannot be taken from the layout object, because
         * in LaTeX the beginning of the text fits in some cases
@@ -685,32 +568,44 @@ private:
         */
        int leftMargin(BufferView *, Row const * row) const;
        ///
-       int rightMargin(Buffer const *, Row const * row) const;
+       int rightMargin(Buffer const &, Row const & row) const;
+
+       /** this calculates the specified parameters. needed when setting
+        * the cursor and when creating a visible row */
+       void prepareToPrint(BufferView *, Row * row, float & x,
+                           float & fill_separator,
+                           float & fill_hfill,
+                           float & fill_label_hfill,
+                           bool bidi = true) const;
+
+private:
+       ///
+       void setCounter(Buffer const *, Paragraph * par) const;
+       ///
+       void deleteWordForward(BufferView *);
+       ///
+       void deleteWordBackward(BufferView *);
        ///
-       int labelEnd (BufferView *, Row const * row) const;
+       void deleteLineForward(BufferView *);
 
-       /** returns the number of separators in the specified row.
-         The separator on the very last column doesnt count
-         */
-       int numberOfSeparators(Buffer const *, Row const * row) const;
+       /*
+        * some low level functions
+        */
 
-       /** returns the number of hfills in the specified row. The
-         LyX-Hfill is a LaTeX \hfill so that the hfills at the
-         beginning and at the end were ignored. This is {\em MUCH}
-         more usefull than not to ignore!
-         */
-       int numberOfHfills(Buffer const *, Row const * row) const;
 
-       /// like NumberOfHfills, but only those in the manual label!
-       int numberOfLabelHfills(Buffer const *, Row const * row) const;
-       /** returns true, if a expansion is needed. Rules are given by
-         LaTeX
-         */
-       bool hfillExpansion(Buffer const *, Row const * row_ptr,
-                           lyx::pos_type pos) const;
-       ///
-       LColor::color backgroundColor();
+       /// get the next breakpoint in a given paragraph
+       lyx::pos_type nextBreakPoint(BufferView *, Row const * row, int width) const;
+       /// returns the minimum space a row needs on the screen in pixel
+       int fill(BufferView &, Row & row, int workwidth) const;
+
+       /**
+        * returns the minimum space a manual label needs on the
+        * screen in pixels
+        */
+       int labelFill(BufferView &, Row const & row) const;
 
+       /// FIXME
+       int labelEnd(BufferView &, Row const & row) const;
 
        ///
        mutable std::vector<lyx::pos_type> log2vis_list;
@@ -727,20 +622,6 @@ private:
        ///
        mutable lyx::pos_type bidi_end;
 
-       ///
-       mutable bool bidi_same_direction;
-
-       ///
-       unsigned char transformChar(unsigned char c, Paragraph * par,
-                                   lyx::pos_type pos) const;
-
-       /** returns the paragraph position of the last character in the
-         specified row
-         */
-       lyx::pos_type rowLast(Row const * row) const;
-       ///
-       lyx::pos_type rowLastPrintable(Row const * row) const;
-
        ///
        void charInserted();
 public:
@@ -752,6 +633,16 @@ public:
        void ownerParagraph(Paragraph *) const;
        // set it searching first for the right owner using the paragraph id
        void ownerParagraph(int id, Paragraph *) const;
+
+       /// return true if this is the outer-most lyxtext
+       bool isTopLevel() const;
+
+       /// return true if this is owned by an inset. FIXME: why the difference
+       /// with isTopLevel() ??
+       bool isInInset() const;
 };
 
-#endif
+/// return the default height of a row in pixels, considering font zoom
+extern int defaultRowHeight();
+
+#endif // LYXTEXT_H