File indexing completed on 2024-04-28 04:33:07
0001 /* 0002 SPDX-FileCopyrightText: 2007 Pino Toscano <pino@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef TOCMODEL_H 0008 #define TOCMODEL_H 0009 0010 #include <QAbstractItemModel> 0011 #include <QVector> 0012 0013 namespace Okular 0014 { 0015 class Document; 0016 class DocumentSynopsis; 0017 class DocumentViewport; 0018 } 0019 0020 class TOCModelPrivate; 0021 0022 class TOCModel : public QAbstractItemModel 0023 { 0024 Q_OBJECT 0025 /** 0026 * How many items are in this model, useful for QML 0027 */ 0028 Q_PROPERTY(int count READ count NOTIFY countChanged) 0029 0030 public: 0031 enum Roles { PageRole = 0x000f0001, PageLabelRole, HighlightRole, HighlightedParentRole }; 0032 0033 explicit TOCModel(Okular::Document *document, QObject *parent = nullptr); 0034 ~TOCModel() override; 0035 0036 // reimplementations from QAbstractItemModel 0037 QHash<int, QByteArray> roleNames() const override; 0038 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0039 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0040 bool hasChildren(const QModelIndex &parent = QModelIndex()) const override; 0041 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 0042 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0043 QModelIndex parent(const QModelIndex &index) const override; 0044 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0045 0046 void fill(const Okular::DocumentSynopsis *toc); 0047 void clear(); 0048 void setCurrentViewport(const Okular::DocumentViewport &viewport); 0049 0050 bool isEmpty() const; 0051 bool equals(const TOCModel *model) const; 0052 void setOldModelData(TOCModel *model, const QVector<QModelIndex> &list); 0053 bool hasOldModelData() const; 0054 TOCModel *clearOldModelData() const; 0055 0056 QString externalFileNameForIndex(const QModelIndex &index) const; 0057 Okular::DocumentViewport viewportForIndex(const QModelIndex &index) const; 0058 QString urlForIndex(const QModelIndex &index) const; 0059 0060 int count() const 0061 { 0062 return rowCount(); 0063 } 0064 0065 Q_SIGNALS: 0066 void countChanged(); 0067 0068 private: 0069 // storage 0070 friend class TOCModelPrivate; 0071 TOCModelPrivate *const d; 0072 bool checkequality(const TOCModel *model, const QModelIndex &parentA = QModelIndex(), const QModelIndex &parentB = QModelIndex()) const; 0073 }; 0074 0075 #endif