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

0001 /*
0002     SPDX-FileCopyrightText: 2013 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_PLUGIN_PROJECTFILTERPROVIDER_H
0008 #define KDEVPLATFORM_PLUGIN_PROJECTFILTERPROVIDER_H
0009 
0010 #include <interfaces/iplugin.h>
0011 #include <project/interfaces/iprojectfilterprovider.h>
0012 
0013 #include "projectfilter.h"
0014 
0015 #include <QVariantList>
0016 
0017 namespace KDevelop {
0018 
0019 class ProjectFilterProvider: public IPlugin, public IProjectFilterProvider
0020 {
0021     Q_OBJECT
0022     Q_INTERFACES( KDevelop::IProjectFilterProvider )
0023 
0024 public:
0025     explicit ProjectFilterProvider( QObject* parent = nullptr, const QVariantList& args = QVariantList() );
0026 
0027     QSharedPointer<IProjectFilter> createFilter(IProject* project) const override;
0028 
0029     ContextMenuExtension contextMenuExtension(Context* context, QWidget* parent) override;
0030 
0031     int perProjectConfigPages() const override;
0032     ConfigPage* perProjectConfigPage(int number, const ProjectConfigOptions& options, QWidget* parent) override;
0033 
0034 Q_SIGNALS:
0035     void filterChanged(KDevelop::IProjectFilterProvider*, KDevelop::IProject*);
0036 
0037 public Q_SLOTS:
0038     void updateProjectFilters(KDevelop::IProject* project);
0039 
0040 private Q_SLOTS:
0041     void projectClosing(KDevelop::IProject*);
0042     void projectAboutToBeOpened(KDevelop::IProject*);
0043 
0044     void addFilterFromContextMenu();
0045 
0046 private:
0047     QHash<KDevelop::IProject*, QVector<Filter> > m_filters;
0048 };
0049 
0050 }
0051 
0052 #endif // KDEVPLATFORM_PLUGIN_PROJECTFILTERPROVIDER_H