X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTocBackend.h;h=15a800d990347ad8ed6e71b51a9db01eb84c3e5a;hb=0933df00113ee2735699c13559ad3b6e7e9fd115;hp=4a03493db888aa79a6731ff466d6c843178ccf25;hpb=479e9054dbba9753a1a5e03e12ffab970caf4557;p=lyx.git diff --git a/src/TocBackend.h b/src/TocBackend.h index 4a03493db8..15a800d990 100644 --- a/src/TocBackend.h +++ b/src/TocBackend.h @@ -9,126 +9,144 @@ * \author Abdelrazak Younes * * Full author contact details are available in file CREDITS. - * - * TocBackend mainly used in toc.[Ch] */ #ifndef TOC_BACKEND_H #define TOC_BACKEND_H +#include "DocIterator.h" + +#include "support/strfwd.h" + #include #include #include -#include "pariterator.h" - -#include "support/docstream.h" - namespace lyx { class Buffer; -class Paragraph; class FuncRequest; -class LCursor; /// /** */ -class TocBackend +class TocItem { -public: - /// - /** - */ - class Item - { - friend class TocBackend; - friend bool operator==(Item const & a, Item const & b); - - public: - /// - Item( - ParConstIterator const & par_it = ParConstIterator(), - int d = -1, - docstring const & s = docstring()); - /// - ~Item() {} - /// - bool const isValid() const; - /// - int const id() const; - /// - int const depth() const; - /// - docstring const & str() const; - /// - docstring const asString() const; - - /// the action corresponding to the goTo above - FuncRequest action() const; - - protected: - /// Current position of item. - ParConstIterator par_it_; - - /// nesting depth - int depth_; - - /// Full item string - docstring str_; - }; - - /// - typedef std::vector Toc; - typedef std::vector::const_iterator TocIterator; - /// - typedef std::map TocList; + friend class Toc; + friend class TocBackend; public: + /// Default constructor for STL containers. + TocItem() : dit_(0) {} + /// + TocItem(DocIterator const & dit, + int depth, + docstring const & s, + bool output_active, + docstring const & t = docstring() + ); + /// + ~TocItem() {} /// - TocBackend(Buffer const * buffer = NULL): buffer_(buffer) {} + int id() const; /// - ~TocBackend() {} + int depth() const; /// - void setBuffer(Buffer const * buffer) - { buffer_ = buffer; } + docstring const & str() const; + /// + docstring const & tooltip() const; + /// + docstring const asString() const; + /// + DocIterator const & dit() const; + /// + bool isOutput() const { return output_; } + + /// the action corresponding to the goTo above + FuncRequest action() const; + +protected: + /// Current position of item. + DocIterator dit_; + /// nesting depth + int depth_; + /// Full item string + docstring str_; + /// The tooltip string + docstring tooltip_; + /// Is this item in a note, inactive branch, etc? + bool output_; +}; + + +/// +class Toc : public std::vector +{ +public: + typedef std::vector::const_iterator const_iterator; + typedef std::vector::iterator iterator; + const_iterator item(DocIterator const & dit) const; + /// Look for a TocItem given its depth and string. + /// \return The first matching item. + /// \retval end() if no item was found. + iterator item(int depth, docstring const & str); +}; + +typedef Toc::const_iterator TocIterator; + +/// The ToC list. +/// A class and no typedef because we want to forward declare it. +class TocList : public std::map {}; + + +/// +/** +*/ +class TocBackend +{ +public: /// - bool addType(std::string const & type); + TocBackend(Buffer const * buffer) : buffer_(buffer) {} /// - void update(); + void setBuffer(Buffer const * buffer) { buffer_ = buffer; } /// - TocList const & tocs() const - { return tocs_; } + void update(bool output_active); + /// \return true if the item was updated. + bool updateItem(DocIterator const & pit); + /// - std::vector const & types() const - { return types_; } + TocList const & tocs() const { return tocs_; } + TocList & tocs() { return tocs_; } + /// Toc const & toc(std::string const & type) const; + Toc & toc(std::string const & type); + /// Return the first Toc Item before the cursor - TocIterator const item(std::string const & type, ParConstIterator const &) const; + TocIterator item( + std::string const & type, ///< Type of Toc. + DocIterator const & dit ///< The cursor location in the document. + ) const; - void asciiTocList(std::string const & type, odocstream & os) const; + /// + void writePlaintextTocList(std::string const & type, + odocstringstream & os, size_t max_length) const; private: - /// - TocList tocs_; /// - std::vector types_; + TocList tocs_; /// Buffer const * buffer_; - }; // TocBackend -inline -bool operator==(TocBackend::Item const & a, TocBackend::Item const & b) +inline bool operator==(TocItem const & a, TocItem const & b) { return a.id() == b.id() && a.str() == b.str() && a.depth() == b.depth(); } -inline -bool operator!=(TocBackend::Item const & a, TocBackend::Item const & b) +inline bool operator!=(TocItem const & a, TocItem const & b) { return !(a == b); }