void DataFile::upgrade() { projectVersion version = documentElement().attribute( "creatorversion" ). replace( "svn", "" ); if( version < "0.2.1-20070501" ) { QDomNodeList list = elementsByTagName( "arpandchords" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "arpdir" ) ) { int arpdir = el.attribute( "arpdir" ).toInt(); if( arpdir > 0 ) { el.setAttribute( "arpdir", arpdir - 1 ); } else { el.setAttribute( "arpdisabled", "1" ); } } } list = elementsByTagName( "sampletrack" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.attribute( "vol" ) != "" ) { el.setAttribute( "vol", el.attribute( "vol" ).toFloat() * 100.0f ); } else { QDomNode node = el.namedItem( "automation-pattern" ); if( !node.isElement() || !node.namedItem( "vol" ).isElement() ) { el.setAttribute( "vol", 100.0f ); } } } list = elementsByTagName( "ladspacontrols" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QDomNode anode = el.namedItem( "automation-pattern" ); QDomNode node = anode.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { QString name = node.nodeName(); if( name.endsWith( "link" ) ) { el.setAttribute( name, node.namedItem( "time" ) .toElement() .attribute( "value" ) ); QDomNode oldNode = node; node = node.nextSibling(); anode.removeChild( oldNode ); continue; } } node = node.nextSibling(); } } QDomNode node = m_head.firstChild(); while( !node.isNull() ) { if( node.isElement() ) { if( node.nodeName() == "bpm" ) { int value = node.toElement().attribute( "value" ).toInt(); if( value > 0 ) { m_head.setAttribute( "bpm", value ); QDomNode oldNode = node; node = node.nextSibling(); m_head.removeChild( oldNode ); continue; } } else if( node.nodeName() == "mastervol" ) { int value = node.toElement().attribute( "value" ).toInt(); if( value > 0 ) { m_head.setAttribute( "mastervol", value ); QDomNode oldNode = node; node = node.nextSibling(); m_head.removeChild( oldNode ); continue; } } else if( node.nodeName() == "masterpitch" ) { m_head.setAttribute( "masterpitch", -node.toElement().attribute( "value" ).toInt() ); QDomNode oldNode = node; node = node.nextSibling(); m_head.removeChild( oldNode ); continue; } } node = node.nextSibling(); } } if( version < "0.2.1-20070508" ) { QDomNodeList list = elementsByTagName( "arpandchords" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "chorddisabled" ) ) { el.setAttribute( "chord-enabled", !el.attribute( "chorddisabled" ) .toInt() ); el.setAttribute( "arp-enabled", !el.attribute( "arpdisabled" ) .toInt() ); } else if( !el.hasAttribute( "chord-enabled" ) ) { el.setAttribute( "chord-enabled", true ); el.setAttribute( "arp-enabled", el.attribute( "arpdir" ).toInt() != 0 ); } } while( !( list = elementsByTagName( "channeltrack" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "instrumenttrack" ); } list = elementsByTagName( "instrumenttrack" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "vol" ) ) { float value = el.attribute( "vol" ).toFloat(); value = roundf( value * 0.585786438f ); el.setAttribute( "vol", value ); } else { QDomNodeList vol_list = el.namedItem( "automation-pattern" ) .namedItem( "vol" ).toElement() .elementsByTagName( "time" ); for( int j = 0; !vol_list.item( j ).isNull(); ++j ) { QDomElement timeEl = list.item( j ) .toElement(); int value = timeEl.attribute( "value" ) .toInt(); value = (int)roundf( value * 0.585786438f ); timeEl.setAttribute( "value", value ); } } } } if( version < "0.3.0-rc2" ) { QDomNodeList list = elementsByTagName( "arpandchords" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.attribute( "arpdir" ).toInt() > 0 ) { el.setAttribute( "arpdir", el.attribute( "arpdir" ).toInt() - 1 ); } } } if( version < "0.3.0" ) { QDomNodeList list; while( !( list = elementsByTagName( "pluckedstringsynth" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "vibedstrings" ); el.setAttribute( "active0", 1 ); } while( !( list = elementsByTagName( "lb303" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "lb302" ); } while( !( list = elementsByTagName( "channelsettings" ) ). isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "instrumenttracksettings" ); } } if( version < "0.4.0-20080104" ) { QDomNodeList list = elementsByTagName( "fx" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); if( el.hasAttribute( "fxdisabled" ) && el.attribute( "fxdisabled" ).toInt() == 0 ) { el.setAttribute( "enabled", 1 ); } } } if( version < "0.4.0-20080118" ) { QDomNodeList list; while( !( list = elementsByTagName( "fx" ) ).isEmpty() ) { QDomElement fxchain = list.item( 0 ).toElement(); fxchain.setTagName( "fxchain" ); QDomNode rack = list.item( 0 ).firstChild(); QDomNodeList effects = rack.childNodes(); // move items one level up while( effects.count() ) { fxchain.appendChild( effects.at( 0 ) ); } fxchain.setAttribute( "numofeffects", rack.toElement().attribute( "numofeffects" ) ); fxchain.removeChild( rack ); } } if( version < "0.4.0-20080129" ) { QDomNodeList list; while( !( list = elementsByTagName( "arpandchords" ) ).isEmpty() ) { QDomElement aac = list.item( 0 ).toElement(); aac.setTagName( "arpeggiator" ); QDomNode cloned = aac.cloneNode(); cloned.toElement().setTagName( "chordcreator" ); aac.parentNode().appendChild( cloned ); } } if( version < "0.4.0-20080409" ) { QStringList s; s << "note" << "pattern" << "bbtco" << "sampletco" << "time"; for( QStringList::iterator it = s.begin(); it < s.end(); ++it ) { QDomNodeList list = elementsByTagName( *it ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); el.setAttribute( "pos", el.attribute( "pos" ).toInt()*3 ); el.setAttribute( "len", el.attribute( "len" ).toInt()*3 ); } } QDomNodeList list = elementsByTagName( "timeline" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); el.setAttribute( "lp0pos", el.attribute( "lp0pos" ).toInt()*3 ); el.setAttribute( "lp1pos", el.attribute( "lp1pos" ).toInt()*3 ); } } if( version < "0.4.0-20080607" ) { QDomNodeList list; while( !( list = elementsByTagName( "midi" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "midiport" ); } } if( version < "0.4.0-20080622" ) { QDomNodeList list; while( !( list = elementsByTagName( "automation-pattern" ) ).isEmpty() ) { QDomElement el = list.item( 0 ).toElement(); el.setTagName( "automationpattern" ); } list = elementsByTagName( "bbtrack" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QString s = el.attribute( "name" ); s.replace( QRegExp( "^Beat/Baseline " ), "Beat/Bassline " ); el.setAttribute( "name", s ); } } if( version < "0.4.0-beta1" ) { // convert binary effect-key-blobs to XML QDomNodeList list; list = elementsByTagName( "effect" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QString k = el.attribute( "key" ); if( !k.isEmpty() ) { const QList<QVariant> l = base64::decode( k, QVariant::List ).toList(); if( !l.isEmpty() ) { QString name = l[0].toString(); QVariant u = l[1]; EffectKey::AttributeMap m; // VST-effect? if( u.type() == QVariant::String ) { m["file"] = u.toString(); } // LADSPA-effect? else if( u.type() == QVariant::StringList ) { const QStringList sl = u.toStringList(); m["plugin"] = sl.value( 0 ); m["file"] = sl.value( 1 ); } EffectKey key( NULL, name, m ); el.appendChild( key.saveXML( *this ) ); } } } } if( version < "0.4.0-rc2" ) { QDomNodeList list = elementsByTagName( "audiofileprocessor" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); QString s = el.attribute( "src" ); s.replace( "drumsynth/misc ", "drumsynth/misc_" ); s.replace( "drumsynth/r&b", "drumsynth/r_n_b" ); s.replace( "drumsynth/r_b", "drumsynth/r_n_b" ); el.setAttribute( "src", s ); } list = elementsByTagName( "lb302" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); int s = el.attribute( "shape" ).toInt(); if( s >= 1 ) { s--; } el.setAttribute( "shape", QString("%1").arg(s) ); } } // new default colour for B&B tracks QDomNodeList list = elementsByTagName( "bbtco" ); for( int i = 0; !list.item( i ).isNull(); ++i ) { QDomElement el = list.item( i ).toElement(); unsigned int rgb = el.attribute( "color" ).toUInt(); if( rgb == qRgb( 64, 128, 255 ) ) { el.setAttribute( "color", bbTCO::defaultColor() ); } } // Time-signature if ( !m_head.hasAttribute( "timesig_numerator" ) ) { m_head.setAttribute( "timesig_numerator", 4 ); m_head.setAttribute( "timesig_denominator", 4 ); } if( !m_head.hasAttribute( "mastervol" ) ) { m_head.setAttribute( "mastervol", 100 ); } //printf("%s\n", toString( 2 ).toUtf8().constData()); }
QDomNodeList KGameSvgDocument::defs() const { return elementsByTagName(QLatin1String( "defs" )); }
QDomNodeList KGameSvgDocument::patterns() const { return elementsByTagName(QLatin1String( "pattern" )); }
QDomNodeList KGameSvgDocument::radialGradients() const { return elementsByTagName(QLatin1String( "radialGradient" )); }
//recursively replace all the values & return the QString result QString AIMLParser::resolveNode(QDomNode* node, QList<long> &categoriesId, const QStringList &capturedTexts, const QStringList &capturedThatTexts, const QStringList &capturedTopicTexts) { QString result(""); QString nodeName = node->nodeName(); QDomElement element = node->toElement(); if (nodeName == "random") { QVALUELIST_CLASSNAME<QDomNode> childNodes = elementsByTagName(node, "li"); uint childCount = childNodes.count(); uint random = rand() % childCount; QDomNode child = childNodes[random]; result = resolveNode(&child, categoriesId, capturedTexts, capturedThatTexts, capturedTopicTexts); } else if (nodeName == "condition") { QString name(""); uint condType = 2; if (element.hasAttribute("name")) { condType = 1; name = element.attribute("name"); if (element.hasAttribute("value")) { condType = 0; QString value = element.attribute("value").upper(); QStringList dummy; if (exactMatch(value, _parameterValue[name].upper(), dummy)) { //dirty trick to avoid infinite loop ! element.setTagName("parsedCondition"); result = resolveNode(&element, categoriesId, capturedTexts, capturedThatTexts, capturedTopicTexts); element.setTagName("condition"); } } } if (condType) { QVALUELIST_CLASSNAME<QDomNode> childNodes = elementsByTagName(node, "li"); for (int i = 0; i < childNodes.count(); i++) { QDomNode n = childNodes[i]; if (n.toElement().hasAttribute("value")) { if (condType == 2) name = n.toElement().attribute("name"); QString value = n.toElement().attribute("value").upper(); QStringList dummy; if (exactMatch(value, _parameterValue[name].upper(), dummy)) { result = resolveNode(&n, categoriesId, capturedTexts, capturedThatTexts, capturedTopicTexts); break; } } else { result = resolveNode(&n, categoriesId, capturedTexts, capturedThatTexts, capturedTopicTexts); break; } } } } else { QDomNode n = node->firstChild(); while (!n.isNull()) { result += resolveNode(&n, categoriesId, capturedTexts, capturedThatTexts, capturedTopicTexts); n = n.nextSibling(); } if (node->isText()) result = node->toText().nodeValue(); else if (nodeName == "set") _parameterValue[element.attribute("name")] = result.stripWhiteSpace(); else if (nodeName == "srai") result = getResponse(result, categoriesId, true); else if (nodeName == "think") result = ""; else if (nodeName == "system") //lvk: Remvoved for security reasons //result = executeCommand(result); ; else if (nodeName == "learn") { loadAiml(result); result = ""; } else if (nodeName == "uppercase") { result = result.upper(); } else if (nodeName == "lowercase") { result = result.lower(); } else if (!node->hasChildNodes()) { if (nodeName == "star") { int index = element.attribute("index", "1").toUInt() - 1; result = index < capturedTexts.count() ? capturedTexts[index] : QString(""); } else if (nodeName == "thatstar") { int index = element.attribute("index", "1").toUInt() - 1; result = index < capturedThatTexts.count() ? capturedThatTexts[index] : QString(""); } else if (nodeName == "topicstar") { int index = element.attribute("index", "1").toUInt() - 1; result = index < capturedTopicTexts.count() ? capturedTopicTexts[index] : QString(""); } else if (nodeName == "that") { QString indexStr = element.attribute("index", "1,1"); if (!indexStr.contains(",")) indexStr = "1," + indexStr; int index1 = indexStr.section(',', 0, 0).toInt()-1; int index2 = indexStr.section(',', 1, 1).toInt()-1; result = (index1 < _thatList.count()) && (index2 < _thatList[index1].count()) ? _thatList[index1][index2] : QString(""); } else if (nodeName == "sr") result = getResponse(capturedTexts.count() ? capturedTexts[0] : QString(""), categoriesId, true); else if ( (nodeName == "br") || (nodeName == "html:br") ) result = "\n"; else if ( nodeName == "get" ) result = _parameterValue[element.attribute("name")]; else if ( nodeName == "bot") result = _botVarValue[element.attribute("name")]; else if ( (nodeName == "person") || (nodeName == "person2") || (nodeName == "gender") ) result = capturedTexts.count() ? capturedTexts[0] : QString(""); else if (nodeName == "input") { int index = element.attribute("index", "1").toUInt() - 1; result = index < _inputList.count() ? _inputList[index] : QString(""); } //the following just to avoid warnings ! else if (nodeName == "li") ; else _logStream << "Warning: unknown tag \"" + nodeName + "\"\n"; } //the following just to avoid warnings ! else if ((nodeName == "template") || (nodeName == "pattern") || (nodeName == "li") || (nodeName == "person") || (nodeName == "person2") || (nodeName == "gender") || (nodeName == "parsedCondition")) ; else _logStream << "Warning: unknown tag \"" + nodeName + "\"\n"; } return result; }