Find a .qetz's folios with cable wires in its database

Opened from its database, a .qetz's folios not built have no XML in
memory: reading each one's part only to look for wires referring to a
cable read every folio. The project database already knows which wires
carry a cable reference, and so which folios to build for the label pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ispyisail
2026-10-13 23:00:49 +13:00
parent f7e0283e61
commit fbda162e34
+23 -11
View File
@@ -611,9 +611,10 @@ QList<Diagram *> QETProject::folios() const
@return the folios CableManager::refreshLabels() works on, built: every @return the folios CableManager::refreshLabels() works on, built: every
folio when the project has cables (a core is followed through folio folio when the project has cables (a core is followed through folio
reports to any folio); without cables, the folios built and those not reports to any folio); without cables, the folios built and those not
built yet (QET_LAZY_FOLIOS) holding a wire that still refers to a built yet holding a wire that still refers to a cable -- the only
cable -- the only wires the pass changes then, taking the reference wires the pass changes then, taking the reference away. Read from the
away -- found in the XML kept for them project database for a .qetz opened from it, from the folios' XML
otherwise.
*/ */
QList<Diagram *> QETProject::cableLabelFolios() QList<Diagram *> QETProject::cableLabelFolios()
{ {
@@ -621,14 +622,25 @@ QList<Diagram *> QETProject::cableLabelFolios()
return diagrams(); return diagrams();
} }
QList<Diagram *> referring; QList<Diagram *> referring;
for (Diagram *d : std::as_const(m_diagrams_list)) { if (m_opened_from_index) {
if (d->isLoaded()) continue; QSet<QUuid> folios;
for (const QDomElement &wire : QET::findInDomElement(d->deferredXml(), QStringLiteral("conductors"), QSqlQuery query = m_data_base.newQuery(QStringLiteral(
QStringLiteral("conductor"))) "SELECT DISTINCT c.diagram_uuid FROM conductor c JOIN conductor_properties p "
if (!QUuid(wire.attribute(QStringLiteral("cable_uuid"))).isNull()) { "ON p.conductor_uuid = c.uuid WHERE p.name = 'cable_uuid' AND p.value != ''"));
referring << d; if (query.exec())
break; while (query.next()) folios.insert(QUuid(query.value(0).toString()));
} for (Diagram *d : std::as_const(m_diagrams_list))
if (!d->isLoaded() && folios.contains(d->uuid())) referring << d;
} else {
for (Diagram *d : std::as_const(m_diagrams_list)) {
if (d->isLoaded()) continue;
for (const QDomElement &wire : QET::findInDomElement(d->deferredXml(), QStringLiteral("conductors"),
QStringLiteral("conductor")))
if (!QUuid(wire.attribute(QStringLiteral("cable_uuid"))).isNull()) {
referring << d;
break;
}
}
} }
buildFolios(referring); buildFolios(referring);
return builtFolios(); return builtFolios();