示例#1
0
/**
  * 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;
}
示例#2
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;
}