X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=bceaf1f82fd92d4d6bdffc091c312130802d6bd6;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=7042440fdb6f3f2bcae67b98c469542853f4015d;hpb=6b764fd18887ac31c4a0da032b30a447641460fa;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 7042440fdb..bceaf1f82f 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -18,27 +18,33 @@ #include "coordcache.h" #include "cursor.h" #include "metricsinfo.h" +#include "TextMetrics.h" #include "UpdateFlags.h" + #include "support/types.h" +#include #include #include +#include #include namespace lyx { +namespace support { class FileName; } + class Buffer; class Change; class DocIterator; class FuncRequest; class FuncStatus; class Intl; -class Language; class LCursor; class LyXText; class ParIterator; +class ParagraphMetrics; class ViewMetricsInfo; /// Scrollbar Parameters. @@ -87,17 +93,14 @@ public: /// resize the BufferView. void resize(); - /// redisplay the referenced buffer. - void reload(); /// load a buffer into the view. - bool loadLyXFile(std::string const & name, bool tolastfiles = true); - - /// perform pending painting updates. - /** \c fitcursor means first - * to do a fitcursor, and to force an update if screen - * position changes. \c forceupdate means to force an update - * in any case. - * \return true if a full updateMetrics() is needed. + bool loadLyXFile(support::FileName const & name, bool tolastfiles = true); + + /// perform pending metrics updates. + /** \c Update::FitCursor means first to do a FitCursor, and to + * force an update if screen position changes. + * \c Update::Force means to force an update in any case. + * \retval true if a screen redraw is needed */ bool update(Update::flags flags = Update::FitCursor | Update::Force); @@ -112,8 +115,10 @@ public: /// Save the current position as bookmark. /// if persistent=false, save to temp_bookmark void saveBookmark(bool persistent); - /// goto a specified position. - void moveToPosition( + /// goto a specified position, try par_id first, and then par_pit + /// return the par_pit and par_id of the new paragraph + boost::tuple moveToPosition( + pit_type par_pit, ///< Paragraph pit, used when par_id is zero or invalid. int par_id, ///< Paragraph ID, \sa Paragraph pos_type par_pos ///< Position in the \c Paragraph ); @@ -167,7 +172,7 @@ public: /// dispatch method helper for \c WorkArea /// \sa WorkArea - /// \return true if a full redraw is needed + /// \retval true if a redraw is needed bool workAreaDispatch(FuncRequest const & ev); /// access to anchor. @@ -180,9 +185,12 @@ public: /// sets cursor. /// This will also open all relevant collapsable insets. void setCursor(DocIterator const &); + /// Check deleteEmptyParagraphMechanism and update metrics if needed. + /// \retval true if an update was needed. + bool checkDepm(LCursor & cur, LCursor & old); /// sets cursor. /// This is used when handling LFUN_MOUSE_PRESS. - void mouseSetCursor(LCursor & cur); + bool mouseSetCursor(LCursor & cur); /// sets the selection. /* When \c backwards == false, set anchor @@ -202,6 +210,12 @@ public: /// \param singlepar indicates wether void updateMetrics(bool singlepar = false); + /// + TextMetrics const & textMetrics(LyXText const * t) const; + TextMetrics & textMetrics(LyXText const * t); + /// + ParagraphMetrics const & parMetrics(LyXText const *, pit_type) const; + /// CoordCache & coordCache() { return coord_cache_; @@ -276,6 +290,13 @@ private: /// keyboard mapping object. boost::scoped_ptr const intl_; + + /// last visited inset (kept to send setMouseHover(false) ) + InsetBase * last_inset_; + + /// A map from a LyXText to the associated text metrics + typedef std::map TextMetricsCache; + mutable TextMetricsCache text_metrics_; };