Teardrops don't get their own unique UUID saved in the file, so they can
end up being sorted differently on save. Instead, we assign a synthetic
UUID to the teardrop based on its two connecting elements' UUIDs.
This also fixes the comparison function so that we don't end up mixing
around caches
When the footprint library loader runs in a background thread, it uses
KIID_NIL_SET_RESET to set g_createNilUuids=true. However,
this was a global variable that affected all threads, including the main
thread where the schematic editor might be starting.
When eeschema created new SCH_SHEET and SCH_SCREEN objects during startup,
they received nil UUIDs due to the background thread's setting. These sheets
were then filtered out in SetTopLevelSheets() because of the niluuid check,
leaving m_currentSheet empty. Later calls to GetScreenDesc() crashed when
trying to dereference GetCurrentSheet().Last() which returned nullptr.
Call KIID_NIL_SET_RESET in each thread that loads footprints to avoid
generating real UUID for temp fp data without impacting schematic editor
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22699
Recommendation is to avoid using the year nomenclature as this
information is already encoded in the git repo. Avoids needing to
repeatly update.
Also updates AUTHORS.txt from current repo with contributor names
Not only is this simpler, but it should be compatible
with all Boost versions (the cast is a problem in 1.86)
and it was also 'improved' in 1.86 for better mixing.
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/18651
Boost 1.86 removed the boost::random dependency from boost::uuid, so
we need to include those headers on our own now to use the random
mersenne twister implementation.
It appears that in our zeal to prevent file changes when saving shared
schematics, we (I) clobbered saving relative symbol instance data paths
to the clipboard. This has be restored along with setting the correct
symbol unit for relative clipboard paths.
Fixed a serious issue with KIID_PATH::MakeRelativeTo() where the original
path was not restored when the incremental KIID object test fails. This
also included a minor optimization using the actual KIID object for
comparison instead of converting it to a string and then comparing the
string.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15981
Reduces multibyte conversion banging on library load. uuids already are ASCII by their nature and the logic checks that or else it generates a new kiid.
Fix compile with Boost 1.65.1 (and possibly some or all of the 1.59-1.66
range); remove dependence on private boost::*::detail members.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/12175
Comment tweaks by Mark Roszko @mroszko
Save sheet and symbol instance information to the clipboard on copy
Load sheet and symbol instance information from the clipboard on paste
and renumber page numbers after loading.
Correctly handle pasting in a multiple hierarchy by ensuring symbol and
sheet instances are updated for all instances of the destination sheet.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8207
The Boost UUID random generator can throw an entropy error in the KIID
object constructor which leaves the UUID generator in an undefined state.
This is treated as a fatal error and KiCad is closed. The likelihood of
this occurring is low but at least now it is properly handled and cannot
result in UUID clashes.
Reports 305311, 305372, 305492, 314743, 314754, 314757, 316277.