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