File indexing completed on 2024-04-28 04:37:04

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_PROJECTBUILDSETMODEL_H
0008 #define KDEVPLATFORM_PROJECTBUILDSETMODEL_H
0009 
0010 #include "projectexport.h"
0011 
0012 #include <QAbstractTableModel>
0013 #include <QStringList>
0014 
0015 namespace KDevelop
0016 {
0017 class ProjectBaseItem;
0018 class ICore;
0019 class IProject;
0020 class ISession;
0021 class ProjectBuildSetModelPrivate;
0022 
0023 class KDEVPLATFORMPROJECT_EXPORT BuildItem
0024 {
0025 public:
0026     BuildItem();
0027     explicit BuildItem( const QStringList& itemPath );
0028     BuildItem( const BuildItem& rhs );
0029     explicit BuildItem( KDevelop::ProjectBaseItem* );
0030     ~BuildItem() = default;
0031 
0032     void initializeFromItem( KDevelop::ProjectBaseItem* item );
0033     KDevelop::ProjectBaseItem* findItem() const;
0034     BuildItem& operator=( const BuildItem& );
0035     QString itemName() const;
0036     QStringList itemPath() const { return m_itemPath; }
0037     QString itemProject() const;
0038 private:
0039     QStringList m_itemPath;
0040 };
0041 
0042 bool operator==( const BuildItem& rhs, const BuildItem& lhs );
0043 
0044 class KDEVPLATFORMPROJECT_EXPORT ProjectBuildSetModel : public QAbstractTableModel
0045 {
0046     Q_OBJECT
0047 public:
0048     explicit ProjectBuildSetModel( QObject* parent );
0049     ~ProjectBuildSetModel() override;
0050     QVariant data( const QModelIndex&, int role = Qt::DisplayRole ) const override;
0051     QVariant headerData( int, Qt::Orientation, int role = Qt::DisplayRole ) const override;
0052     int rowCount( const QModelIndex& = QModelIndex() ) const override;
0053     int columnCount( const QModelIndex&  = QModelIndex() ) const override;
0054 
0055     void loadFromSession( ISession* session );
0056     void storeToSession( ISession* session );
0057 
0058     void addProjectItem( KDevelop::ProjectBaseItem* );
0059     bool removeRows( int row, int count, const QModelIndex& parent = QModelIndex() ) override;
0060     void moveRowsUp( int row, int count );
0061     void moveRowsDown( int row, int count );
0062     void moveRowsToTop( int row, int count );
0063     void moveRowsToBottom( int row, int count );
0064     QList<BuildItem> items() const;
0065 public Q_SLOTS:
0066     void saveToProject( KDevelop::IProject* ) const;
0067     void loadFromProject( KDevelop::IProject* );
0068     void projectClosed( KDevelop::IProject* );
0069 private:
0070     int findInsertionPlace( const QStringList& itemPath );
0071     void removeItemsWithCache( const QList<int>& itemIndices );
0072     void insertItemWithCache( const KDevelop::BuildItem& item );
0073     void insertItemsOverrideCache( int index, const QList<KDevelop::BuildItem>& items );
0074 
0075 private:
0076     const QScopedPointer<class ProjectBuildSetModelPrivate> d_ptr;
0077     Q_DECLARE_PRIVATE(ProjectBuildSetModel)
0078 };
0079 
0080 }
0081 
0082 Q_DECLARE_TYPEINFO(KDevelop::BuildItem, Q_MOVABLE_TYPE);
0083 
0084 #endif