Add, move or remove a folio without building the others (stage D5)

Adding, moving or removing a folio rewrote every folio's position in
the project database through diagrams(), which builds every folio: 3 s
on a 50-folio project opened lazily. A folio not built has its position
and title block already, so folios() is enough. The list of tables a
table can continue builds only the folios holding a table (from the
index of a .qetz), and the wiring list's count of wires left out looks
at built folios only: reading a wire drops it unless both its ends are
found.

tst_lazyfolios: a folio added, moved and removed builds no other, with
the folios' rows as when every folio is built (fails with diagrams():
47 built); the tables listed as when built, building the 12 folios that
hold one (fails when every folio is built). ctest 96/96 eager and lazy;
342 corpus projects save the same in all four arms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ispyisail
2026-10-12 08:46:31 +13:00
parent 8ae937007c
commit e7fd820db6
5 changed files with 91 additions and 4 deletions
+8 -1
View File
@@ -199,7 +199,14 @@ QVector<QetGraphicsTableItem *> ElementProvider::table(
}
}
for (auto d : allFolios()) {
//Only the folios holding a table are built for it
QList<Diagram *> folios = m_diagram_list;
if (m_project) {
m_project->buildFoliosHoldingTables();
folios = m_project->builtFolios();
folios.removeOne(m_excluded);
}
for (auto d : std::as_const(folios)) {
for (auto item_ : d->items())
{
if(item_->type() == QetGraphicsTableItem::Type)