You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.1 KiB

////////////////////////////////////////////////////////////////////////////////
/**
* \file xmlparser.cpp
* \version v1.0
* \author Ing. Dominik Malcik
*/
////////////////////////////////////////////////////////////////////////////////
#include "xmlparser.h"
#include "project.h"
#include "mainwindow.h"
XMLparser::XMLparser(QWidget *parent) :
QMainWindow(parent)
{
}
bool XMLparser::read(QIODevice *device) {
QString errorStr;
int errorLine;
int errorColumn;
if (!domDocument.setContent(device, true, &errorStr, &errorLine, &errorColumn)) {
QMessageBox::information(this, tr("microAnalyzer :: ERROR"),
tr("Project file parse error at line %1, column %2:\n%3")
.arg(errorLine)
.arg(errorColumn)
.arg(errorStr));
return false;
}
QDomElement root = domDocument.documentElement();
if (root.tagName() != "ma_project") {
QMessageBox::critical(window(), tr("microAnalyzer :: ERROR"), tr("The file is not a microAnalyzer project file."));
return false;
} else if (root.hasAttribute("version") && root.attribute("version") != "1.0") {
QMessageBox::critical(window(), tr("microAnalyzer :: ERROR"), tr("The file is not a microAnalyzer project file version 1.0."));
return false;
}
// basic values
QString childName = root.firstChildElement("name").text();
QString childFileImported = root.firstChildElement("fileImported").text();
QString childImagesDir = root.firstChildElement("imagesDir").text();
QString childLayersDir = root.firstChildElement("layersDir").text();
// load information from xml to the project instance
cProject::Instance()->setProjectName(childName);
cProject::Instance()->setFileImported((childFileImported == Project::XML_TRUE) ? true : false);
cProject::Instance()->setImagesDir(childImagesDir);
cProject::Instance()->setLayersDir(childLayersDir);
cProject::Instance()->setProjectFileName(cProject::Instance()->getProjectName() + Project::PROJ_FILE_EXT);
// load imported images for backgrounds
std::vector<QString> imgVect;
if (childFileImported == Project::XML_TRUE) {
QDomElement childImagesRoot = root.firstChildElement("images");
if (!childImagesRoot.isNull()) {
QDomElement childImages = childImagesRoot.firstChildElement("image");
while (!childImages.isNull()) {
imgVect.push_back(childImages.text());
childImages = childImages.nextSiblingElement("image");
}
}
}
cProject::Instance()->setImages(imgVect);
// load imported layers
std::vector<QString> layers;
QDomElement childLayersRoot = root.firstChildElement("layers");
if (!childLayersRoot.isNull()) {
QDomElement childLayers = childLayersRoot.firstChildElement("layer");
while (!childLayers.isNull()) {
layers.push_back(childLayers.text());
childLayers = childLayers.nextSiblingElement("layer");
}
}
cProject::Instance()->setLayers(layers);
return true;
}