mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-28 04:54:13 +02:00
43d27a9563
A placed element is drawn once from its definition at construction -- buildFromXml() only turns terminal/input/dynamic_text tags into live child objects, every other primitive (line, rect, ellipse, polygon, arc, text) is pre-rendered into a QPicture by ElementPictureFactory, cached forever under the element's uuid with no invalidation path anywhere in the codebase. Edit and save a symbol's drawing and every already-placed instance keeps showing the old one until the project is closed and reopened. Fix, scoped to what is safe to do without ever risking a conductor or a dynamic text's per-instance state: - ElementPictureFactory::dropCache(location) forgets the cached drawing for one location, so the next fetch rebuilds it from the definition's current content. - Element::reloadPicture() re-fetches and repaints one instance. - Projet > "Recharger les dessins des éléments": walks every diagram, drops each distinct location's cache once, then reloads every placed instance. Deliberately does not touch terminals or dynamic texts -- a definition whose terminal positions moved still needs the existing remove-and- reinsert workflow, since terminals are what conductors are attached to and a wrong guess there would silently misconnect wires. Verified: build clean, ctest 6/6. Triggered the new action on a real, densely-wired project (76 elements) via exact keyboard-menu navigation cross-checked against the menu's own addAction order -- ran to completion, correct confirmation dialog, no crash, diagram unchanged and uncorrupted afterward. Could not complete a live edit-and-watch- it-update trace: opening the element editor on a selected item via GUI automation was unreliable in this environment (same class of friction as PR #888), and this sandbox has no file-based (common://) element to mutate on disk as a shortcut -- every example project embeds its elements. The mechanism itself is traced correct: ElementsLocation::xml() for an embed:// location reads the project's live in-memory collection DOM on every call, so a dropped cache rebuilds from whatever was most recently saved. Refs #802 (own analysis comment, 2026-08-31). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>