/** * Přečte celou petriho síť z reader a uloží ji do myPetriNet * @param reader obsahuje stream reader s xml * @return 0 Ok, jinak chyba */ int XMLHandler::readPetriNet(QXmlStreamReader *reader) { //reader->readNext(); //prectu zacatek dokumentu while(!reader->atEnd() && !reader->hasError()) { if(reader->isStartElement() && reader->name()=="petrinet") { myPetriNet->setName(reader->attributes().value("name").toString()); myPetriNet->setVersion(reader->attributes().value("version").toString()); myPetriNet->setAuthor(reader->attributes().value("author").toString()); while(!(reader->isEndElement() && reader->name() == "petrinet") && !reader->hasError()) { if (reader->isStartElement()) { if(reader->name() =="description") { myPetriNet->setDescription(reader->readElementText()); } else if (reader->name() == "place" ) { readPlace(reader); } else if (reader->name() == "transition") { readTransition(reader); } else if (reader->name() == "arc") { readArc(reader); } } reader->readNext(); } } reader->readNext(); } if (reader->hasError()) { qDebug() << "reader->hasErrror()" << reader->errorString(); return -1; } reader->clear(); return 0; }
Clip* XMLizer::readClip( QDomElement &element, QList<Source*> *sourcesList, Scene *scene, bool &readError ) { QDomNodeList nodes = element.childNodes(); QString name; double posInTrack = 0; double startTime = 0; double length = 0; double speed = 1; bool okName = false, okPos = false, okStart = false, okLen = false; Clip *clip = NULL; speed = element.attribute( "speed" ).toDouble(); if ( speed == 0.0 ) speed = 1.0; for ( int i = 0; i < nodes.count(); ++i ) { QDomElement e = nodes.at( i ).toElement(); if ( e.isNull() ) continue; if ( e.tagName() == "Name" ) { name = e.text(); okName = true; } else if ( e.tagName() == "PosInTrack" ) { posInTrack = e.text().toDouble(); okPos = true; } else if ( e.tagName() == "StartTime" ) { startTime = e.text().toDouble(); okStart = true; } else if ( e.tagName() == "Length" ) { length = e.text().toDouble(); okLen = true; } } if ( !( okName && okPos && okStart && okLen ) ) { readError = true; return clip; } // check if source exists and create clip for ( int i = 0; i < sourcesList->count(); ++i ) { if ( sourcesList->at(i)->getFileName() == name ) { clip = scene->createClip( sourcesList->at(i), posInTrack, startTime, length ); break; } } if ( !clip ) { readError = true; return clip; } clip->setSpeed( speed ); for ( int i = 0; i < nodes.count(); ++i ) { QDomElement e = nodes.at( i ).toElement(); if ( e.isNull() ) continue; if ( e.tagName() == "VideoFilter" ) { QSharedPointer<Filter> f = readFilter( e, false, readError ); if ( !f.isNull() ) { if ( f->getIdentifier() == "GLStabilize" ) { GLStabilize *stab = (GLStabilize*)f.data(); stab->setSource( clip->getSource() ); } clip->videoFilters.append( f.staticCast<GLFilter>() ); } } else if ( e.tagName() == "AudioFilter" ) { QSharedPointer<Filter> f = readFilter( e, true, readError ); if ( !f.isNull() ) clip->audioFilters.append( f.staticCast<AudioFilter>() ); } else if ( e.tagName() == "Transition" ) { readTransition( e, clip, readError ); } } return clip; }