File indexing completed on 2024-04-28 04:39:10

0001 /*
0002     SPDX-FileCopyrightText: 2005 Roberto Raggi <roberto@kdevelop.org>
0003     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KDEVPLATFORM_PLUGIN_PROJECTTREEVIEW_H
0009 #define KDEVPLATFORM_PLUGIN_PROJECTTREEVIEW_H
0010 
0011 #include <QTreeView>
0012 #include <QPointer>
0013 
0014 class QAbstractProxyModel;
0015 
0016 namespace KDevelop
0017 {
0018 class IProject;
0019 class ProjectBaseItem;
0020 class Path;
0021 }
0022 
0023 class ProjectTreeView: public QTreeView
0024 {
0025         Q_OBJECT
0026     public:
0027         explicit ProjectTreeView( QWidget *parent = nullptr );
0028         ~ProjectTreeView() override;
0029 
0030         static QModelIndex mapFromSource(const QAbstractProxyModel* proxy, const QModelIndex& sourceIdx);
0031 
0032     Q_SIGNALS:
0033         void activate( const KDevelop::Path &url );
0034 
0035     protected Q_SLOTS:
0036         void slotActivated( const QModelIndex &index );
0037         void popupContextMenu( const QPoint &pos );
0038         void openProjectConfig();
0039         void saveState(KDevelop::IProject* project = nullptr);
0040         void restoreState(KDevelop::IProject* project = nullptr);
0041         void aboutToShutdown();
0042         void projectClosed(KDevelop::IProject* project);
0043         void rowsInserted(const QModelIndex& parent, int start, int end) override;
0044         void rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) override;
0045 
0046     protected:
0047         void keyPressEvent(QKeyEvent *event) override;
0048         void dropEvent(QDropEvent* event) override;
0049         void drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const override;
0050 
0051     private:
0052         QModelIndex mapFromItem(const KDevelop::ProjectBaseItem* item);
0053         KDevelop::ProjectBaseItem* itemAtPos(const QPoint& pos) const;
0054         QList<KDevelop::ProjectBaseItem*> selectedProjects();
0055         KDevelop::IProject* getCurrentProject();
0056 
0057         QPointer<KDevelop::IProject> m_previousSelection;
0058 };
0059 
0060 #endif // KDEVPLATFORM_PLUGIN_PROJECTTREEVIEW_H
0061