File indexing completed on 2024-05-05 04:37:31

0001 /*
0002     SPDX-FileCopyrightText: 2009 Aleix Pol Gonzalez <aleixpol@kde.org>
0003     SPDX-FileCopyrightText: 2010 Benjamin Port <port.benjamin@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only
0006 */
0007 
0008 #ifndef KDEVPLATFORM_DOCUMENTATIONVIEW_H
0009 #define KDEVPLATFORM_DOCUMENTATIONVIEW_H
0010 
0011 #include <QWidget>
0012 #include <QAbstractListModel>
0013 #include <interfaces/idocumentation.h>
0014 #include "documentationexport.h"
0015 
0016 namespace KDevelop {
0017     class IPlugin;
0018     class DocumentationFindWidget;
0019 }
0020 
0021 class QModelIndex;
0022 class QLineEdit;
0023 class ProvidersModel;
0024 class QComboBox;
0025 
0026 class KDEVPLATFORMDOCUMENTATION_EXPORT DocumentationView : public QWidget
0027 {
0028     Q_OBJECT
0029 public:
0030     DocumentationView(QWidget* parent, ProvidersModel* m);
0031 
0032 public:
0033     QList<QAction*> contextMenuActions() const;
0034 
0035 public Q_SLOTS:
0036     void initialize();
0037 
0038     void showDocumentation(const KDevelop::IDocumentation::Ptr& doc);
0039     void emptyHistory();
0040 
0041     void tryBrowseForward();
0042     void tryBrowseBack();
0043     void browseForward();
0044     void browseBack();
0045     void changedSelection(const QModelIndex& idx);
0046     void changedProvider(int);
0047     void showHome();
0048 
0049 private:
0050     void mousePressEvent(QMouseEvent* event) override;
0051     void setupActions();
0052     void updateView();
0053     void returnPressed();
0054 
0055     QAction* mForward;
0056     QAction* mBack;
0057     QAction* mHomeAction;
0058     QAction* mSeparatorBeforeFind;
0059     QAction* mFind;
0060     QLineEdit* mIdentifiers;
0061     QList< KDevelop::IDocumentation::Ptr > mHistory;
0062     QList< KDevelop::IDocumentation::Ptr >::iterator mCurrent;
0063     QComboBox* mProviders;
0064     ProvidersModel* mProvidersModel;
0065     KDevelop::DocumentationFindWidget* mFindDoc;
0066 };
0067 
0068 class KDEVPLATFORMDOCUMENTATION_EXPORT ProvidersModel : public QAbstractListModel
0069 {
0070     Q_OBJECT
0071 public:
0072     explicit ProvidersModel(QObject* parent = nullptr);
0073 
0074     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
0075     int rowCount(const QModelIndex& idx = QModelIndex()) const override;
0076     QList<KDevelop::IDocumentationProvider*> providers();
0077     KDevelop::IDocumentationProvider* provider(int pos) const;
0078     int rowForProvider(KDevelop::IDocumentationProvider* provider);
0079 
0080 public Q_SLOTS:
0081     void unloaded(KDevelop::IPlugin* p);
0082     void loaded(KDevelop::IPlugin* p);
0083     void reloadProviders();
0084 
0085 private:
0086     void addProvider(KDevelop::IDocumentationProvider* provider);
0087     void removeProvider(KDevelop::IDocumentationProvider* provider);
0088 
0089     QList<KDevelop::IDocumentationProvider*> mProviders;
0090 Q_SIGNALS:
0091     void providersChanged();
0092 };
0093 
0094 #endif // KDEVPLATFORM_DOCUMENTATIONVIEW_H