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