diff --git a/src/Mod/TechDraw/App/XMLQuery.cpp b/src/Mod/TechDraw/App/XMLQuery.cpp index 80cfd93a25..69cc2b2e55 100644 --- a/src/Mod/TechDraw/App/XMLQuery.cpp +++ b/src/Mod/TechDraw/App/XMLQuery.cpp @@ -66,11 +66,53 @@ bool XMLQuery::processItems(const QString& queryStr, const std::function& process) +{ + bool find_tspan = queryStr.contains(QLatin1String("tspan")); + QDomNodeList editable = element.elementsByTagName(QString(QLatin1String("text"))); + if (editable.count() > 0) { + for(int i = 0; i < editable.count(); i++) { + QDomNode node = editable.item(i); + QDomElement element = node.toElement(); + if (element.hasAttribute(QString(QLatin1String("freecad:editable")))) { + if (find_tspan) { + element = element.firstChildElement(); + } + + if (!process(element)) { + return false; + } + } + } + } + else { + QDomElement child; + child = element.firstChildElement(); + while (!child.isNull()) { + if (!processElements(child, queryStr, process)) { + return false; + } + child = child.nextSiblingElement(); + } + } + + return true; +} + bool XMLQuery::processItems(const QString& queryStr, const std::function& process) { - //TODO: Port to Qt6 - Q_UNUSED(queryStr) - Q_UNUSED(process) - return false; + // The actual query string is of the form "//text[@freecad:editable]" + // or "//text[@freecad:editable]/tspan" + QDomElement root = domDocument.documentElement(); + if (!root.isNull()) { + processElements(root, queryStr, process); + } + + return true; } #endif