Rather than generating expensive classes to store in a set to check for
duplicate checks, we avoid double-checking elements in the vector. For
large schematics this results in a substantial speed increase
This can't distinguish a header block comment in front of a file
with multiple spice units, and so will include that into the first
unit only.
Also fixes the pin assignments reference textbox to use a
fixed-width font as many .subckt's contain ASCII graphics for
pin definitions (not that it helps any with the test case from
the given bug).
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15660
(cherry picked from commit ede542f911)
If KiCad crashes or exits without deleting the lockfile, don't show the
warning message unless we are not the one who locked it or there are
other KiCad instances running locally.
This should catch 99% of the cases where the message is shown
incorrectly. There may be some corner cases where the lock file is
created on a network drive using two different machines with the same
name and same user but these cases should be (famous last words)
sufficiently rare as to not be observed in practice
(cherry picked from commit 7fe83993cf)
When duplicating and existing symbol, we must set the pins before
setting the lib symbol as the lib symbol will generate a pin map that
will be broken by the shift to new pins
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15728
(cherry picked from commit 12ebb2bbfa)
SCH_PIN pointers are used through KiCad and removing them without a
global refresh risks crashes. A safer approach is to simply reuse the
SCH_PIN structures, updating the data to the revised library
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15715
(cherry picked from commit bdb7b99fc8)
Some how symbol names that still have escaped '/' character get mixed with
symbol names that have '/' characters now that it is no longer an invalid
LIB_ID character. This was causing derived symbols to loose the link to
the parent symbol. This fix replaces any instances of "{slash}" with "/"
to convert symbol names to the proper escaping.
Thanks to JP for the inspiration for the fix.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15715
Manually cherry picked from commit 2f51d22b3a.
We store our connectivity dirty flag with the SCH_ITEM but we generate
SCH_CONNECTION based on the SCH_ITEM and the SCH_SHEET_PATH. For this
reason, we need to avoid clearing the connectivity dirty flag until
we've finished processing all instances of the SCH_ITEM in the graph
This also means that we need to allow getting the SCH_CONNECTION pointer
even when the connectivity is still dirty (getting SCH_CONNECTION
happens based on SCH_ITEM and SCH_SHEET_PATH, not just SCH_ITEM)
(cherry picked from commit 7d12e1c4f5)
Shared pointers contained stale references to the temporary graph. When
merging, we need to ensure all references are updated to the final graph
(cherry picked from commit b52c43b933)
- Incremental extraction needs the newly created items. The modified
items are already set in the connection graph but the newly created
items don't exist yet, so we need to add those explicitly
- Bus parents need to ensure that the bus children exist because we
iterate on the updates from the top of the graph down
(cherry picked from commit 9fc45eb08c)
Adding symbol to the screen can change the library reference. But when
we are pasting, we want the library reference for annotation, so we need
to keep a map of old->new libsymbols and fixup the pasted symbols before
using
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15419
We have a break somewhere in the connectivity that doesn't fully process
connections but the current code seems to catch these by forcing a
top-down & bottom-up calculation
Fixes https://gitlab.com/kicad/code/kicad/-/issues/14818
The elements don't care which they connect to, so don't search for
points on the page, just collect them all and then test them all
Adjusts f3dd5b73
(cherry picked from commit c2fd2f42eb)
In large designs with thousands of duplicate elements (e.g. power
symbols), we need to be smart about vector management. Removing all but
the first few items should be batched and not element at a time
Ref: KSC-885
(cherry picked from commit b43f037a91)