static void convertFromDomElement(const QDomElement& dom_element, Device::Node &parentNode) { QDomElement dom_child = dom_element.firstChildElement(""); QString name; if(dom_element.hasAttribute("address")) { name = dom_element.attribute("address"); } else { name = dom_element.tagName(); } Device::AddressSettings addr; addr.name = name; if(dom_element.hasAttribute("type")) { const auto type = dom_element.attribute("type"); addr.value = read_valueDefault(dom_element, type); addr.ioType = read_service(dom_element); addr.priority = dom_element.attribute("priority").toInt(); addr.repetitionFilter = dom_element.attribute("repetitionsFilter").toInt(); addr.domain = read_rangeBounds(dom_element, type); if(addr.value.val.which() != State::ValueType::NoValue) { if(addr.domain.min.val.which() == State::ValueType::NoValue) addr.domain.min = addr.value; if(addr.domain.max.val.which() == State::ValueType::NoValue) addr.domain.max = addr.value; } addr.clipMode = read_rangeClipmode(dom_element); } auto& childNode = parentNode.emplace_back(addr, &parentNode); while(!dom_child.isNull() && dom_element.hasChildNodes()) { convertFromDomElement(dom_child, childNode); dom_child = dom_child.nextSibling().toElement(); } return; }