LMMS
Loading...
Searching...
No Matches
Plugin.h
Go to the documentation of this file.
1/*
2 * Plugin.h - class plugin, the base-class and generic interface for all plugins
3 *
4 * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
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_H
26#define LMMS_PLUGIN_H
27
28#include <QStringList>
29#include <QMap>
30
31#include "JournallingObject.h"
32#include "Model.h"
33
34
35class QWidget;
36
37namespace lmms
38{
39
41class PixmapLoader;
42
43namespace gui
44{
45
46class PluginView;
47
48}
49
71class LMMS_EXPORT Plugin : public Model, public JournallingObject
72{
73 Q_OBJECT
74public:
75 enum class Type
76 {
77 Instrument, // instrument being used in channel-track
78 Effect, // effect-plugin for effect-board
79 ImportFilter, // filter for importing a file
80 ExportFilter, // filter for exporting a file
81 Tool, // additional tool (level-meter etc)
82 Library, // simple library holding a code-base for
83 // several other plugins (e.g. VST-support)
85 Undefined = 255
86 } ;
87
92 {
93 const char * name;
94 const char * displayName;
95 const char * description;
96 const char * author;
100 const char * supportedFileTypes;
101
102 inline bool supportsFileType( const QString& extension ) const
103 {
104 return QString( supportedFileTypes ).split( QChar( ',' ) ).contains( extension );
105 }
106
118 class LMMS_EXPORT SubPluginFeatures
119 {
120 public:
135 struct Key
136 {
137 using AttributeMap = QMap<QString, QString>;
138
139 inline Key( const Plugin::Descriptor * desc = nullptr,
140 const QString & name = QString(),
141 const AttributeMap & am = AttributeMap()
142 )
143 :
144 desc( desc ),
145 name( name ),
146 attributes( am )
147 {
148 }
149
150 Key( const QDomElement & key );
151
152 QDomElement saveXML( QDomDocument & doc ) const;
153
154 inline bool isValid() const
155 {
156 return desc != nullptr;
157 }
158
167 QString name;
171
172 // helper functions to retrieve data that is
173 // not part of the key, but mapped via desc->subPluginFeatures
174 QString additionalFileExtensions() const;
175 QString displayName() const;
176 QString description() const;
177 const PixmapLoader* logo() const;
178 } ;
179
180 using KeyList = QList<Key>;
181
186
187 virtual ~SubPluginFeatures() = default;
188
189 virtual void fillDescriptionWidget( QWidget *, const Key * ) const
190 {
191 }
192
196 virtual void listSubPluginKeys( const Plugin::Descriptor *, KeyList & ) const
197 {
198 }
199
200
201 private:
202 // You can add values mapped by "Key" below
203 // The defaults are sane, i.e. redirect to sub plugin's
204 // supererior descriptor
205
206 virtual QString additionalFileExtensions(const Key&) const
207 {
208 return QString();
209 }
210
211 virtual QString displayName(const Key& k) const
212 {
213 return k.isValid() ? k.name : QString();
214 }
215
216 virtual QString description(const Key& k) const
217 {
218 return k.isValid() ? k.desc->description : QString();
219 }
220
221 virtual const PixmapLoader* logo(const Key& k) const
222 {
223 Q_ASSERT(k.desc);
224 return k.desc->logo;
225 }
226
227 protected:
229 } ;
230
232
233 } ;
234 // typedef a list so we can easily work with list of plugin descriptors
235 using DescriptorList = QList<Descriptor*>;
236
241 const Descriptor::SubPluginFeatures::Key *key = nullptr);
242 ~Plugin() override = default;
243
245 QString displayName() const override;
246
248 const PixmapLoader *logo() const;
249
251 inline Type type() const
252 {
253 return m_descriptor->type;
254 }
255
257 inline const Descriptor * descriptor() const
258 {
259 return m_descriptor;
260 }
261
267 {
268 return m_key;
269 }
270
273 virtual void loadFile( const QString & file );
274
277 virtual AutomatableModel* childModel( const QString & modelName );
278
282 static Plugin * instantiateWithKey(const QString& pluginName, Model * parent,
283 const Descriptor::SubPluginFeatures::Key *key,
284 bool keyFromDnd = false);
285
290 static Plugin * instantiate(const QString& pluginName, Model * parent, void *data);
291
293 gui::PluginView * createView( QWidget * parent );
294
295protected:
297 virtual gui::PluginView* instantiateView( QWidget * ) = 0;
298 void collectErrorForUI( QString errMsg );
299
300
301private:
303
305
306 // pointer to instantiation-function in plugin
307 using InstantiationHook = Plugin* (*)(Model*, void*);
308} ;
309
310
311} // namespace lmms
312
313#endif // LMMS_PLUGIN_H
static LV2_Handle instantiate(const LV2_Descriptor *descriptor, double rate, const char *path, const LV2_Feature *const *features)
Definition bad_syntax.c:57
Definition AutomatableModel.h:77
Definition Effect.h:53
Definition ExportFilter.h:40
Definition ImportFilter.h:41
Definition Instrument.h:52
JournallingObject()
Definition JournallingObject.cpp:36
Definition Model.h:37
Model(Model *parent, QString displayName=QString(), bool defaultConstructed=false)
Definition Model.cpp:30
Definition embed.h:73
virtual void listSubPluginKeys(const Plugin::Descriptor *, KeyList &) const
Definition Plugin.h:196
virtual QString description(const Key &k) const
Definition Plugin.h:216
QList< Key > KeyList
Definition Plugin.h:180
const Plugin::Type m_type
Definition Plugin.h:228
virtual QString displayName(const Key &k) const
Definition Plugin.h:211
virtual void fillDescriptionWidget(QWidget *, const Key *) const
Definition Plugin.h:189
virtual const PixmapLoader * logo(const Key &k) const
Definition Plugin.h:221
SubPluginFeatures(Plugin::Type type)
Definition Plugin.h:182
virtual QString additionalFileExtensions(const Key &) const
Definition Plugin.h:206
Definition Plugin.h:72
Type
Definition Plugin.h:76
Plugin *(*)(Model *, void *) InstantiationHook
Definition Plugin.h:307
void collectErrorForUI(QString errMsg)
Definition Plugin.cpp:255
Plugin(const Descriptor *descriptor, Model *parent, const Descriptor::SubPluginFeatures::Key *key=nullptr)
Definition Plugin.cpp:60
QString displayName() const override
Return display-name out of sub plugin or descriptor.
Definition Plugin.cpp:93
const Descriptor * m_descriptor
Definition Plugin.h:302
virtual gui::PluginView * instantiateView(QWidget *)=0
Create a view for the model.
const PixmapLoader * logo() const
Return logo out of sub plugin or descriptor.
Definition Plugin.cpp:107
const Descriptor::SubPluginFeatures::Key & key() const
Definition Plugin.h:266
~Plugin() override=default
const Descriptor * descriptor() const
Return plugin Descriptor.
Definition Plugin.h:257
Descriptor::SubPluginFeatures::Key m_key
Definition Plugin.h:304
QList< Descriptor * > DescriptorList
Definition Plugin.h:235
Type type() const
Return plugin type.
Definition Plugin.h:251
Definition PluginView.h:36
register unsigned k
Definition inflate.c:946
static uintptr_t parent
Definition pugl.h:1644
JSAMPIMAGE data
Definition jpeglib.h:945
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
@ Other
Definition LadspaManager.h:72
QString displayName() const
Definition Plugin.cpp:130
QString description() const
Definition Plugin.cpp:155
const PixmapLoader * logo() const
Definition Plugin.cpp:144
AttributeMap attributes
Definition Plugin.h:170
QString additionalFileExtensions() const
Definition Plugin.cpp:117
Key(const Plugin::Descriptor *desc=nullptr, const QString &name=QString(), const AttributeMap &am=AttributeMap())
Definition Plugin.h:139
bool isValid() const
Definition Plugin.h:154
QMap< QString, QString > AttributeMap
Definition Plugin.h:137
const Plugin::Descriptor * desc
Definition Plugin.h:161
Definition Plugin.h:92
bool supportsFileType(const QString &extension) const
Definition Plugin.h:102
const char * supportedFileTypes
csv list of extensions
Definition Plugin.h:100
int version
Definition Plugin.h:97
const char * displayName
Definition Plugin.h:94
const char * name
Definition Plugin.h:93
const PixmapLoader * logo
Definition Plugin.h:99
const char * description
Definition Plugin.h:95
Type type
Definition Plugin.h:98
const char * author
Definition Plugin.h:96
SubPluginFeatures * subPluginFeatures
Definition Plugin.h:231
ZCONST char * key
Definition crypt.c:587
struct zdirent * file
Definition win32.c:1500