19 #include <QXmlAttributes> 21 #include <QDomDocument> 22 #include <QDomElement> 23 #include <QDomNamedNodeMap> 26 #include <QTextStream> 28 #include <vamp-hostsdk/PluginBase.h> 33 using std::shared_ptr;
34 using std::dynamic_pointer_cast;
47 rv.replace(
";",
"[[SEMICOLON]]");
48 rv.replace(
"=",
"[[EQUALS]]");
56 rv.replace(
"[[SEMICOLON]]",
";");
57 rv.replace(
"[[EQUALS]]",
"=");
63 QString indent, QString extraAttributes)
const 67 stream << QString(
"<plugin identifier=\"%1\" name=\"%2\" description=\"%3\" maker=\"%4\" version=\"%5\" copyright=\"%6\" %7 ")
74 .arg(extraAttributes);
76 if (!
m_plugin->getPrograms().empty()) {
77 stream << QString(
"program=\"%1\" ")
81 Vamp::PluginBase::ParameterList parameters =
84 for (Vamp::PluginBase::ParameterList::const_iterator i = parameters.begin();
85 i != parameters.end(); ++i) {
91 stream << QString(
"param-%1=\"%2\" ")
93 .arg(
m_plugin->getParameter(i->identifier));
98 std::map<std::string, std::string> configurePairs =
101 for (std::map<std::string, std::string>::iterator i = configurePairs.begin();
102 i != configurePairs.end(); ++i) {
103 QString key = i->first.c_str();
104 QString value = i->second.c_str();
107 if (config !=
"") config +=
";";
108 config += QString(
"%1=%2").arg(key).arg(value);
111 stream << QString(
"configuration=\"%1\" ")
119 #define CHECK_ATTRIBUTE(ATTRIBUTE, ACCESSOR) \ 120 QString ATTRIBUTE = attrs.value(#ATTRIBUTE); \ 121 if (ATTRIBUTE != "" && ATTRIBUTE != ACCESSOR().c_str()) { \ 122 cerr << "WARNING: PluginXml::setParameters: Plugin " \ 123 << #ATTRIBUTE << " does not match (attributes have \"" \ 124 << ATTRIBUTE << "\", my " \ 125 << #ATTRIBUTE << " is \"" << ACCESSOR() << "\")" << endl; \ 138 int version = attrs.value(
"version").trimmed().toInt(&ok);
139 if (ok && version !=
m_plugin->getPluginVersion()) {
140 cerr <<
"WARNING: PluginXml::setParameters: Plugin version does not match (attributes have " << version <<
", my version is " <<
m_plugin->getPluginVersion() <<
")" << endl;
145 QString config = attrs.value(
"configuration");
147 QStringList configList = config.split(
";");
148 for (QStringList::iterator i = configList.begin();
149 i != configList.end(); ++i) {
150 QStringList kv = i->split(
"=");
151 if (kv.count() < 2) {
152 cerr <<
"WARNING: PluginXml::setParameters: Malformed configure pair string: \"" << *i <<
"\"" << endl;
155 QString key(kv[0]), value(kv[1]);
158 rtpi->configure(key.toStdString(), value.toStdString());
163 if (!
m_plugin->getPrograms().empty()) {
164 m_plugin->selectProgram(attrs.value(
"program").toStdString());
167 Vamp::PluginBase::ParameterList parameters =
168 m_plugin->getParameterDescriptors();
170 for (Vamp::PluginBase::ParameterList::const_iterator i =
171 parameters.begin(); i != parameters.end(); ++i) {
173 QString pname = QString(
"param-%1")
175 (QString(i->identifier.c_str())));
177 if (attrs.value(pname) ==
"") {
183 float value = attrs.value(pname).trimmed().toFloat(&ok);
187 m_plugin->setParameter(i->identifier, value);
189 cerr <<
"WARNING: PluginXml::setParameters: Invalid value \"" << attrs.value(pname) <<
"\" for parameter \"" << i->identifier <<
"\" (attribute \"" << pname <<
"\")" << endl;
206 if (!doc.setContent(xml,
false, &error, &errorLine, &errorColumn)) {
207 cerr <<
"PluginXml::setParametersFromXml: Error in parsing XML: " << error <<
" at line " << errorLine <<
", column " << errorColumn << endl;
208 cerr <<
"Input follows:" << endl;
210 cerr <<
"Input ends." << endl;
214 QDomElement pluginElt = doc.firstChildElement(
"plugin");
215 QDomNamedNodeMap attrNodes = pluginElt.attributes();
216 QXmlAttributes attrs;
218 for (
int i = 0; i < attrNodes.length(); ++i) {
219 QDomAttr attr = attrNodes.item(i).toAttr();
220 if (attr.isNull())
continue;
222 attrs.append(attr.name(),
"",
"", attr.value());
231 s.replace(QRegExp(
"[^a-zA-Z0-9_]*"),
"");
virtual void setParametersFromXml(QString xml)
Set the parameters and program of a plugin from an XML plugin element as returned by toXml...
void toXml(QTextStream &stream, QString indent="", QString extraAttributes="") const override
Export plugin settings to XML.
QString stripInvalidParameterNameCharacters(QString) const
static QString encodeEntities(QString)
virtual void setParameters(const QXmlAttributes &)
Set the parameters and program of a plugin from a set of XML attributes.
#define CHECK_ATTRIBUTE(ATTRIBUTE, ACCESSOR)
PluginXml(std::shared_ptr< Vamp::PluginBase > plugin)
std::shared_ptr< Vamp::PluginBase > m_plugin
virtual ConfigurationPairMap getConfigurePairs()
static QString decodeConfigurationChars(QString text)
static QString encodeConfigurationChars(QString text)