LMMS
Loading...
Searching...
No Matches
PluginFactory.h
Go to the documentation of this file.
1/*
2 * PluginFactory.h
3 *
4 * Copyright (c) 2015 Lukas W <lukaswhl/at/gmail.com>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_PLUGIN_FACTORY_H
26#define LMMS_PLUGIN_FACTORY_H
27
28#include <memory>
29#include <string>
30#include <vector>
31
32#include <QFileInfo>
33#include <QList>
34#include <QString>
35
36#include "lmms_export.h"
37#include "Plugin.h"
38
39class QLibrary; // IWYU pragma: keep
40
41namespace lmms
42{
43
44class LMMS_EXPORT PluginFactory
45{
46public:
48 {
49 QString name() const;
50 QFileInfo file;
51 std::shared_ptr<QLibrary> library = nullptr;
53
54 bool isNull() const {return ! library;}
55 };
56 using PluginInfoList = QList<PluginInfo>;
57 using DescriptorMap = QMultiMap<Plugin::Type, Plugin::Descriptor*>;
58
60 ~PluginFactory() = default;
61
62 static void setupSearchPaths();
63 static QList<QRegularExpression> getExcludePatterns(const char* envVar);
64
67 static PluginFactory* instance();
68
72
79
81 const PluginInfoList& pluginInfos() const;
83 PluginInfoAndKey pluginSupportingExtension(const QString& ext);
84
88 PluginInfo pluginInfo(const char* name) const;
89
92 QString errorString(QString pluginName) const;
93
94public slots:
95 void discoverPlugins();
96
97private:
100
101 QMap<QString, PluginInfoAndKey> m_pluginByExt;
102 std::vector<std::string> m_garbage;
103
104 QHash<QString, QString> m_errors;
105
106 static std::unique_ptr<PluginFactory> s_instance;
107
108 static void filterPlugins(QSet<QFileInfo>& files);
109};
110
111//Short-hand function
112LMMS_EXPORT PluginFactory* getPluginFactory();
113
114
115} // namespace lmms
116
117#endif // LMMS_PLUGIN_FACTORY_H
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition PluginFactory.h:45
static QList< QRegularExpression > getExcludePatterns(const char *envVar)
Definition PluginFactory.cpp:249
DescriptorMap m_descriptors
Definition PluginFactory.h:98
static PluginFactory * instance()
Definition PluginFactory.cpp:95
Plugin::DescriptorList descriptors() const
Returns a list of all found plugins' descriptors.
Definition PluginFactory.cpp:108
QMultiMap< Plugin::Type, Plugin::Descriptor * > DescriptorMap
Definition PluginFactory.h:57
PluginInfoList m_pluginInfos
Definition PluginFactory.h:99
static void setupSearchPaths()
Definition PluginFactory.cpp:62
QList< PluginInfo > PluginInfoList
Definition PluginFactory.h:56
~PluginFactory()=default
static std::unique_ptr< PluginFactory > s_instance
Definition PluginFactory.h:106
QMap< QString, PluginInfoAndKey > m_pluginByExt
Definition PluginFactory.h:101
std::vector< std::string > m_garbage
cleaned up at destruction
Definition PluginFactory.h:102
QHash< QString, QString > m_errors
Definition PluginFactory.h:104
static void filterPlugins(QSet< QFileInfo > &files)
Definition PluginFactory.cpp:271
PluginFactory()
Definition PluginFactory.cpp:56
Type
Definition Plugin.h:76
QList< Descriptor * > DescriptorList
Definition Plugin.h:235
static const char * name
Definition pugl.h:1582
static char ** files
Definition misc.c:28
Definition AudioAlsa.cpp:35
PluginFactory * getPluginFactory()
Definition PluginFactory.cpp:103
Definition pluginlistdialog.cpp:402
Definition Plugin.h:92
Definition PluginFactory.h:74
PluginInfo info
Definition PluginFactory.h:75
Plugin::Descriptor::SubPluginFeatures::Key key
Definition PluginFactory.h:76
bool isNull() const
Definition PluginFactory.h:77
Definition PluginFactory.h:48
std::shared_ptr< QLibrary > library
Definition PluginFactory.h:51
QFileInfo file
Definition PluginFactory.h:50
bool isNull() const
Definition PluginFactory.h:54
Plugin::Descriptor * descriptor
Definition PluginFactory.h:52