mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-22 08:34:12 +02:00
Regenerate conductor uuids when a folio is duplicated
ElementsPanelWidget::duplicateDiagram() round-trips the folio through XML and then gives the copied *elements* fresh uuids, because element.uuid is the primary key of the project database and a duplicate silently fails to insert. Conductors now have the same problem and needed the same loop: conductor.uuid is likewise a primary key, its insert is a plain INSERT rather than INSERT OR IGNORE, and a failure only reaches qDebug(). Without this, every wire on a duplicated folio is missing from the wiring list and from the per-element wire count, with nothing shown to the user. Verified against the real schema: inserting the same conductor uuid for a second folio fails with "UNIQUE constraint failed: conductor.uuid", leaving one row where two were expected. Also harden the uuid read in Conductor::fromXml(). The default argument of QDomElement::attribute() is evaluated whether or not the attribute exists, so a uuid was minted for every conductor on every load and thrown away; and the default only applies when the attribute is *absent*, so a present but empty or malformed uuid="" parsed to a null QUuid rather than a fresh one -- and null uuids collide with each other exactly as duplicates do. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
#include "elementspanelwidget.h"
|
||||
#include "diagram.h"
|
||||
#include "qetgraphicsitem/conductor.h"
|
||||
#include "editor/ui/qetelementeditor.h"
|
||||
#include "elementscategoryeditor.h"
|
||||
#include "qetapp.h"
|
||||
@@ -652,6 +653,13 @@ void ElementsPanelWidget::duplicateDiagram()
|
||||
elmt->newUuid();
|
||||
new_diagram->restoreText(elmt);
|
||||
}
|
||||
else if (Conductor *cond = dynamic_cast<Conductor *>(item)) {
|
||||
// Same reasoning for conductors: conductor.uuid is the PRIMARY
|
||||
// KEY of the conductor table, and its insert is a plain INSERT,
|
||||
// so a duplicated uuid fails and the wire silently disappears
|
||||
// from the wiring list and the per-element wire count.
|
||||
cond->newUuid();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user