mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-15 01:54:14 +02:00
Change a symbol's information without building its folio (stage D5)
A script changing the information of a symbol on a folio not built, when nothing else shows that information (no symbol built holds it, no partner is linked to it, no label formula), changes it through the project database: the store and the symbol's element info row, undoable by uuid (ChangeStoredElementInformationCommand). Reading it back reads the store. Building the symbol later takes the change (projectDataBase::takeUnbuiltEdit(), in Element::fromXml()), the label and texts following as for any change. Saving a .qetz writes the changed information in the database in place of the rows the folio was read with, its file copied, the folio still not built; a symbol whose file holds no information block, or a .qet, builds the folio to save. 136-folio .qetz, "comment" set on the 3 513 symbols the database can change: 0.9 s, no folio built, saved in 6.1 s, none built (27 s and 116 folios when saving built them). The same edits on the 4 039 symbols with no partner and no formula, lazily and with every folio built: the two saved projects are the same file. tst_lazyfolios: a script changes a symbol not built, building none; saved as when built (fails when building ignores the change, and when the .qetz writer does); undone; the folio built afterwards shows it. ctest 96/96 eager and lazy; 342 corpus projects save the same in all four arms and export the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -180,6 +180,12 @@ class projectDataBase : public QObject
|
||||
QString prefillReport() const;
|
||||
QSet<QUuid> foliosWithUnjoinedWires() const;
|
||||
QSet<QUuid> folioUuidsOfElements(const QSet<QUuid> &elements) const;
|
||||
bool canEditUnbuilt(const QUuid &element) const;
|
||||
void editUnbuiltElementInformation(const QUuid &element, DiagramContext information);
|
||||
std::optional<DiagramContext> takeUnbuiltEdit(const QUuid &element);
|
||||
QSet<QUuid> foliosWithUnbuiltEdits() const;
|
||||
QHash<QUuid, DiagramContext> unbuiltEditsOnFolio(const QUuid &folio, bool *need_build = nullptr) const;
|
||||
bool setPlacedElementInformation(const QUuid &element, const DiagramContext &information);
|
||||
QHash<QUuid, QString> elementTypesOnFolios(const QSet<QUuid> &folios) const;
|
||||
/// A symbol placed on a folio, as the element table has it
|
||||
struct FolioSymbol {
|
||||
@@ -335,6 +341,11 @@ class projectDataBase : public QObject
|
||||
//briefly gives a copy its original's uuid, so one uuid can have
|
||||
//two symbols until the copy's is renewed.
|
||||
QMultiHash<QUuid, QPointer<Element>> m_placed_elements;
|
||||
/// Information changed through the store for symbols on folios
|
||||
/// not built (editUnbuiltElementInformation()), with the folio
|
||||
/// each is on: building the symbol takes it (takeUnbuiltEdit())
|
||||
struct UnbuiltEdit { DiagramContext information; QUuid folio; bool had_information; };
|
||||
QHash<QUuid, UnbuiltEdit> m_unbuilt_edits;
|
||||
QHash<QUuid, TitleBlockProperties> m_folio_titleblocks;
|
||||
QHash<QUuid, QPointer<Diagram>> m_placed_folios;
|
||||
QHash<QUuid, ConductorProperties> m_conductor_properties;
|
||||
|
||||
Reference in New Issue
Block a user