#include "cficontroller.h" CfiController::CfiController(UpdateController* updateController, QObject *parent) : QObject(parent), updateController(updateController), germanLocale(nullptr) { germanLocale = new QLocale(QLocale::German); } CfiController::~CfiController() { } void CfiController::lockAccessToCfiXML() { mtxAccess.lock(); } void CfiController::unLockAccessToCfiXML() { mtxAccess.unlock(); } bool CfiController::parsingCfiXML() { QMutexLocker locker(&mtxAccess); if(!updateController) return false; QString pathCfiListFile = updateController->getPathAdditionalFile(cfiListFileName); QDomDocument docCfiListDOM; if(! Tools::loadXMLtoDOM(pathCfiListFile, &docCfiListDOM)) return false; QDomElement CFIObjectsElement = docCfiListDOM.firstChildElement("CFIObjects"); if(CFIObjectsElement.isNull()) return false; listCfiObjects.clear(); //Parsing QDomElement oneCFIObjectElement = CFIObjectsElement.firstChildElement(); if(oneCFIObjectElement.isNull()) return true; QString name; do { name = oneCFIObjectElement.nodeName(); if(name == "CFIObject") { CfiObject cfiObj; //атрибуты CFIObject QDomNamedNodeMap nodeMapOneCFIObject = oneCFIObjectElement.attributes(); cfiObj.setId(nodeMapOneCFIObject.namedItem("id").nodeValue().toInt()); cfiObj.setIsChanged(nodeMapOneCFIObject.namedItem("isChanged").nodeValue() == "True" ? true : false); //childs CFIObject QDomElement cfiName_Element = oneCFIObjectElement.elementsByTagName("cfiName").at(0).toElement(); cfiObj.setCfiName(cfiName_Element.text()); QDomElement cfi_Element = oneCFIObjectElement.elementsByTagName("cfi").at(0).toElement(); cfiObj.setCfi(cfi_Element.text()); QDomElement zoneName_Element = oneCFIObjectElement.elementsByTagName("zoneName").at(0).toElement(); cfiObj.setZoneName(zoneName_Element.text()); QDomElement goName_Element = oneCFIObjectElement.elementsByTagName("goName").at(0).toElement(); cfiObj.setGoName(goName_Element.text()); //child CFIObject : SetCameraPos SetCameraPos setCamPos; QDomElement setcamerapos_Element = oneCFIObjectElement.elementsByTagName("setcamerapos").at(0).toElement(); //атрибуты setcamerapos QDomNamedNodeMap nodeMapSetcamerapos = setcamerapos_Element.attributes(); setCamPos.set = nodeMapSetcamerapos.namedItem("set").nodeValue() == "True" ? true : false; setCamPos.fast = nodeMapSetcamerapos.namedItem("fast").nodeValue() == "True" ? true : false; setCamPos.specialPanel = nodeMapSetcamerapos.namedItem("specialPanel").nodeValue() == "True" ? true : false; setCamPos.cameraMode = nodeMapSetcamerapos.namedItem("cameraMode").nodeValue(); setCamPos.state = nodeMapSetcamerapos.namedItem("state").nodeValue(); setCamPos.panelName = nodeMapSetcamerapos.namedItem("panelName").nodeValue(); setCamPos.prevCamOffsetMARposY = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("prevCamOffsetMARposY").nodeValue()); setCamPos.camOffsetMARposY = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("camOffsetMARposY").nodeValue()); setCamPos.prevCharControlerHeight = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("prevCharControlerHeight").nodeValue()); setCamPos.charControlerHeight = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("charControlerHeight").nodeValue()); setCamPos.FOV = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("FOV").nodeValue()); setCamPos.moveSpeed = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("moveSpeed").nodeValue()); setCamPos.projectionSize = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("projectionSize").nodeValue()); setCamPos.offset = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("offset").nodeValue()); setCamPos.prevPlayerRot = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("prevPlayerRot").nodeValue()); //childs setcamerapos QDomElement loc_Element; loc_Element = setcamerapos_Element.elementsByTagName("axesClamp").at(0).toElement(); setCamPos.axesClamp = getXYfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("prevPlayerPos").at(0).toElement(); setCamPos.prevPlayerPos = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("playerPos").at(0).toElement(); setCamPos.playerPos = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("playerRot").at(0).toElement(); setCamPos.playerRot = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("prevCamRot").at(0).toElement(); setCamPos.prevCamRot = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("camRot").at(0).toElement(); setCamPos.camRot = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("goCenter").at(0).toElement(); setCamPos.goCenter = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("playerMARpos").at(0).toElement(); setCamPos.playerMARpos = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("playerMARrot").at(0).toElement(); setCamPos.playerMARrot = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("camMARrot").at(0).toElement(); setCamPos.camMARrot = getXYZfromElement(loc_Element); loc_Element = setcamerapos_Element.elementsByTagName("playerPosRelativeToThePanel").at(0).toElement(); setCamPos.playerPosRelativeToThePanel = getXYZfromElement(loc_Element); cfiObj.setSetCameraPos(setCamPos); listCfiObjects.append(cfiObj); } }while (! (oneCFIObjectElement = oneCFIObjectElement.nextSiblingElement()).isNull()); return true; } QVector3D CfiController::getXYZfromElement(QDomElement element) { QVector3D vector3D; QDomNamedNodeMap nodeMap = element.attributes(); vector3D.setX(germanLocale->toFloat(nodeMap.namedItem("x").nodeValue())); vector3D.setY(germanLocale->toFloat(nodeMap.namedItem("y").nodeValue())); vector3D.setZ(germanLocale->toFloat(nodeMap.namedItem("z").nodeValue())); return vector3D; } QVector2D CfiController::getXYfromElement(QDomElement element) { QVector2D vector2D; QDomNamedNodeMap nodeMap = element.attributes(); vector2D.setX(germanLocale->toFloat(nodeMap.namedItem("x").nodeValue())); vector2D.setY(germanLocale->toFloat(nodeMap.namedItem("y").nodeValue())); return vector2D; }