From e7cbb8f50e9472f7aca0bc55761230f03c15cbd6 Mon Sep 17 00:00:00 2001 From: Levi Jetzer Date: Fri, 7 Aug 2026 17:20:45 +0200 Subject: [PATCH] Reading prefixes from company collection Added a reading for company collection prefixes which are overwritten by user collection prefixes --- sources/autoNum/assignvariables.cpp | 137 +++++++++++----------------- 1 file changed, 54 insertions(+), 83 deletions(-) diff --git a/sources/autoNum/assignvariables.cpp b/sources/autoNum/assignvariables.cpp index 8e2d465ec..b39e1d361 100644 --- a/sources/autoNum/assignvariables.cpp +++ b/sources/autoNum/assignvariables.cpp @@ -703,6 +703,46 @@ namespace autonum return formula; } + /** + @brief prefixFromLabelFile + Look up a prefix for @a path in the qet_labels.xml at @a filepath. + @return the prefix, or a null QString if the file cannot be read + or holds no matching entry. + */ + static QString prefixFromLabelFile(const QString &filepath, const QString path[10], int i, int dirLevel) + { + QFile file(filepath); + if (!file.open(QFile::ReadOnly | QFile::Text)) + return QString(); + + QXmlStreamReader rxml; + rxml.setDevice(&file); + rxml.readNext(); + + while (!rxml.atEnd()) { + if (rxml.attributes().value("name").toString() == path[i]) { + rxml.readNext(); + i = i - 1; + + if (i == 0) { + for (int j = i ; j <= dirLevel ; ++j) { + + if (rxml.name().toString() == "prefix") { + return rxml.readElementText(); + } else { + while (rxml.readNextStartElement() && rxml.name().toString() != "prefix") { + rxml.skipCurrentElement(); + rxml.readNext(); + } + } + } + } + } + rxml.readNext(); + } + return QString(); + } + /** @brief elementPrefixForLocation @param location @@ -716,7 +756,6 @@ namespace autonum if (!location.isProject()) return QString(); - QXmlStreamReader rxml; QString path[10]; int i = -1; ElementsLocation current_location = location; @@ -739,91 +778,23 @@ namespace autonum dirLevel = 0; } - // Create Custom labels if qet_labels.xml exits in customElementsDir - if (current_location.fileName() != "10_electric"){ - QString custom_labels = "qet_labels.xml"; - QString customfilepath = QETApp::customElementsDir().append(custom_labels); - - QFile file(customfilepath); - file.isReadable(); - if (!file.open(QFile::ReadOnly | QFile::Text)) - return QString(); - rxml.setDevice(&file); - rxml.readNext(); - - while(!rxml.atEnd()) - { - if (rxml.attributes().value("name").toString() == path[i]) - { - rxml.readNext(); - i=i-1; - //reached element directory - if (i==0) - { - for (int j=i; j<= dirLevel; j = j +1) - { - //if there is a prefix available apply prefix - if(rxml.name().toString()=="prefix") - { - return rxml.readElementText(); - } - //if there isn't a prefix available, find parent prefix in parent folder - else - { - while (rxml.readNextStartElement() && rxml.name().toString()!="prefix") - { - rxml.skipCurrentElement(); - rxml.readNext(); - } - } - } - } - } - rxml.readNext(); - } + if (current_location.fileName() == "10_electric") { + return prefixFromLabelFile( + QETApp::commonElementsDir() + "10_electric/qet_labels.xml", + path, i, dirLevel); } - else - { - QString qet_labels = "10_electric/qet_labels.xml"; - QString filepath = QETApp::commonElementsDir().append(qet_labels); - QFile file(filepath); - file.isReadable(); - if (!file.open(QFile::ReadOnly | QFile::Text)) - return QString(); - - rxml.setDevice(&file); - rxml.readNext(); - while(!rxml.atEnd()) - { - if (rxml.attributes().value("name").toString() == path[i]) - { - rxml.readNext(); - i=i-1; - //reached element directory - if (i==0) - { - for (int j=i; j<= dirLevel; j = j +1) - { - //if there is a prefix available apply prefix - if(rxml.name().toString()=="prefix") - { - return rxml.readElementText(); - } - //if there isn't a prefix available, find parent prefix in parent folder - else - { - while (rxml.readNextStartElement() && rxml.name().toString()!="prefix") - { - rxml.skipCurrentElement(); - rxml.readNext(); - } - } - } - } + //Look in the custom collection first, then in the company + //collection, so a user override wins over the shared one. + const QStringList candidates = { + QETApp::customElementsDir() + "qet_labels.xml", + QETApp::companyElementsDir() + "qet_labels.xml" + }; + for (const QString &candidate : candidates) { + const QString prefix = prefixFromLabelFile(candidate, path, i, dirLevel); + if (!prefix.isNull()) { + return prefix; } - rxml.readNext(); - } } return QString(); }