Example #1
0
void Info::load(QXmlStreamReader &reader) {
    if (reader.name().toString() == "info") {
        ui->multicoreSupport->setChecked(reader.attributes().value("multicore").toString() == "1");
        on_multicoreSupport_clicked();
        ui->disableCharts->setChecked(reader.attributes().value("charts").toString() == "1");
        on_disableCharts_clicked();
        ui->renderUpdate->setText(reader.attributes().value("renderUpdate").toString());
        do {
            reader.readNext();
        }
        while (!reader.isStartElement() && !reader.isEndDocument());
    }
}
Example #2
0
void ImmersedItem::activate(QXmlStreamReader &reader) {
    if (reader.name().toString() == "item") {
        int pointsSize = reader.attributes().value("pointsSize").toString().toInt();
        int parametersSize = reader.attributes().value("parametersSize").toString().toInt();
        centerOfMass = MyVector3D(reader.attributes().value("centerOfMassX").toString().toDouble(), reader.attributes().value("centerOfMassY").toString().toDouble(), reader.attributes().value("centerOfMassZ").toString().toDouble());
        fixedPoint = MyVector3D(reader.attributes().value("fixedPointX").toString().toDouble(), reader.attributes().value("fixedPointY").toString().toDouble(), reader.attributes().value("fixedPointZ").toString().toDouble());
        id = reader.attributes().value("id").toString().toInt();
        closed = (reader.attributes().value("closed").toString() == "1" ? true : false);
        cellular = (reader.attributes().value("cellular").toString() == "1" ? true : false);
        points->clear();
        for (int i = 0; i < pointsSize; i++) {
            do { reader.readNext(); } while (!reader.isStartElement() && !reader.isEndDocument());
            points->push_back(MyVector3D(reader.attributes().value("x").toString().toDouble(), reader.attributes().value("y").toString().toDouble(), reader.attributes().value("z").toString().toDouble()));
        }
        parameters.clear();
        for (int i = 0; i < parametersSize; i++) {
            do { reader.readNext(); } while (!reader.isStartElement() && !reader.isEndDocument());
            parameters[reader.attributes().value("key").toString()] = reader.attributes().value("value").toString();
        }
        do { reader.readNext(); } while (!reader.isStartElement() && !reader.isEndDocument());
    }
}
Example #3
0
void View::load(QXmlStreamReader &reader) {
    if (reader.name().toString() == "view") {
        ui->roll->setText(reader.attributes().value("roll").toString());
        ui->pitch->setText(reader.attributes().value("pitch").toString());
        ui->yaw->setText(reader.attributes().value("yaw").toString());
        on_roll_returnPressed();
        ui->zoom->setText(reader.attributes().value("zoom").toString());
        on_zoom_returnPressed();
        ui->painter->setCurrentIndex(reader.attributes().value("painter").toString().toInt());
        on_painter_currentIndexChanged("");
        ui->cellsSize->setText(reader.attributes().value("scale1").toString());
        on_cellsSize_returnPressed();
        ui->cellsSize2->setText(reader.attributes().value("scale2").toString());
        on_cellsSize2_returnPressed();
        if (reader.attributes().hasAttribute("updatePeriod")) {
            widget->getPainter()->setBackgroundColor(QColor(reader.attributes().value("backgroundR").toString().toInt(), reader.attributes().value("backgroundG").toString().toInt(), reader.attributes().value("backgroundB").toString().toInt()));
            ui->updatePeriod->setText(reader.attributes().value("updatePeriod").toString());
            ui->updatePeriod->returnPressed();
            ui->arrowSteps->setText(reader.attributes().value("arrowSteps").toString());
            ui->arrowSteps->returnPressed();
            ui->showAxis->setChecked(reader.attributes().value("showAxis").toString() == "1");
            ui->showStatic->setChecked(reader.attributes().value("showStatic").toString() == "1");
            ui->showDynamic->setChecked(reader.attributes().value("showDynamic").toString() == "1");
            ui->showParticles->setChecked(reader.attributes().value("showParticles").toString() == "1");
            bool checked = ui->continuousAutoAdjust->isChecked();
            ui->continuousAutoAdjust->setChecked(reader.attributes().value("autoAdjust").toString() == "1");
            if (checked != ui->continuousAutoAdjust->isChecked()) {
                on_continuousAutoAdjust_clicked();
            }
            double colorOffset = reader.attributes().value("colorOffset").toString().toDouble();
            double colorInterval = reader.attributes().value("colorInterval").toString().toDouble();
            ui->colorOffset->setText(QString::number(colorOffset + colorInterval));
            ui->colorInterval->setText(QString::number(colorOffset - colorInterval));
            on_colorOffset_returnPressed();
            ui->colorSteps->setText(reader.attributes().value("colorSteps").toString());
            ui->colorSteps->returnPressed();
        }
        if (reader.attributes().hasAttribute("showColorBar")) {
            ui->showColorBar->setChecked(reader.attributes().value("showColorBar").toString() == "1");
            ui->tx->setText(reader.attributes().value("tx").toString());
            ui->ty->setText(reader.attributes().value("ty").toString());
            ui->tz->setText(reader.attributes().value("tz").toString());
            on_tx_returnPressed();
        }
        if (reader.attributes().hasAttribute("show2ndDistribution")) {
            ui->show2ndDistribution->setChecked(reader.attributes().value("show2ndDistribution").toString() == "1");
        }
        do { reader.readNext(); } while (!reader.isStartElement() && !reader.isEndDocument());
    }
}
Example #4
0
void PassiveScalarCell::activate(QXmlStreamReader &reader, Grid *grid) {
    int model = Shared::instance()->getGridConfig()->getModel();
    fixedConcentration = reader.attributes().value("fixedConcentration").toString().toDouble();
    index = reader.attributes().value("index").toString().toInt();
    initializeDistribution();
    for (int a = 0; a < PassiveScalarSingleton::getInstance()->getColorsQuantity(); a++) {
        for (int i = 0; i < model; i++) {
            f[a * model + i] = reader.attributes().value(QString("f").append(QString::number(a * model + i))).toString().toDouble();
        }
    }
    calc();
    do { reader.readNext(); } while (!reader.isStartElement() && !reader.isEndDocument());
    cell = grid->activateCell(reader);
    cell->activate(reader, grid);
}
Example #5
0
// Loads cardInfo from xml and stores in cardHash.
void CardDB::loadCardsFromXml(QXmlStreamReader &xml)
{
    while (xml.name() != "setID" && !xml.isEndDocument()) {
        xml.readNext();
    }
    QString setID;
    if (xml.name() == "setID")
        setID = xml.readElementText();
    else
        return;

    while (xml.name() != "cards" && !xml.isEndDocument()) {
        xml.readNext();
    }

    if (xml.name() == "cards") {
        while (xml.readNextStartElement()) {
            if (xml.name() == "card") {
                QString name, cost, type, ah, text;
                while (xml.readNextStartElement()) {
                    if (xml.name() == "name")
                        name = xml.readElementText();
                    else if (xml.name() == "cost")
                        cost = xml.readElementText();
                    else if (xml.name() == "type")
                        type = xml.readElementText();
                    else if (xml.name() == "ah")
                        ah = xml.readElementText();
                    else if (xml.name() == "text")
                        text = xml.readElementText();
                }
                cardHash.insert(name, new CardInfo(name,cost,type,ah,text,setID));
            }
        }
    }
}
Example #6
0
void Colors::load(QXmlStreamReader &reader) {
    if (reader.name().toString() == "colors") {
        ui->x->setText(reader.attributes().value("x").toString());
        ui->y->setText(reader.attributes().value("y").toString());
        ui->width->setText(reader.attributes().value("width").toString());
        ui->height->setText(reader.attributes().value("height").toString());
        ui->captionX->setText(reader.attributes().value("captionX").toString());
        ui->captionY->setText(reader.attributes().value("captionY").toString());
        ui->captionPt->setText(reader.attributes().value("captionPt").toString());
        on_x_returnPressed();
        if (reader.attributes().hasAttribute("colorStyle")) {
            on_colorStyle_currentIndexChanged(reader.attributes().value("colorStyle").toString().toInt());
        } else {
            on_colorStyle_currentIndexChanged(1);
            on_colorStyle_currentIndexChanged(0);
        }
        do { reader.readNext(); } while (!reader.isStartElement() && !reader.isEndDocument());
    }
}
Example #7
0
bool FrmReports::readProperties(QXmlStreamReader& xml, QString& strName, QString& strAuthor, QString& strPixmap, QString& strDescription)
{
    xml.readNextStartElement();
    xml.readNextStartElement();

    int ct=0;
    if (xml.name().toString()!=tr("properties") || !xml.isStartElement()) return false;
    while (!xml.isEndDocument() && !xml.hasError() && ct<5) {
        xml.readNext();
        if (xml.isStartElement()) {

            ct++;
            if (xml.name().toString()==tr("name")) strName=xml.readElementText();
            else if (xml.name().toString()==tr("author")) strAuthor=xml.readElementText();
            else if (xml.name().toString()==tr("icon")) strPixmap=xml.readElementText();
            else if (xml.name().toString()==tr("description")) strDescription=xml.readElementText();
            else ct--;

        }
    }

    return true;
}
Example #8
0
void PhoenixLibrary::loadXml(QString file_path)
{
    QResource resource(file_path);
    QFile in_file(resource.absoluteFilePath());
    if (in_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QXmlStreamReader reader;
        reader.setDevice(&in_file);
        while (!reader.isEndDocument()) {
            reader.readNext();
            QString element = reader.name().toString();
            qCDebug(phxLibrary) << element;
            if (element == "name")

                qCDebug(phxLibrary) << reader.readElementText();
        }

        if (reader.hasError()) {
            qCDebug(phxLibrary) << reader.errorString();
        }
        in_file.close();
    }
    else
        qCDebug(phxLibrary) << file_path << " was not opened";
}
Example #9
0
void LapTimerThread::writeTxt()
{
    QTextStream tmp(&infoFile);
    QXmlStreamReader xmlReader;
    qWarning()<<coordTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
    xmlReader.setDevice(&coordTmpFile);
    xmlReader.readNext();
    int lapNum=0;
    //Reading from the file
    xmlReader.readNext();
    while (!xmlReader.isEndDocument())
    {
        if (xmlReader.isStartElement())
        {
            QString name = xmlReader.name().toString();
            if (name == "lap")
            {
                lapNum++;
            }

        }
        else if (xmlReader.isEndElement())
        {

        }
        xmlReader.readNext();
    }
    qWarning()<<lapNum;
    coordTmpFile.close();
    for (int s=0;s<(lapNum-1);s++)
    {
    qWarning()<<"entering lap "<<s;
    tmp<<"-**********************************************\r\n";
    tmp<< "Map: " <<mapName<<"\r\n";
    qWarning()<<"header";
    xmlReader.clear();
    coordTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
    xmlReader.setDevice(&coordTmpFile);
    xmlReader.readNext();
    int lapTmpNum=0;
    bool lapNumFlag=false;
    xmlTextBuffer.clear();
    //Reading from the file
    QString start;
    while (!xmlReader.isEndDocument())
    {
        if (xmlReader.isStartElement())
        {
            QString name = xmlReader.name().toString();
            if ((name == "when")&& lapNumFlag)//read time of each element
            {
               xmlTextBuffer.append(xmlReader.readElementText());
            }
            else if (name == "lap")
            {
                lapNumFlag=(lapTmpNum==s)?true:false;
                if (lapNumFlag)
                    start = xmlReader.attributes().value("start").toString();
                lapTmpNum++;
            }
        }
        else if (xmlReader.isEndElement())
        {

        }
        xmlReader.readNext();
    }
    coordTmpFile.close();
        tmp<< "Start Time: "<< QString(start).replace(QRegExp("[TZ]")," ")<<"\r\n";
        //tmp<< "End Time: "<< QString(xmlTextBuffer.last()).replace(QRegExp("[TZ]")," ")<<"\r\n";
        //tmp<< "Duration: "<< QTime::fromMSecsSinceStartOfDay(QTime::fromString(QString(xmlTextBuffer.first()).section(QRegExp("[TZ]"),1,1),"hh:mm:ss.zzz")
              //.msecsTo(QTime::fromString(QString(xmlTextBuffer.last()).section(QRegExp("[TZ]"),1,1),"hh:mm:ss.zzz"))).toString("hh:mm:ss.zzz")<<"\r\n";
        xmlReader.clear();
        coordTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
        xmlReader.setDevice(&coordTmpFile);
        xmlReader.readNext();
        lapTmpNum=0;
        lapNumFlag=false;
        xmlTextBuffer.clear();
        //Reading from the file
        while (!xmlReader.isEndDocument())
        {
            if (xmlReader.isStartElement())
            {
                QString name = xmlReader.name().toString();
                if ((name == "coord")&& lapNumFlag)//read coord of each element
                {
                   xmlTextBuffer.append(xmlReader.readElementText());
                }
                else if (name == "lap")
                {
                    lapNumFlag=(lapTmpNum==s)?true:false;
                    lapTmpNum++;
                }
            }
            else if (xmlReader.isEndElement())
            {

            }
            xmlReader.readNext();
        }
        coordTmpFile.close();


        double distance = 0;
        double maxAlt = 0, minAlt = 10000;
        QList <QString>::iterator i;
        for (i=xmlTextBuffer.begin();i!=xmlTextBuffer.end();++i)
        {
            if ((i+1) == xmlTextBuffer.end())
            {
                QList <QString>::iterator ii = xmlTextBuffer.begin();
                distance +=dist(i->split(" ").at(1).toDouble(),ii->split(" ").at(1).toDouble(),i->split(" ").at(0).toDouble(),ii->split(" ").at(0).toDouble(),true);
            }
            else
            {
                distance += dist(i->split(" ").at(1).toDouble(),(i+1)->split(" ").at(1).toDouble(),i->split(" ").at(0).toDouble(),(i+1)->split(" ").at(0).toDouble(),true);
            }
                minAlt = (i->split(" ").at(2).toDouble()<minAlt)?(i->split(" ").at(2).toDouble()):minAlt;
                maxAlt = (i->split(" ").at(2).toDouble()>maxAlt)?(i->split(" ").at(2).toDouble()):maxAlt;
        }
        tmp<< "Distance: "<< QString::number((int)distance)<<" m"<<"\r\n";
        tmp<< "Max Alt: "<< QString::number(maxAlt,'f',4)<<" m"<<"\r\n";
        tmp<< "Min Alt: "<< QString::number(minAlt,'f',4)<<" m"<<"\r\n";
        tmp<< "Elevation Variance:" << QString::number(maxAlt-minAlt,'f',4)<<" m"<<"\r\n";

        xmlReader.clear();
        speedTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
        xmlReader.setDevice(&speedTmpFile);
        xmlReader.readNext();
        lapTmpNum=0;
        lapNumFlag=false;
        xmlTextBuffer.clear();
        //Reading from the file
        while (!xmlReader.isEndDocument())
        {
            if (xmlReader.isStartElement())
            {
                QString name = xmlReader.name().toString();
                if ((name == "speed")&& lapNumFlag)//read speed of each element
                {
                   xmlTextBuffer.append(xmlReader.readElementText());
                }
                else if (name == "lap")
                {
                    lapNumFlag=(lapTmpNum==s)?true:false;
                    lapTmpNum++;
                }
            }
            else if (xmlReader.isEndElement())
            {

            }
            xmlReader.readNext();
        }
        speedTmpFile.close();

        double maxSpeed = 0, minSpeed = 10000, speedSum = 0;
        QList <QString>::iterator j;
        for (j=xmlTextBuffer.begin();j!=xmlTextBuffer.end();++j)
        {
                minSpeed = (j->toDouble()<minSpeed)?(j->toDouble()):minSpeed;
                maxSpeed = (j->toDouble()>maxSpeed)?(j->toDouble()):maxSpeed;
                speedSum += j->toDouble();
        }

        tmp<< "Max Speed: "<< QString::number(maxSpeed,'f',4)<<" km/h"<<"\r\n";
        tmp<< "Min Alt: "<< QString::number(minSpeed,'f',4)<<" km/h"<<"\r\n";
        tmp<< "Average Speed **: "<< QString::number(speedSum/(xmlTextBuffer.size()),'f',4)<<" km/h"<<"\r\n";

        xmlReader.clear();
        wayptTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
        xmlReader.setDevice(&wayptTmpFile);
        xmlReader.readNext();
        lapTmpNum=0;
        lapNumFlag=false;
        xmlTextBuffer.clear();
        //Reading from the file
        QStringList tmpWhen,tmpBest,tmpDev;
        while (!xmlReader.isEndDocument())
        {
            if (xmlReader.isStartElement())
            {
                QString name = xmlReader.name().toString();
                if ((name == "time")&& lapNumFlag)//read time of each element
                {
                   xmlTextBuffer.append(xmlReader.readElementText());
                }
                else if ((name == "best")&& lapNumFlag)//read best of each element
                {
                   tmpBest.append(xmlReader.readElementText());
                }
                else if ((name == "when")&& lapNumFlag)//read when of each element
                {
                   tmpWhen.append(xmlReader.readElementText());
                }
                else if ((name == "dev")&& lapNumFlag)//read dev of each element
                {
                   tmpDev.append(xmlReader.readElementText());
                }
                else if (name == "lap")
                {
                    lapNumFlag=(lapTmpNum==s)?true:false;
                    lapTmpNum++;
                }
            }
            else if (xmlReader.isEndElement())
            {

            }
            xmlReader.readNext();
        }
        wayptTmpFile.close();
        for (int k=0;k<xmlTextBuffer.length();k++)
        {
            if (k==(xmlTextBuffer.length()-1))
            {
                tmp<<"Finish Point: "<<"\r\n        Time: "
                               <<xmlTextBuffer.at(k)<<"\r\n        Best: "
                              <<tmpBest.at(k)<<"\r\n        Time To Best: "
                             <<tmpDev.at(k)<<"\r\n";
            }
            else
            {
                tmp<<"Waypoint "<<QString::number(k+1)<<": "<<"\r\n        Time: "
                               <<xmlTextBuffer.at(k)<<"\r\n        Best: "
                              <<tmpBest.at(k)<<"\r\n        Time To Best: "
                             <<tmpDev.at(k)<<"\r\n";
            }
        }
    tmp<< "End Time: "<< QString(tmpWhen.last()).replace(QRegExp("[TZ]")," ")<<"\r\n";
    tmp<< "Average Speed *: "<< QString::number
              ((distance/(QTime::fromString(start,"hh:mm:ss.zzz").msecsTo(
                              QTime::fromString(QString(tmpWhen.last()).section(QRegExp("[TZ]"),1,1),"hh:mm:ss.zzz"))))*3.6,'f',4)
       <<"\r\n";
    tmp<< "\r\n";
}
    qWarning()<<"Success";
}
Example #10
0
void LapTimerThread::writeXml()
{
    QXmlStreamReader xmlReader;
    coordTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
    xmlReader.setDevice(&coordTmpFile);
    xmlReader.readNext();
    int lapNum=0;
    //Reading from the file
    xmlReader.readNext();
    while (!xmlReader.isEndDocument())
    {
        if (xmlReader.isStartElement())
        {
            QString name = xmlReader.name().toString();
            if (name == "lap")
            {
                lapNum++;
            }

        }
        else if (xmlReader.isEndElement())
        {

        }
        xmlReader.readNext();
    }
    coordTmpFile.close();
    for (int i=0;i<lapNum-1;i++)// loop to generate kml file for each lap
    {

    QFile xmlKmlFile;
    QXmlStreamWriter bufferKml;

    xmlKmlFile.setFileName("data/"+dirName+"/"+dirName+"-"+QString::number(i+1)+".kml");
    xmlKmlFile.open(QIODevice::WriteOnly | QIODevice::Text);
    bufferKml.setDevice(&xmlKmlFile);
    bufferKml.setAutoFormatting(true);
    bufferKml.writeStartDocument();

    bufferKml.writeStartElement("kml");
    QXmlStreamAttributes atrr;
    atrr.append("xmlns","http://www.opengis.net/kml/2.2");
    atrr.append("xmlns:gx","http://www.google.com/kml/ext/2.2");
    atrr.append("xmlns:atom","http://www.w3.org/2005/Atom");
    bufferKml.writeAttributes(atrr);
    bufferKml.writeStartElement("Document");
    bufferKml.writeTextElement("open","1");
    bufferKml.writeTextElement("visibility","1");
    bufferKml.writeStartElement("name");
    bufferKml.writeCDATA("GPS Lap Timer - KML Log - "+QDate::currentDate().toString("yyyyMMdd")+QTime::currentTime().toString("hhmmss"));
    bufferKml.writeEndElement();
    //style - track
    bufferKml.writeStartElement("Style");
    bufferKml.writeAttribute(QXmlStreamAttribute("id","track"));
    bufferKml.writeStartElement("LineStyle");
    bufferKml.writeTextElement("color","7f0000ff");
    bufferKml.writeTextElement("width","4");
    bufferKml.writeEndElement();
    bufferKml.writeStartElement("IconStyle");
    bufferKml.writeTextElement("scale","1.3");
    bufferKml.writeStartElement("Icon");
    bufferKml.writeTextElement("href","http://earth.google.com/images/kml-icons/track-directional/track-0.png");
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    //style - start
    bufferKml.writeStartElement("Style");
    bufferKml.writeAttribute(QXmlStreamAttribute("id","start"));
    bufferKml.writeStartElement("IconStyle");
    bufferKml.writeTextElement("scale","1.3");
    bufferKml.writeStartElement("Icon");
    bufferKml.writeTextElement("href","http://maps.google.com/mapfiles/kml/paddle/grn-circle.png");
    bufferKml.writeEndElement();
    bufferKml.writeEmptyElement("hotSpot");
    atrr.clear();
    atrr.append("x","32");
    atrr.append("y","1");
    atrr.append("xunits","pixels");
    atrr.append("yunits","pixels");
    bufferKml.writeAttributes(atrr);
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    // style - end
    bufferKml.writeStartElement("Style");
    bufferKml.writeAttribute(QXmlStreamAttribute("id","end"));
    bufferKml.writeStartElement("IconStyle");
    bufferKml.writeTextElement("scale","1.3");
    bufferKml.writeStartElement("Icon");
    bufferKml.writeTextElement("href","http://maps.google.com/mapfiles/kml/paddle/red-circle.png");
    bufferKml.writeEndElement();
    bufferKml.writeEmptyElement("hotSpot");
    bufferKml.writeAttributes(atrr);
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    // style - statistics
    bufferKml.writeStartElement("Style");
    bufferKml.writeAttribute(QXmlStreamAttribute("id","statistics"));
    bufferKml.writeStartElement("IconStyle");
    bufferKml.writeTextElement("scale","1.3");
    bufferKml.writeStartElement("Icon");
    bufferKml.writeTextElement("href","http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png");
    bufferKml.writeEndElement();
    bufferKml.writeEmptyElement("hotSpot");
    atrr.clear();
    atrr.append("x","20");
    atrr.append("y","2");
    atrr.append("xunits","pixels");
    atrr.append("yunits","pixels");
    bufferKml.writeAttributes(atrr);
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    // style - waypoint
    bufferKml.writeStartElement("Style");
    bufferKml.writeAttribute(QXmlStreamAttribute("id","waypoint"));
    bufferKml.writeStartElement("IconStyle");
    bufferKml.writeTextElement("scale","1.3");
    bufferKml.writeStartElement("Icon");
    bufferKml.writeTextElement("href","http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png");
    bufferKml.writeEndElement();
    bufferKml.writeEmptyElement("hotSpot");
    bufferKml.writeAttributes(atrr);
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();

    QStringList xmlTmpTextBuffer;
    int lapTmpNum=0;
    bool lapNumFlag=false;

    bufferKml.writeStartElement("Folder");
    bufferKml.writeStartElement("name");
    bufferKml.writeCDATA("Lap #"+QString::number(i+1));
    bufferKml.writeEndElement();
    bufferKml.writeTextElement("open","1");

    //waypoints - load
    xmlReader.clear();
    wayptTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
    xmlReader.setDevice(&wayptTmpFile);
    xmlReader.readNext();
    xmlTmpTextBuffer.clear();
    xmlTextBuffer.clear();
    lapTmpNum=0;
    lapNumFlag=false;
    QStringList bestBuffer,devBuffer,timeBuffer;
    while (!xmlReader.isEndDocument())
    {
        if (xmlReader.isStartElement())
        {
            QString name = xmlReader.name().toString();

            if (name == "when" && lapNumFlag)//read time of each element
            {
               xmlTextBuffer.append(xmlReader.readElementText());
            }
            else if (name == "waypt" && lapNumFlag)
            {
                xmlTmpTextBuffer.append(xmlReader.readElementText());
            }
            else if (name == "best" && lapNumFlag)
            {
                bestBuffer.append(xmlReader.readElementText());
            }
            else if (name == "time" && lapNumFlag)
            {
                timeBuffer.append(xmlReader.readElementText());
            }
            else if (name == "dev" && lapNumFlag)
            {
                devBuffer.append(xmlReader.readElementText());
            }
            else if (name == "lap")
            {
                lapNumFlag=(lapTmpNum==i)?true:false;
                lapTmpNum++;
            }
        }
        else if (xmlReader.isEndElement())
        {

        }
        xmlReader.readNext();
    }
    wayptTmpFile.close();
    //waypoint - write
    for (int j=0;j<xmlTextBuffer.length();j++)
    {
        bufferKml.writeStartElement("Placemark");
        bufferKml.writeStartElement("name");
        if ((j+1)==xmlTextBuffer.length())
        bufferKml.writeCDATA("Finish");
        else
        bufferKml.writeCDATA("Waypoint"+QString::number(j+1));
        bufferKml.writeEndElement();
        bufferKml.writeStartElement("description");
        bufferKml.writeCDATA("Time: "+timeBuffer.at(j)+"; To best: "+devBuffer.at(j)+"; Best: "+bestBuffer.at(j));
        bufferKml.writeEndElement();
        bufferKml.writeStartElement("TimeStamp");
        bufferKml.writeTextElement("when",xmlTextBuffer.at(j));
        bufferKml.writeEndElement();
        if (j==xmlTextBuffer.length()-1)
        bufferKml.writeTextElement("styleUrl","#end");
        else
        bufferKml.writeTextElement("styleUrl","#waypoint");
        bufferKml.writeStartElement("Point");
        bufferKml.writeTextElement("coordinates",xmlTmpTextBuffer.at(j));
        bufferKml.writeEndElement();
        bufferKml.writeEndElement();
    }

    //track - load
    xmlReader.clear();
    coordTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
    xmlReader.setDevice(&coordTmpFile);
    xmlReader.readNext();
    xmlTmpTextBuffer.clear();
    xmlTextBuffer.clear();
    lapTmpNum=0;
    lapNumFlag=false;
    while (!xmlReader.isEndDocument())
    {
        if (xmlReader.isStartElement())
        {
            QString name = xmlReader.name().toString();

            if (name == "when" && lapNumFlag)//read time of each element
            {
               xmlTextBuffer.append(xmlReader.readElementText());
            }
            else if (name == "coord" && lapNumFlag)
            {
                xmlTmpTextBuffer.append(xmlReader.readElementText());
            }
            else if (name == "lap")
            {
                lapNumFlag=(lapTmpNum==i)?true:false;
                                lapTmpNum++;
            }
        }
        else if (xmlReader.isEndElement())
        {

        }
        xmlReader.readNext();
    }
    coordTmpFile.close();
    //track - write
    bufferKml.writeStartElement("Placemark");
    bufferKml.writeAttribute(QXmlStreamAttribute("id","tour"));
    bufferKml.writeStartElement("name");
    bufferKml.writeCDATA("track");
    bufferKml.writeEndElement();
    bufferKml.writeStartElement("description");
    bufferKml.writeCDATA("");
    bufferKml.writeEndElement();
    bufferKml.writeTextElement("styleUrl","#track");
    bufferKml.writeStartElement("gx:MultiTrack");
    bufferKml.writeTextElement("altitudeMode","absolute");
    bufferKml.writeTextElement("gx:interpolate","1");
    bufferKml.writeStartElement("gx:Track");
    for (int j=0;j<xmlTextBuffer.length();j++)
    {
        bufferKml.writeTextElement("when",xmlTextBuffer.at(j));
        bufferKml.writeTextElement("gx:coord",xmlTmpTextBuffer.at(j));
    }
    //data - alt - write
    bufferKml.writeStartElement("ExtendedData");
    bufferKml.writeEmptyElement("SchemaData");
    bufferKml.writeAttribute(QXmlStreamAttribute("schemaUrl","#schema"));
    bufferKml.writeStartElement("gx:SimpleArrayData");
    bufferKml.writeAttribute(QXmlStreamAttribute("name","elevation"));
    for (int j=0;j<xmlTextBuffer.length();j++)
    {
        bufferKml.writeTextElement("gx:value",QString(xmlTmpTextBuffer.at(j)).section(" ",2,2));
    }
    bufferKml.writeEndElement();
    //data - speed - load
    xmlReader.clear();
    speedTmpFile.open(QIODevice::ReadOnly | QIODevice::Text);
    xmlReader.setDevice(&speedTmpFile);
    xmlReader.readNext();
    xmlTmpTextBuffer.clear();
    xmlTextBuffer.clear();
    lapTmpNum=0;
    lapNumFlag=false;
    while (!xmlReader.isEndDocument())
    {
        if (xmlReader.isStartElement())
        {
            QString name = xmlReader.name().toString();

            if (name == "speed" && lapNumFlag)//read time of each element
            {
               xmlTextBuffer.append(xmlReader.readElementText());
            }
            else if (name == "lap")
            {
                lapNumFlag=(lapTmpNum==i)?true:false;
                lapTmpNum++;
            }
        }
        else if (xmlReader.isEndElement())
        {

        }
        xmlReader.readNext();
    }
    speedTmpFile.close();
    //data - speed - write
    bufferKml.writeStartElement("gx:SimpleArrayData");
    bufferKml.writeAttribute(QXmlStreamAttribute("name","speed"));
    for (int j=0;j<xmlTextBuffer.length();j++)
    {
        bufferKml.writeTextElement("gx:value",xmlTextBuffer.at(j));
    }
    bufferKml.writeEndElement();

    // close all opened element
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();
    bufferKml.writeEndElement();

    bufferKml.writeEndDocument();
    xmlKmlFile.close();
  }
}