X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FRow.h;h=01c62cf266a30064a62f20b4bca8a25c2d73185c;hb=0b54650f0e7f1eae39f93444cac6c8525811975b;hp=695c81a95eef5fe71ca3e800a13ee0345bb3f988;hpb=57c3a94730ed587ac8261bd67532d2ae08c98ced;p=lyx.git diff --git a/src/Row.h b/src/Row.h index 695c81a95e..01c62cf266 100644 --- a/src/Row.h +++ b/src/Row.h @@ -136,24 +136,45 @@ public: /// Row(); + /** + * Helper function: set variable \c var to value \c val, and mark + * row as changed is the values were different. This is intended + * for use when changing members of the row object. + */ + template + void change(T1 & var, T2 const val) { + if (var != val) + changed(true); + var = val; + } + /** + * Helper function: set variable \c var to value \c val, and mark + * row as changed is the values were different. This is intended + * for use when changing members of the row object. + * This is the const version, useful for mutable members. + */ + template + void change(T1 & var, T2 const val) const { + if (var != val) + changed(true); + var = val; + } /// bool changed() const { return changed_; } /// - void setChanged(bool c) { changed_ = c; } - /// - void setCrc(size_type crc) const; - /// Set the selection begin and end. - /** - * This is const because we update the selection status only at draw() - * time. - */ - void setSelection(pos_type sel_beg, pos_type sel_end) const; + void changed(bool c) const { changed_ = c; } /// bool selection() const; - /// Set the selection begin and end and whether the left and/or right - /// margins are selected. + /** + * Set the selection begin and end and whether the left and/or + * right margins are selected. + * This is const because we update the selection status only at + * draw() time. + */ void setSelectionAndMargins(DocIterator const & beg, DocIterator const & end) const; + /// no selection on this row. + void clearSelectionAndMargins() const; /// void pit(pit_type p) { pit_ = p; } @@ -177,9 +198,9 @@ public: bool flushed() const { return flushed_; } /// - Dimension const & dimension() const { return dim_; } + Dimension const & dim() const { return dim_; } /// - Dimension & dimension() { return dim_; } + Dimension & dim() { return dim_; } /// int height() const { return dim_.height(); } /// The width of the row, including the left margin, but not the right one. @@ -266,6 +287,13 @@ public: void reverseRTL(bool rtl_par); /// bool isRTL() const { return rtl_; } + /// + bool needsChangeBar() const { return changebar_; } + /// + void needsChangeBar(bool ncb) { changebar_ = ncb; } + + /// Find row element that contains \c pos, and compute x offset. + const_iterator const findElement(pos_type pos, bool boundary, double & x) const; friend std::ostream & operator<<(std::ostream & os, Row const & row); @@ -293,8 +321,10 @@ private: * \param beg * \param end */ - bool isMarginSelected(bool left_margin, DocIterator const & beg, + bool isMarginSelected(bool left, DocIterator const & beg, DocIterator const & end) const; + /// Set the selection begin and end. + void setSelection(pos_type sel_beg, pos_type sel_end) const; /** * Returns true if a char or string with font \c f and change @@ -308,8 +338,6 @@ private: /// has the Row appearance changed since last drawing? mutable bool changed_; - /// CRC of row contents. - mutable size_type crc_; /// Index of the paragraph that contains this row pit_type pit_; /// first pos covered by this row @@ -324,6 +352,8 @@ private: Dimension dim_; /// true when this row lives in a right-to-left paragraph bool rtl_; + /// true when a changebar should be drawn in the margin + bool changebar_; };