In particular, don't move block back to start when duplicating,
and don't move crosshair back to start when doing a cut, copy, or
paste.
Also fixes undo for libEdit block duplicate.
Fixes: lp:1740138
* https://bugs.launchpad.net/kicad/+bug/1740138
Prior to placing, cleaning routines need to know which schematic items
are being moved to avoid cleaning them relative to themselves. The
IS_MOVED flag communicates this and is cleared by ClearDrawingState()
Fixes: lp:1797576
* https://bugs.launchpad.net/kicad/+bug/1797576
The old code delayed duplicating till the end which means the
rotate/mirror would affect the original, and then be duplicated
leaving the original incorrectly rotated/mirrored.
Block rotate and mirror now work like they do in Pcbnew (that is
they're treated as part of the block move/duplicate/whatever
rather than finishing it).
Fixes: lp:1780794
* https://bugs.launchpad.net/kicad/+bug/1780794
1) when duplicating don’t keep original hidden until end of drag
2) reset selectionArea when showing it so it doesn’t flash in its previous location
3) center a pasted block on the cursor
4) don’t draw the source selectionArea when pasting a block
5) implement selection-style highlighting for contents of blocks
6) add pasted items to view so they don’t disappear when the block is placed
Fixes: lp:1747197
* https://bugs.launchpad.net/kicad/+bug/1747197
Under certain conditions, it was possible for the block handler to be
entered with no mouse capture callback which would raise a rather
cryptic error message to the user. This should have always been an
assertion so users will not see this issue in release builds.
Fixes lp:1791839
https://bugs.launchpad.net/kicad/+bug/1791839
Duplicate is handled like move/drag but shouldn't mark the original
items as moving. This prevents a redraw from drawing the original
items.
Fixes: lp:1750083
* https://bugs.launchpad.net/kicad/+bug/1750083
Deleting lines can create new ones when old lines are merged as the
result of a delete operation. This checks that all items inside a
selection block are deleted before finishing.
Fixes: lp:1748907
* https://bugs.launchpad.net/kicad/+bug/1748907
PICKED_ITEMS_LIST knows the architecture of the undo commands so
that it can delete those ITEMs which it owns. This represents poor
encapsulation so instead of adding yet another case, I added a
UR_TRANSIENT item flag which is set by callers whenever they create
new objects to “give to” the undo/redo stack. This allowed some
cleanup of other code, but cleaning up UR_DELETE and UR_WIRE_IMAGE
will be a bigger task and have to wait for another day.
Fixes: lp:1542018
* https://bugs.launchpad.net/kicad/+bug/1542018
This adds a set of conditions that will prevent a wire from being
automatically trimmed. Wires that are currently being moved or are
newly created or are explicitly avoided will not be removed. This also
adds a function to set a flag on items in a block.
Fixes: lp:1744632
* https://bugs.launchpad.net/kicad/+bug/1744632
BreakSegment now breaks a known segment and BreakSegments
breaks all segments. This allows functions to break a
segment without needing to iterate through the whole list.
* Derive SCH_SHEET_LIST from std::vector rather than using internal array
management. Change all internal code to use iterators or array operator
in loops.
* Allow creation of empty SCH_SHEET_LIST for external population for plotting
and printing.
* Clean up print an plot code to take advantage of new SCH_SHEET_LIST behavior.
* Make BuildSheetList() public so list can be populated after creation.
* Update all instances of SCH_SHEET_LIST with the appropriate SCH_SHEET
object on initialization.
* Create const and non-const version of SCH_SHEET_PATH::GetSheet().
* Remove wxDC and EDA_DRAW_PANEL as parameters from function
SCH_SCREEN::TestDanglingEnds().
* Change SCH_SCREEN::TestDanglingEnds() to return the connection change state
rather than the dangling end status which wasn't used anywhere.
* Update all calls to SCH_SCREEN::TestDanglingEnds() to remove wxDC and
EDA_DRAW_PANEL parameters and refresh connection indicators only if a
connection state change occurred.
* Add const and non-const version of GetRootSheet() to SCH_SHEET.
* Add GetSheetPaths() function to SCH_SHEET which behaves the same way
as SCH_SHEET_LIST except it uses standard C++ containers and is a much
simpler design.
* Add code to test for sheet path recursion to SCH_SHEET_PATH and SCH_SHEET_LIST.
* Add recursion tests to edit sheet code in Eeschema.
* Add recursion tests to block paste code in Eeschema.