19 #include <QXmlAttributes> 21 #include <QDomDocument> 22 #include <QDomElement> 23 #include <QDomNamedNodeMap> 26 #include <QTextStream> 28 #include <vamp-hostsdk/PluginBase.h> 44 rv.replace(
";",
"[[SEMICOLON]]");
45 rv.replace(
"=",
"[[EQUALS]]");
53 rv.replace(
"[[SEMICOLON]]",
";");
54 rv.replace(
"[[EQUALS]]",
"=");
60 QString indent, QString extraAttributes)
const 64 stream << QString(
"<plugin identifier=\"%1\" name=\"%2\" description=\"%3\" maker=\"%4\" version=\"%5\" copyright=\"%6\" %7 ")
71 .arg(extraAttributes);
73 if (!
m_plugin->getPrograms().empty()) {
74 stream << QString(
"program=\"%1\" ")
78 Vamp::PluginBase::ParameterList parameters =
81 for (Vamp::PluginBase::ParameterList::const_iterator i = parameters.begin();
82 i != parameters.end(); ++i) {
88 stream << QString(
"param-%1=\"%2\" ")
90 .arg(
m_plugin->getParameter(i->identifier));
94 dynamic_cast<RealTimePluginInstance *>(
m_plugin);
96 std::map<std::string, std::string> configurePairs =
99 for (std::map<std::string, std::string>::iterator i = configurePairs.begin();
100 i != configurePairs.end(); ++i) {
101 QString key = i->first.c_str();
102 QString value = i->second.c_str();
105 if (config !=
"") config +=
";";
106 config += QString(
"%1=%2").arg(key).arg(value);
109 stream << QString(
"configuration=\"%1\" ")
117 #define CHECK_ATTRIBUTE(ATTRIBUTE, ACCESSOR) \ 118 QString ATTRIBUTE = attrs.value(#ATTRIBUTE); \ 119 if (ATTRIBUTE != "" && ATTRIBUTE != ACCESSOR().c_str()) { \ 120 cerr << "WARNING: PluginXml::setParameters: Plugin " \ 121 << #ATTRIBUTE << " does not match (attributes have \"" \ 122 << ATTRIBUTE << "\", my " \ 123 << #ATTRIBUTE << " is \"" << ACCESSOR() << "\")" << endl; \ 136 int version = attrs.value(
"version").trimmed().toInt(&ok);
137 if (ok && version !=
m_plugin->getPluginVersion()) {
138 cerr <<
"WARNING: PluginXml::setParameters: Plugin version does not match (attributes have " << version <<
", my version is " <<
m_plugin->getPluginVersion() <<
")" << endl;
142 dynamic_cast<RealTimePluginInstance *>(
m_plugin);
144 QString config = attrs.value(
"configuration");
146 QStringList configList = config.split(
";");
147 for (QStringList::iterator i = configList.begin();
148 i != configList.end(); ++i) {
149 QStringList kv = i->split(
"=");
150 if (kv.count() < 2) {
151 cerr <<
"WARNING: PluginXml::setParameters: Malformed configure pair string: \"" << *i <<
"\"" << endl;
154 QString key(kv[0]), value(kv[1]);
157 rtpi->
configure(key.toStdString(), value.toStdString());
162 if (!
m_plugin->getPrograms().empty()) {
163 m_plugin->selectProgram(attrs.value(
"program").toStdString());
166 Vamp::PluginBase::ParameterList parameters =
167 m_plugin->getParameterDescriptors();
169 for (Vamp::PluginBase::ParameterList::const_iterator i =
170 parameters.begin(); i != parameters.end(); ++i) {
172 QString pname = QString(
"param-%1")
174 (QString(i->identifier.c_str())));
176 if (attrs.value(pname) ==
"") {
182 float value = attrs.value(pname).trimmed().toFloat(&ok);
186 m_plugin->setParameter(i->identifier, value);
188 cerr <<
"WARNING: PluginXml::setParameters: Invalid value \"" << attrs.value(pname) <<
"\" for parameter \"" << i->identifier <<
"\" (attribute \"" << pname <<
"\")" << endl;
205 if (!doc.setContent(xml,
false, &error, &errorLine, &errorColumn)) {
206 cerr <<
"PluginXml::setParametersFromXml: Error in parsing XML: " << error <<
" at line " << errorLine <<
", column " << errorColumn << endl;
207 cerr <<
"Input follows:" << endl;
209 cerr <<
"Input ends." << endl;
213 QDomElement pluginElt = doc.firstChildElement(
"plugin");
214 QDomNamedNodeMap attrNodes = pluginElt.attributes();
215 QXmlAttributes attrs;
217 for (
int i = 0; i < attrNodes.length(); ++i) {
218 QDomAttr attr = attrNodes.item(i).toAttr();
219 if (attr.isNull())
continue;
221 attrs.append(attr.name(),
"",
"", attr.value());
230 s.replace(QRegExp(
"[^a-zA-Z0-9_]*"),
"");
virtual std::string configure(std::string, std::string)
virtual void setParametersFromXml(QString xml)
Set the parameters and program of a plugin from an XML plugin element as returned by toXml.
Vamp::PluginBase * m_plugin
static QString encodeEntities(QString)
PluginXml(Vamp::PluginBase *plugin)
virtual void setParameters(const QXmlAttributes &)
Set the parameters and program of a plugin from a set of XML attributes.
#define CHECK_ATTRIBUTE(ATTRIBUTE, ACCESSOR)
virtual ConfigurationPairMap getConfigurePairs()
virtual void toXml(QTextStream &stream, QString indent="", QString extraAttributes="") const
Export plugin settings to XML.
static QString decodeConfigurationChars(QString text)
static QString encodeConfigurationChars(QString text)
QString stripInvalidParameterNameCharacters(QString) const