void Variable::handleProperty(const QDomElement &xml) { Q_ASSERT(!xml.isNull()); Q_ASSERT(xml.nodeName() == "property"); setInScope(true); m_fullName = xml.attribute("fullname"); //kDebug() << m_fullName; if (xml.firstChild().isText()) { QString v = xml.firstChild().toText().data(); if (xml.attribute("encoding") == "base64") { //TODO: use Connection::m_codec->toUnicode v = QString::fromUtf8(QByteArray::fromBase64(xml.text().toAscii())); } //kDebug() << "value" << v; setValue(v); } QMap<QString, Variable*> existing; for (int i = 0; i < childCount() - (hasMore() ? 1 : 0) ; i++) { Q_ASSERT(dynamic_cast<Variable*>(child(i))); Variable* v = static_cast<Variable*>(child(i)); existing[v->expression()] = v; } QSet<QString> current; QDomElement el = xml.firstChildElement("property"); while (!el.isNull()) { QString name = el.attribute("name"); //kDebug() << name; current << name; Variable* v = 0; if( !existing.contains(name) ) { v = new Variable(model(), this, name); appendChild( v, false ); } else { v = existing[name]; } v->handleProperty(el); el = el.nextSiblingElement("property"); } for (int i = 0; i < childCount() - (hasMore() ? 1 : 0); ++i) { Q_ASSERT(dynamic_cast<KDevelop::Variable*>(child(i))); KDevelop::Variable* v = static_cast<KDevelop::Variable*>(child(i)); if (!current.contains(v->expression())) { removeChild(i); --i; delete v; } } if (!childCount() && xml.attribute("children") == "1") { kDebug() << "has more" << this; setHasMore(true); if (isExpanded()) { fetchMoreChildren(); } } }