--- /dev/null
+#include <QtGui>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QIODevice>
+#include <QFile>
+#include <QMessageBox>
+#include <QDebug>
+#include <QDateTime>
+#include <QDate>
+#include <QTime>
+#include <QApplication>
+#include "xmlreader.h"
+
+
+/*! @brief Constructor, connects object to GUI
+ */
+XmlReader::XmlReader(Ui_MainWindow* myMainWindow)
+{
+ ui = myMainWindow;
+}
+
+/*! @brief Destructor
+ */
+XmlReader::~XmlReader()
+{
+
+}
+
+QString XmlReader::errorString() const
+{
+ return QObject::tr("%1\nLine %2, column %3")
+ .arg(xmlreader.errorString())
+ .arg(xmlreader.lineNumber())
+ .arg(xmlreader.columnNumber());
+}
+
+
+/*! @brief parsing xml file that is sent by server over network.
+ * Shows received information on screen and parsed information on command line.
+ * @note Partly commented for git.
+ * @todo (Development: Seems to omit element tags and some values when reading from QFile. Why? This used
+ * earlier with QNetworkReply printed all xml contents.)
+ * @todo Remove command line output and use final GUI widget names.
+ * @todo Replace using of QFile to QNetworkReply.
+ */
+void XmlReader::xmlRead(QIODevice *device)
+//void XmlReader::xmlRead(QNetworkReply *device)
+{
+ qDebug() << "_xmlRead";
+
+ xmlreader.addData(device->readAll());
+ //Or: View webpage contents on textEdit by adding all data to xml stream reader,
+ //since readAll() empties the buffer
+ /*QByteArray readAllArr = device->readAll();
+ ui->textEditXml->append(readAllArr);
+ xmlreader.addData(readAllArr);*/
+
+ //Go trough the xml document
+ while(!xmlreader.atEnd())
+ {
+ //Read next node
+ xmlreader.readNext();
+ //Check if this element is starting element
+ if(xmlreader.isStartElement())
+ {
+ if(xmlreader.name() == "place")
+ {
+ qDebug() << xmlreader.name();
+ }
+ if(xmlreader.name() == "date")
+ {
+ qDebug() << xmlreader.name();
+ }
+ if(xmlreader.name() == "time")
+ {
+ qDebug() << xmlreader.name();
+ }
+ if(xmlreader.name() == "result")
+ {
+ //Two consequent start elements
+ if(xmlreader.readNextStartElement())
+ {
+ if(xmlreader.name() == "speed")
+ {
+ QString speed;
+ QXmlStreamAttributes attr = xmlreader.attributes();
+ speed = (attr.value("value").toString() + " " + attr.value("unit").toString());
+ //ui->lineEditSpeed->setText(speed);
+ qDebug() << xmlreader.name() << speed;
+ }
+ }
+ }
+ if(xmlreader.name() == "distance")
+ {
+ QString distance;
+ QXmlStreamAttributes attr = xmlreader.attributes();
+ distance = (attr.value("value").toString() + " " + attr.value("unit").toString());
+ //ui->lineEditDist->setText(distance);
+ qDebug() << xmlreader.name() << distance;
+ }
+ if(xmlreader.name() == "acceleration")
+ {
+ QString acceleration;
+ QXmlStreamAttributes attr = xmlreader.attributes();
+ acceleration = (attr.value("value").toString()+ " " + attr.value("unit").toString());
+ //ui->lineEditAccel->setText(acceleration);
+ qDebug() << xmlreader.name() << acceleration;
+ }
+ }
+ }
+}
+
+/*! @brief A function used tmp in development.
+ * @note Partly harcoded and commented for git.
+ */
+void XmlReader::xmlShow()
+{
+ //QString filename = ui->lineEditFile->text();
+ QString filename = "xmlfile.xml";
+ QFile file(filename);
+
+ if (!file.open(QFile::ReadOnly))
+ {
+ /*QMessageBox::warning(this->ui->centralWidget,
+ tr("QXmlStream Bookmarks"),
+ tr("Cannot write file %1:\n%2.")
+ .arg(file.fileName())
+ .arg(file.errorString()));*/
+ qDebug() << "_xmlShow fail";
+ return;
+ }
+
+ xmlRead(&file);
+
+ file.close();
+}
+
--- /dev/null
+#include <QtGui>
+#include <QNetworkRequest>
+//#include <QNetworkReply>
+#include <QIODevice>
+#include <QFile>
+#include <QMessageBox>
+#include <QDebug>
+#include <QDateTime>
+#include <QDate>
+#include <QTime>
+#include <QApplication>
+#include "xmlwriter.h"
+
+
+/*! @brief Constructor, connects object to GUI
+ */
+XmlWriter::XmlWriter(Ui_MainWindow* myMainWindow)
+{
+ ui = myMainWindow;
+}
+
+
+/*! @brief Destructor
+ */
+XmlWriter::~XmlWriter()
+{
+
+}
+
+/*! @brief Opens and closes a file, when xml information is written into a file,
+ * and passes file to writeXmlFile()
+ * @note Partly harcoded and commented for git.
+ * @todo Replace hardcoced filename and GUI elements to finally used widgets.
+ */
+void XmlWriter::xmlWrite()
+{
+ //QString filename = ui->lineEditFile->text();
+ QString filename = "xmlfile.xml";
+ QFile file(filename);
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+ /*QMessageBox::warning(this->ui->centralWidget, tr("QXmlStream Bookmarks"),
+ tr("Cannot write file %1:\n%2.")
+ .arg(filename)
+ .arg(file.errorString()));
+ */
+ qDebug() << "_xmlWrite fail";
+ return;
+ }
+
+ writeXmlFile(&file);
+ file.close();
+}
+
+/*! @brief Writes general xml information.
+ * @todo Check API connection to QBuffer, when Speed Freek network client has been written.
+ */
+bool XmlWriter::writeXmlFile(QIODevice *device)
+//bool XmlWriter::writeXmlFile(QBuffer *device)
+{
+ xmlwriter.setDevice(device);
+ xmlwriter.writeStartDocument();
+ xmlwriter.writeDTD("<!DOCTYPE xml>");
+ xmlwriter.writeStartElement("xml");
+ xmlwriter.writeAttribute("version", "1.0");
+ writeItems();
+ xmlwriter.writeEndDocument();
+
+ return true;
+}
+
+/*! @brief Writes Speed Freek application specific items as tags and contents.
+ * @brief Results of speed/ direction/ acceleration into QMap are calculated elsewhere
+ * @todo Consider looping of writing QMap values.
+ * @todo Replace hardcoced names to finally used GUI elements.
+ */
+void XmlWriter::writeItems()
+{
+ //xmlwriter.writeCharacters(ui->lineEditPlace->text());
+ //Temporarily:
+ xmlwriter.writeStartElement("place");
+ xmlwriter.writeCharacters("rallirata");
+ xmlwriter.writeEndElement();
+
+ xmlwriter.writeStartElement("date");
+ xmlwriter.writeCharacters(QDate::currentDate().toString());
+ xmlwriter.writeEndElement();
+
+ xmlwriter.writeStartElement("time");
+ xmlwriter.writeCharacters(QTime::currentTime().toString());
+ xmlwriter.writeEndElement();
+
+ /* Or combined:
+ xmlwriter.writeStartElement("datetime");
+ xmlwriter.writeCharacters(QDateTime::currentDateTime().toString());
+ xmlwriter.writeEndElement(); */
+
+ xmlwriter.writeStartElement("result");
+ xmlwriter.writeStartElement("speed");
+ xmlwriter.writeAttribute("value", QString::number(resultmap.value("speed")));
+ xmlwriter.writeAttribute("unit", "m/s");
+ xmlwriter.writeEndElement();
+ xmlwriter.writeStartElement("distance");
+ xmlwriter.writeAttribute("value", QString::number(resultmap.value("distance")));
+ xmlwriter.writeAttribute("unit", "m");
+ xmlwriter.writeEndElement();
+ xmlwriter.writeStartElement("acceleration");
+ xmlwriter.writeAttribute("value", QString::number(resultmap.value("acceleration")));
+ xmlwriter.writeAttribute("unit", "m/s2");
+ xmlwriter.writeEndElement();
+ xmlwriter.writeEndElement(); //result
+ //or:
+ //xmlwriter.writeTextElement("speed", QString::number(resultmap.value("speed")) + " m/s");
+ //xmlwriter.writeTextElement("distance", QString::number(resultmap.value("distance")) + " m");
+ //xmlwriter.writeTextElement("acceleration", QString::number(resultmap.value("acceleration")) + " m/s2");
+}
+
+/*! @brief Initializes QMap by zeroing values for a new measurement.
+ */
+void XmlWriter::initResultmap()
+{
+ resultmap["acceleration"] = 0;
+ resultmap["speed"] = 0;
+ resultmap["distance"] = 0;
+}
+
+/*! @brief A temp function during development, used until real QMap available.
+ */
+void XmlWriter::fillResultmap()
+{
+ resultmap["acceleration"] = 9;
+ resultmap["speed"] = 48;
+ resultmap["distance"] = 600;
+}