mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-17 03:14:13 +02:00
Show a folio without building its partners' folios (stage D5b)
Showing a folio built it and every folio holding a partner of its symbols. Now a partner is built alone, as a symbol, into its folio's scene (Diagram::buildSymbols()), and reused when that folio is built. - A linked folio report built alone had no wires when it was linked, so its texts showing a wire's properties stayed empty: after any build, linked reports on the built folios and their partners look at their wires again, as opening does. Unlinked reports keep their texts, as opening leaves them. - A report whose partner was built alone builds the partner's folio when its potential is followed. - tableChainFolios() parsed every unbuilt folio's file. The index now lists the drawn tables and the table each continues (folio_table), and a .qetz opened from it uses that list. An index without it falls back to the folio files. - A .qetz's project.sqlite is opened once per project (QetContainerDb::FolioReader), not once per folio built. nuri (136 folios), opened fresh, one folio shown: median 1104 -> 184 ms, each show builds one folio; industrial 234 -> 87 ms. tst_lazyfolios: a folio whose table continues another is shown first from a .qetz (fails when the index's chains are ignored). ctest 96/96 eager and lazy; 342-project corpus: master, lazy, .qetz lazy and .qetz kept all the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -929,6 +929,47 @@ bool QetContainerDb::restoreFolio(QDomElement diagram, const QByteArray &databas
|
||||
return openDatabase(db, database, error) && restoreDiagram(db, diagram, error);
|
||||
}
|
||||
|
||||
struct QetContainerDb::FolioReader::Private
|
||||
{
|
||||
QByteArray database;
|
||||
Database db;
|
||||
bool opened = false;
|
||||
QString open_error;
|
||||
};
|
||||
|
||||
/**
|
||||
@brief QetContainerDb::FolioReader::FolioReader
|
||||
Reads folios' engineering data from @p database, opened the first time
|
||||
one is read and kept open: a folio built after the project was opened
|
||||
from a .qetz no longer copies the whole database (stage D5)
|
||||
*/
|
||||
QetContainerDb::FolioReader::FolioReader(const QByteArray &database) :
|
||||
d(std::make_unique<Private>())
|
||||
{
|
||||
d->database = database;
|
||||
}
|
||||
|
||||
QetContainerDb::FolioReader::~FolioReader() = default;
|
||||
|
||||
/**
|
||||
@brief QetContainerDb::FolioReader::restore
|
||||
restoreFolio() for @p diagram
|
||||
*/
|
||||
bool QetContainerDb::FolioReader::restore(QDomElement diagram, QString *error)
|
||||
{
|
||||
if (!d->opened) {
|
||||
d->opened = true;
|
||||
if (!openDatabase(d->db, d->database, &d->open_error) && d->open_error.isEmpty())
|
||||
d->open_error = QStringLiteral("the project database cannot be read");
|
||||
d->database = QByteArray();
|
||||
}
|
||||
if (!d->open_error.isEmpty()) {
|
||||
setError(error, d->open_error);
|
||||
return false;
|
||||
}
|
||||
return restoreDiagram(d->db, diagram, error);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief QetContainerDb::foliosByUuid
|
||||
@return true if @p database, a format 3 project.sqlite, names its
|
||||
|
||||
Reference in New Issue
Block a user