File indexing completed on 2024-05-05 16:46:04

0001 /*
0002     SPDX-FileCopyrightText: 2010, 2015 Alex Richardson <alex.richardson@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <serialization/indexedstring.h>
0010 
0011 #include <QAbstractItemModel>
0012 #include <vector>
0013 #include <memory>
0014 
0015 class OutlineNode;
0016 
0017 namespace KDevelop {
0018 class IDocument;
0019 class DUContext;
0020 class TopDUContext;
0021 class Declaration;
0022 }
0023 
0024 class OutlineModel : public QAbstractItemModel
0025 {
0026     Q_OBJECT
0027     Q_DISABLE_COPY(OutlineModel)
0028 public:
0029     explicit OutlineModel(QObject* parent = nullptr);
0030     ~OutlineModel() override;
0031 
0032     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
0033     QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
0034     int columnCount(const QModelIndex& parent = QModelIndex()) const override;
0035     int rowCount(const QModelIndex& parent = QModelIndex()) const override;
0036     QModelIndex parent(const QModelIndex& child) const override;
0037     bool hasChildren(const QModelIndex& parent = QModelIndex()) const override;
0038     Qt::ItemFlags flags(const QModelIndex& index) const override;
0039 
0040 public Q_SLOTS:
0041     void activate(const QModelIndex& realIndex);
0042 private Q_SLOTS:
0043     void rebuildOutline(KDevelop::IDocument* doc);
0044 private:
0045     std::unique_ptr<OutlineNode> m_rootNode;
0046     KDevelop::IDocument* m_lastDoc;
0047     KDevelop::IndexedString m_lastUrl;
0048 };