X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FTocModel.h;h=7475416160198a57ac531b2341acaeee25b3f959;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=7e2a8fb813baaae76db8a2cb9c2d0e2eeb7c38e8;hpb=9db70c5346c34cc91fbbcb0a90fa1a013efcc58b;p=lyx.git diff --git a/src/frontends/qt4/TocModel.h b/src/frontends/qt4/TocModel.h index 7e2a8fb813..7475416160 100644 --- a/src/frontends/qt4/TocModel.h +++ b/src/frontends/qt4/TocModel.h @@ -12,50 +12,133 @@ #ifndef TOCMODEL_H #define TOCMODEL_H -#include "toc.h" - #include "qt_helpers.h" +#include #include -#include -#include +class QSortFilterProxyModel; namespace lyx { + +class Buffer; +class BufferView; +class DocIterator; +class Toc; +class TocItem; + namespace frontend { -class TocModel: public QStandardItemModel { - Q_OBJECT +/// A QStandardItemModel that gives access to the reset method. +/// This is needed in order to fix http://www.lyx.org/trac/ticket/3740 +class TocTypeModel : public QStandardItemModel +{ public: /// - TocModel() {} + TocTypeModel(QObject * parent); /// - TocModel(toc::Toc const & toc_list); + void reset(); +}; + +/// A class that adapt the TocBackend of a Buffer into standard Qt models for +/// GUI visualisation. +/// There is one TocModel per list in the TocBackend. +class TocModel +{ +public: + /// + TocModel(QObject * parent); + /// + void reset(Toc const & toc); /// - ~TocModel() {} + void reset(); /// - TocModel const & operator=(toc::Toc const & toc_list); + void updateItem(DocIterator const & dit); /// void clear(); /// - void populate(toc::Toc const & toc_list); + QAbstractItemModel * model(); + /// + QAbstractItemModel const * model() const; + /// + void sort(bool sort_it); /// - toc::TocItem const item(QModelIndex const & index) const; + bool isSorted() const { return is_sorted_; } /// - QModelIndex const index(std::string const & toc_str) const; + TocItem const & tocItem(QModelIndex const & index) const; + /// + QModelIndex modelIndex(DocIterator const & dit) const; + /// + int modelDepth() const; private: /// - void populate(toc::Toc::const_iterator & iter, - toc::Toc::const_iterator const & end, - QModelIndex const & parent); + void populate(unsigned int & index, QModelIndex const & parent); + /// + TocTypeModel * model_; + /// + QSortFilterProxyModel * sorted_model_; + /// + bool is_sorted_; + /// + Toc const * toc_; + /// + int maxdepth_; + /// + int mindepth_; +}; + + +/// A container for the different TocModels. +class TocModels : public QObject +{ + Q_OBJECT +public: + /// + TocModels(); + /// + void reset(BufferView const * bv); + /// + int depth(QString const & type); + /// + QAbstractItemModel * model(QString const & type); + /// + QAbstractItemModel * nameModel(); + /// + QModelIndex currentIndex(QString const & type) const; + /// + void goTo(QString const & type, QModelIndex const & index) const; + /// + void init(Buffer const & buffer); + /// + void updateBackend() const; + /// + void updateItem(QString const & type, DocIterator const & dit); + /// + void sort(QString const & type, bool sort_it); + /// + bool isSorted(QString const & type) const; + /// the item that is currently selected + TocItem const currentItem(QString const & type, + QModelIndex const & index) const; + +Q_SIGNALS: + /// Signal that the internal toc_models_ has been reset. + void modelReset(); - typedef std::map ItemMap; +private: + typedef QHash::const_iterator const_iterator; + typedef QHash::iterator iterator; + /// + void clear(); + /// + BufferView const * bv_; + /// + QHash models_; /// - typedef std::map IndexMap; + TocTypeModel * names_; /// - ItemMap item_map_; - IndexMap index_map_; + QSortFilterProxyModel * names_sorted_; }; } // namespace frontend