1 #pragma once
2 
3 #include <QList>
4 #include <QString>
5 #include <QtDebug>
6 #include <QSharedPointer>
7 
8 #include "effects/effectmanifestparameter.h"
9 #include "effects/defs.h"
10 
11 // An EffectManifest is a full description of the metadata associated with an
12 // effect (e.g. name, author, version, description, etc.) and the parameters of
13 // the effect that are intended to be exposed to the rest of Mixxx for user or
14 // script control.
15 //
16 // EffectManifest is composed purely of simple data types, and when an
17 // EffectManifest is const, it should be completely immutable. EffectManifest is
18 // meant to be used in most cases as a reference, and in Qt collections, so it
19 // is important that the implicit copy and assign constructors work, and that
20 // the no-argument constructor be non-explicit. All methods are left virtual to
21 // allow a backend to replace the entire functionality with its own (for
22 // example, a database-backed manifest)
23 class EffectManifest final {
24   public:
EffectManifest()25     EffectManifest()
26         : m_backendType(EffectBackendType::Unknown),
27           m_isMixingEQ(false),
28           m_isMasterEQ(false),
29           m_effectRampsFromDry(false),
30           m_bAddDryToWet(false),
31           m_metaknobDefault(0.5) {
32     }
33 
id()34     const QString& id() const {
35         return m_id;
36     }
setId(const QString & id)37     void setId(const QString& id) {
38         m_id = id;
39     }
40 
name()41     const QString& name() const {
42         return m_name;
43     }
setName(const QString & name)44     void setName(const QString& name) {
45         m_name = name;
46     }
47 
shortName()48     const QString& shortName() const {
49         return m_shortName;
50     }
setShortName(const QString & shortName)51     void setShortName(const QString& shortName) {
52         m_shortName = shortName;
53     }
54 
displayName()55     const QString& displayName() const {
56         if (!m_shortName.isEmpty()) {
57             return m_shortName;
58         } else {
59             return m_name;
60         }
61     }
62 
backendType()63     const EffectBackendType& backendType() const {
64         return m_backendType;
65     }
setBackendType(const EffectBackendType & type)66     void setBackendType(const EffectBackendType& type) {
67         m_backendType = type;
68     }
69 
author()70     const QString& author() const {
71         return m_author;
72     }
setAuthor(const QString & author)73     void setAuthor(const QString& author) {
74         m_author = author;
75     }
76 
version()77     const QString& version() const {
78         return m_version;
79     }
setVersion(const QString & version)80     void setVersion(const QString& version) {
81         m_version = version;
82     }
83 
description()84     const QString& description() const {
85         return m_description;
86     }
87 
isMixingEQ()88     const bool& isMixingEQ() const {
89         return m_isMixingEQ;
90     }
91 
setIsMixingEQ(const bool value)92     void setIsMixingEQ(const bool value) {
93         m_isMixingEQ = value;
94     }
95 
isMasterEQ()96     const bool& isMasterEQ() const {
97         return m_isMasterEQ;
98     }
99 
setIsMasterEQ(const bool value)100     void setIsMasterEQ(const bool value) {
101         m_isMasterEQ = value;
102     }
103 
setDescription(const QString & description)104     void setDescription(const QString& description) {
105         m_description = description;
106     }
107 
parameters()108     const QList<EffectManifestParameterPointer>& parameters() const {
109         return m_parameters;
110     }
111 
addParameter()112     EffectManifestParameterPointer addParameter() {
113         EffectManifestParameterPointer effectManifestParameterPointer(
114                 new EffectManifestParameter());
115         m_parameters.append(effectManifestParameterPointer);
116         return effectManifestParameterPointer;
117     }
118 
parameter(int i)119     EffectManifestParameterPointer parameter(int i) {
120         return m_parameters[i];
121     }
122 
effectRampsFromDry()123     bool effectRampsFromDry() const {
124         return m_effectRampsFromDry;
125     }
setEffectRampsFromDry(bool effectFadesFromDry)126     void setEffectRampsFromDry(bool effectFadesFromDry) {
127         m_effectRampsFromDry = effectFadesFromDry;
128     }
129 
addDryToWet()130     bool addDryToWet() const {
131         return m_bAddDryToWet;
132     }
setAddDryToWet(bool addDryToWet)133     void setAddDryToWet(bool addDryToWet) {
134         m_bAddDryToWet = addDryToWet;
135     }
136 
metaknobDefault()137     double metaknobDefault() const {
138         return m_metaknobDefault;
139     }
setMetaknobDefault(double metaknobDefault)140     void setMetaknobDefault(double metaknobDefault) {
141         m_metaknobDefault = metaknobDefault;
142     }
143 
backendName()144     QString backendName() {
145         switch (m_backendType) {
146             case EffectBackendType::BuiltIn:
147                 return QString("Built-in");
148             case EffectBackendType::LV2:
149                 return QString("LV2");
150             default:
151                 return QString("Unknown");
152         }
153     }
154 
155     // Use this when showing the string in the GUI
translatedBackendName()156     QString translatedBackendName() {
157         switch (m_backendType) {
158             case EffectBackendType::BuiltIn:
159                 //: Used for effects that are built into Mixxx
160                 return QObject::tr("Built-in");
161             case EffectBackendType::LV2:
162                 return QString("LV2");
163             default:
164                 return QString();
165         }
166     }
backendTypeFromString(const QString & name)167     static EffectBackendType backendTypeFromString(const QString& name) {
168         if (name == "Built-in") {
169             return EffectBackendType::BuiltIn;
170         } else if (name == "LV2") {
171             return EffectBackendType::LV2;
172         } else {
173             return EffectBackendType::Unknown;
174         }
175     }
176 
177   private:
debugString()178     QString debugString() const {
179         return QString("EffectManifest(%1)").arg(m_id);
180     }
181 
182     QString m_id;
183     QString m_name;
184     QString m_shortName;
185     EffectBackendType m_backendType;
186     QString m_author;
187     QString m_version;
188     QString m_description;
189     // This helps us at DlgPrefEQ's basic selection of Equalizers
190     bool m_isMixingEQ;
191     bool m_isMasterEQ;
192     QList<EffectManifestParameterPointer> m_parameters;
193     bool m_effectRampsFromDry;
194     bool m_bAddDryToWet;
195     double m_metaknobDefault;
196 };
197