added support for JSCode inside XML

This commit is contained in:
Guido Ranzuglia granzuglia 2011-09-20 09:11:23 +00:00
parent feecd607b7
commit 93681f5b2e
3 changed files with 56 additions and 3 deletions

View File

@ -17,6 +17,8 @@
<xs:element ref='FILTER' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='pluginName' type='xs:string' use='required'/>
<xs:attribute name='pluginAuthor' type='xs:string' use='required'/>
<xs:attribute name='pluginEmail' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
@ -25,6 +27,7 @@
<xs:sequence>
<xs:element ref='FILTER_HELP'/>
<xs:element ref='PARAM' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='FILTER_JSCODE' minOccurs='0' maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='filterName' type='xs:string' use='required'/>
<xs:attribute name='filterFunction' type='xs:string' use='required'/>
@ -39,7 +42,12 @@
<xs:complexType mixed='true'>
</xs:complexType>
</xs:element>
<xs:element name='FILTER_JSCODE'>
<xs:complexType mixed='true'>
</xs:complexType>
</xs:element>
<xs:element name='PARAM'>
<xs:complexType>
<xs:sequence>
@ -78,7 +86,7 @@
<xs:complexType mixed='true'>
</xs:complexType>
</xs:element>
<xs:element name='CHECKBOX_GUI'>
<xs:complexType>
<xs:attribute name='guiLabel' type='xs:string' use='required'/>

View File

@ -103,6 +103,25 @@ QString XMLFilterInfo::filterHelp( const QString& filterName) const
return QString();
}
QString XMLFilterInfo::filterElement( const QString& filterName,const QString& filterElement) const
{
//QString namesQuery = "doc(\"" + this->fileName + "\")/MESHLAB_FILTER_INTERFACE/PLUGIN/FILTER[@name = \"" + filterName + "\"]/FILTER_HELP/string()";
QString namesQuery = docMFIPluginFilterName(fileName,filterName) + "/" + filterElement + "/string()";
try
{
QStringList res = query(namesQuery);
if (res.size() != 1)
throw ParsingException("There is not help tag for filter " + filterName);
return res[0];
}
catch(QueryException q)
{
qDebug("Caught a QueryException %s",q.what());
}
assert(0);
return QString();
}
QString XMLFilterInfo::filterAttribute( const QString& filterName,const QString& attribute) const
{
@ -255,7 +274,7 @@ QString XMLFilterInfo::filterParameterHelp( const QString& filterName,const QStr
XMLFilterInfo::XMLMap XMLFilterInfo::filterParameterExtendedInfo( const QString& filterName,const QString& paramName ) const
{
//QString namesQuery = "for $x in doc(\"" + this->fileName + "\")/MESHLAB_FILTER_INTERFACE/PLUGIN/FILTER[@name=\"" + filterName + "\"]/PARAM[@name=\"" + paramName + "\"] return <p>type={data($x/@type)}|name={data($x/@name)}|defaultExpression={data($x/@defaultExpression)}|help={$x/PARAM_HELP}</p>/string()";
QString namesQuery = "for $x in " + docMFIPluginFilterNameParamName(fileName,filterName,paramName) + " return <p>" + attrNameAttrVal(MLXMLElNames::paramType,"$x/") + externalSep() + attrNameAttrVal(MLXMLElNames::paramName,"$x/") + externalSep() + attrNameAttrVal(MLXMLElNames::paramDefExpr,"$x/") + externalSep() + attrNameAttrVal(MLXMLElNames::paramIsImportant,"$x/") + externalSep() + MLXMLElNames::paramHelpTag + "={$x/" + MLXMLElNames::paramHelpTag + "}</p>/string()";
QString namesQuery = "for $x in " + docMFIPluginFilterNameParamName(fileName,filterName,paramName) + " return <p>" + attrNameAttrVal(MLXMLElNames::paramType,"$x/") + externalSep() + attrNameAttrVal(MLXMLElNames::paramName,"$x/") + externalSep() + attrNameAttrVal(MLXMLElNames::paramDefExpr,"$x/") + externalSep() + attrNameAttrVal(MLXMLElNames::paramIsImportant,"$x/") + externalSep() + MLXMLElNames::paramHelpTag + "={$x/" + MLXMLElNames::paramHelpTag + "}";
try
{
XMLFilterInfo::XMLMap res;
@ -333,6 +352,26 @@ QString XMLFilterInfo::filterParameterAttribute( const QString& filterName,const
return QString();
}
QString XMLFilterInfo::pluginAttribute(const QString& attribute ) const
{
QString namesQuery = docMFIPlugin(fileName) + "/<p>" +attrVal(attribute)+"</p>/string()";
try
{
QStringList res = query(namesQuery);
if (res.size() != 1)
throw ParsingException("Attribute " + attribute + " has not been specified for plugin.");
return res[0];
}
catch(QueryException e)
{
qDebug("Caught a QueryException %s",e.what());
}
assert(0);
return QString();
}
QString XMLFilterInfo::pluginName() const
{
QString namesQuery = docMFIPlugin(fileName) + "/<p>" +attrVal(MLXMLElNames::pluginScriptName)+"</p>/string()";

View File

@ -52,6 +52,8 @@ namespace MLXMLElNames
const QString pluginTag("PLUGIN");
const QString filterTag("FILTER");
const QString filterHelpTag("FILTER_HELP");
const QString filterJSCodeTag("FILTER_JSCODE");
const QString paramTag("PARAM");
const QString paramHelpTag("PARAM_HELP");
@ -67,6 +69,8 @@ namespace MLXMLElNames
const QString mfiVersion("mfiVersion");
const QString pluginScriptName("pluginName");
const QString pluginAuthor("pluginAuthor");
const QString pluginEmail("pluginEmail");
const QString filterName("filterName");
const QString filterScriptFunctName("filterFunction");
@ -146,9 +150,11 @@ public:
inline static void deleteXMLFileInfo(XMLFilterInfo* xmlInfo) {delete xmlInfo;}
QString pluginName() const;
QString pluginAttribute(const QString& attribute ) const;
QStringList filterNames() const;
QString filterHelp(const QString& filterName) const;
QString filterElement(const QString& filterName,const QString& filterElement) const;
//The function returns a QList<QMap<QString,QString>>. Each map contains "type", "name" and "defaultExpression" of a single parameter.
XMLMapList filterParameters(const QString& filterName) const;