diff --git a/vcs/models/vcseventmodel.h b/vcs/models/vcseventmodel.h --- a/vcs/models/vcseventmodel.h +++ b/vcs/models/vcseventmodel.h @@ -22,6 +22,7 @@ #define KDEVPLATFORM_VCSEVENTMODEL_H #include +#include #include @@ -34,7 +35,13 @@ class IBasicVersionControl; class VcsEvent; -class KDEVPLATFORMVCS_EXPORT VcsEventModel : public QAbstractTableModel +/* + * This class represents a basic event model + * + * The model is used to store VcsEvent's + * To add events use addEvents + */ +class KDEVPLATFORMVCS_EXPORT VcsBasicEventModel : public QAbstractTableModel { Q_OBJECT public: @@ -46,23 +53,44 @@ ColumnCount, }; - VcsEventModel( KDevelop::IBasicVersionControl* iface, const KDevelop::VcsRevision& rev, const QUrl& url, QObject* parent ); + VcsBasicEventModel(QObject* parent); + ~VcsBasicEventModel() override; + int rowCount(const QModelIndex& = QModelIndex()) const override; + int columnCount(const QModelIndex& parent = QModelIndex()) const override; + QVariant data(const QModelIndex&, int role = Qt::DisplayRole) const override; + QVariant headerData(int, Qt::Orientation, int role = Qt::DisplayRole) const override; + KDevelop::VcsEvent eventForIndex(const QModelIndex&) const; + +protected: + void addEvents(const QList&); + +private: + QScopedPointer d; +}; + +/** + * This class represents an event model + * + * The model is used to store VcsEvent's + * To add events use fetchMore + */ +class KDEVPLATFORMVCS_EXPORT VcsEventModel : public VcsBasicEventModel +{ +Q_OBJECT +public: + + VcsEventModel(KDevelop::IBasicVersionControl* iface, const KDevelop::VcsRevision& rev, const QUrl& url, QObject* parent); ~VcsEventModel() override; - int rowCount( const QModelIndex& = QModelIndex() ) const override; - int columnCount( const QModelIndex& parent = QModelIndex() ) const override; - QVariant data( const QModelIndex&, int role = Qt::DisplayRole ) const override; - QVariant headerData( int, Qt::Orientation, int role = Qt::DisplayRole ) const override; - KDevelop::VcsEvent eventForIndex( const QModelIndex& ) const; + /// Adds events to the model by means of @sa IBasicVersionControl::log void fetchMore(const QModelIndex& parent) override; bool canFetchMore(const QModelIndex& parent) const override; private slots: void jobReceivedResults( KJob* job ); private: - void addEvents( const QList& ); - class VcsEventModelPrivate* const d; + QScopedPointer d; }; } diff --git a/vcs/models/vcseventmodel.cpp b/vcs/models/vcseventmodel.cpp --- a/vcs/models/vcseventmodel.cpp +++ b/vcs/models/vcseventmodel.cpp @@ -38,43 +38,30 @@ namespace KDevelop { -class VcsEventModelPrivate +class VcsBasicEventModelPrivate { public: QList m_events; - KDevelop::IBasicVersionControl* m_iface; - VcsRevision m_rev; - QUrl m_url; - bool done; - bool fetching; }; -VcsEventModel::VcsEventModel( KDevelop::IBasicVersionControl* iface, const VcsRevision& rev, const QUrl& url, QObject* parent ) - : QAbstractTableModel( parent ), d(new VcsEventModelPrivate) +VcsBasicEventModel::VcsBasicEventModel(QObject* parent) + : QAbstractTableModel(parent), d(new VcsBasicEventModelPrivate) { - d->m_iface = iface; - d->m_rev = rev; - d->m_url = url; - d->done = false; - d->fetching = false; } -VcsEventModel::~VcsEventModel() -{ - delete d; -} +VcsBasicEventModel::~VcsBasicEventModel() = default; -int VcsEventModel::rowCount( const QModelIndex& parent) const +int VcsBasicEventModel::rowCount(const QModelIndex& parent) const { return parent.isValid() ? 0 : d->m_events.count(); } -int VcsEventModel::columnCount( const QModelIndex& parent) const +int VcsBasicEventModel::columnCount(const QModelIndex& parent) const { return parent.isValid() ? 0 : ColumnCount; } -QVariant VcsEventModel::data( const QModelIndex& idx, int role ) const +QVariant VcsBasicEventModel::data(const QModelIndex& idx, int role) const { if( !idx.isValid() || role != Qt::DisplayRole ) return QVariant(); @@ -100,7 +87,7 @@ return QVariant(); } -QVariant VcsEventModel::headerData( int section, Qt::Orientation orientation, int role ) const +QVariant VcsBasicEventModel::headerData(int section, Qt::Orientation orientation, int role) const { if( section < 0 || section >= columnCount() || orientation != Qt::Horizontal || role != Qt::DisplayRole ) return QVariant(); @@ -120,7 +107,7 @@ return QVariant(); } -void VcsEventModel::addEvents( const QList& list ) +void VcsBasicEventModel::addEvents(const QList& list) { if( list.isEmpty() ) return; @@ -130,15 +117,37 @@ endInsertRows(); } -KDevelop::VcsEvent VcsEventModel::eventForIndex( const QModelIndex& idx ) const +KDevelop::VcsEvent VcsBasicEventModel::eventForIndex(const QModelIndex& idx) const { if( !idx.isValid() || idx.row() < 0 || idx.row() >= rowCount() ) { return KDevelop::VcsEvent(); } return d->m_events.at( idx.row() ); } +class VcsEventModelPrivate +{ +public: + KDevelop::IBasicVersionControl* m_iface; + VcsRevision m_rev; + QUrl m_url; + bool done; + bool fetching; +}; + +VcsEventModel::VcsEventModel(KDevelop::IBasicVersionControl* iface, const VcsRevision& rev, const QUrl& url, QObject* parent) + : KDevelop::VcsBasicEventModel(parent), d(new VcsEventModelPrivate) +{ + d->m_iface = iface; + d->m_rev = rev; + d->m_url = url; + d->done = false; + d->fetching = false; +} + +VcsEventModel::~VcsEventModel() = default; + bool VcsEventModel::canFetchMore(const QModelIndex& parent) const { return !d->done && !d->fetching && !parent.isValid(); @@ -171,13 +180,12 @@ } } d->m_rev = newevents.last().revision(); - if(!d->m_events.isEmpty()) { + if (rowCount()) { newevents.removeFirst(); } d->done = newevents.isEmpty(); addEvents( newevents ); d->fetching = false; } } -