File indexing completed on 2024-05-12 04:38:54

0001 /*
0002     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_VCSEVENTMODEL_H
0008 #define KDEVPLATFORM_VCSEVENTMODEL_H
0009 
0010 #include <QAbstractTableModel>
0011 #include <QScopedPointer>
0012 
0013 #include <vcs/vcsexport.h>
0014 
0015 class QUrl;
0016 class KJob;
0017 
0018 namespace KDevelop
0019 {
0020 class VcsRevision;
0021 class IBasicVersionControl;
0022 class VcsEvent;
0023 class VcsEventLogModelPrivate;
0024 class VcsBasicEventModelPrivate;
0025 
0026 /**
0027  * This is a generic model to store a list of VcsEvents.
0028  *
0029  * To add events use @c addEvents
0030  */
0031 class KDEVPLATFORMVCS_EXPORT VcsBasicEventModel : public QAbstractTableModel
0032 {
0033 Q_OBJECT
0034 public:
0035     enum Column {
0036         RevisionColumn,
0037         SummaryColumn,
0038         AuthorColumn,
0039         DateColumn,
0040         ColumnCount,
0041     };
0042 
0043     explicit VcsBasicEventModel(QObject* parent);
0044     ~VcsBasicEventModel() override;
0045     int rowCount(const QModelIndex& = QModelIndex()) const override;
0046     int columnCount(const QModelIndex& parent = QModelIndex()) const override;
0047     QVariant data(const QModelIndex&, int role = Qt::DisplayRole) const override;
0048     QVariant headerData(int, Qt::Orientation, int role = Qt::DisplayRole) const override;
0049     KDevelop::VcsEvent eventForIndex(const QModelIndex&) const;
0050 
0051 protected:
0052     void addEvents(const QList<KDevelop::VcsEvent>&);
0053 
0054 private:
0055     const QScopedPointer<class VcsBasicEventModelPrivate> d_ptr;
0056     Q_DECLARE_PRIVATE(VcsBasicEventModel)
0057 };
0058 
0059 /**
0060  * This model stores a list of VcsEvents corresponding to the log obtained
0061  * via IBasicVersionControl::log for a given revision. The model is populated
0062  * lazily via @c fetchMore.
0063  */
0064 class KDEVPLATFORMVCS_EXPORT VcsEventLogModel : public VcsBasicEventModel
0065 {
0066 Q_OBJECT
0067 public:
0068 
0069     VcsEventLogModel(KDevelop::IBasicVersionControl* iface, const KDevelop::VcsRevision& rev, const QUrl& url, QObject* parent);
0070     ~VcsEventLogModel() override;
0071 
0072     /// Adds events to the model via @sa IBasicVersionControl::log
0073     void fetchMore(const QModelIndex& parent) override;
0074     bool canFetchMore(const QModelIndex& parent) const override;
0075 
0076 private Q_SLOTS:
0077     void jobReceivedResults( KJob* job );
0078 
0079 private:
0080     const QScopedPointer<class VcsEventLogModelPrivate> d_ptr;
0081     Q_DECLARE_PRIVATE(VcsEventLogModel)
0082 };
0083 
0084 }
0085 
0086 #endif