From ed4b09349d43c814b0643e4760767ebd248783db Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 28 Mar 2023 16:51:35 +0200 Subject: [PATCH] TD: implement XMLQuery for Qt6 --- src/Mod/TechDraw/App/XMLQuery.cpp | 50 ++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 4 deletions(-) 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