bool Folder::readChildAspectElement(XmlStreamReader * reader) { bool loaded = false; Q_ASSERT(reader->isStartElement() && reader->name() == "child_aspect"); if (!reader->skipToNextTag()) return false; if (reader->isEndElement() && reader->name() == "child_aspect") return true; // empty element tag QString element_name = reader->name().toString(); if (element_name == "folder") { Folder * folder = new Folder(tr("Folder %1").arg(1)); if (!folder->load(reader)) { delete folder; return false; } addChild(folder); loaded = true; } else if (element_name == "column") { Column * column = new Column(tr("Column %1").arg(1), SciDAVis::Text); if (!column->load(reader)) { delete column; return false; } addChild(column); loaded = true; } else { foreach(QObject * plugin, QPluginLoader::staticInstances()) { XmlElementAspectMaker * maker = qobject_cast<XmlElementAspectMaker *>(plugin); if (maker && maker->canCreate(element_name)) { AbstractAspect * aspect = maker->createAspectFromXml(reader); if (aspect) { addChild(aspect); loaded = true; break; } else { reader->raiseError(tr("creation of aspect from element '%1' failed").arg(element_name)); return false; } } } }
/*! Loads from XML. */ bool FileDataSource::load(XmlStreamReader* reader) { if(!reader->isStartElement() || reader->name() != "fileDataSource") { reader->raiseError(i18n("no fileDataSource element found")); return false; } if (!readBasicAttributes(reader)) return false; QString attributeWarning = i18n("Attribute '%1' missing or empty, default value is used"); QXmlStreamAttributes attribs; QString str; while (!reader->atEnd()) { reader->readNext(); if (reader->isEndElement() && reader->name() == "fileDataSource") break; if (!reader->isStartElement()) continue; if (reader->name() == "comment") { if (!readCommentElement(reader)) return false; } else if (reader->name() == "general"){ attribs = reader->attributes(); str = attribs.value("fileName").toString(); if(str.isEmpty()) reader->raiseWarning(attributeWarning.arg("'fileName'")); else m_fileName = str; str = attribs.value("fileType").toString(); if(str.isEmpty()) reader->raiseWarning(attributeWarning.arg("'fileType'")); else m_fileType = (FileType)str.toInt(); str = attribs.value("fileWatched").toString(); if(str.isEmpty()) reader->raiseWarning(attributeWarning.arg("'fileWatched'")); else m_fileWatched = str.toInt(); str = attribs.value("fileLinked").toString(); if(str.isEmpty()) reader->raiseWarning(attributeWarning.arg("'fileLinked'")); else m_fileLinked = str.toInt(); } else if (reader->name() == "asciiFilter") { m_filter = new AsciiFilter(); if (!m_filter->load(reader)) return false; } else if(reader->name() == "column") { Column* column = new Column("", AbstractColumn::Text); if (!column->load(reader)) { delete column; setColumnCount(0); return false; } addChild(column); } else {// unknown element reader->raiseWarning(i18n("unknown element '%1'", reader->name().toString())); if (!reader->skipToEndElement()) return false; } } //read the content of the file if it was only linked if (m_fileLinked) this->read(); return !reader->hasError(); }