We need to ensure that boards do not have duplicated KIIDs, so we repair
the duplicates when opening an existing file. This does not change the
file on disk until saved
CHANGED: Highlight net tool changed to highlight display toggle; moved to left toolbar
CHANGED: Multi-net highlight is now accessible when using the highlight net action
ADDED: Highlight Net and Clear Highlight actions to Net Tools context menu
ADDED: Default hotkey (Ctrl+`) for toggling net highlighting
The current and previous net highlight state are now stored and can be toggled
on or off with an action (no hotkey by default).
Highlight is now treated as a persistent state rather than a tool that is entered,
meaning there is no longer a special tool to enter in order to highlight nets.
Highlighting can be controlled while any other tool is active using the hotkeys
or context menu on a net object.
Tweak the icons for highlight net and layer display mode to better disambiguate them.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8250
Differentiates better between the EDA_ITEM IsModified(), referring to
items themselves changing and the EDA_SCREEN IsContentModified(),
referring to whether we have made any unsaved changes.
After drawing a graphic, allow the control points to persist when
exiting the tool.
The effect of this is to make the first "Esc" press a
"return-to-select-tool" event without modifying the selection or control
points from within the drawing tools. The section "Esc" press, when in
the selection tool will clear the selection and the control points
called inside the board editor.
Fix also a broken behavior: the current action was not cancelled, and if it is
called during a move items (when typing the 'T' key), items were broken.
The actual bug is the fact it is called also in fp editor and footprint wizard frame,
because it is part of EDIT_TOOL action list, common to fp editor, and should not.
But a full change is much more costly than just a filter.
ADDED Paste Special... action in pcbnew
CHANGED Additional options for Paste Special... in eeschema, including
"Assign unique reference designators to pasted instance"
Duplicates are reannotated on paste in the same way in pcbnew and
eeschema such that when copying and pasting the same block in the
pcb and schematic, the reference designators will match.
wx/wx.h includes all wxWidgets .h files, and sometimes creates collision
names in #define between kicad and windows headers
Moreover, blindly including a lot of useless files is compil time consuming
Also removes a bunch of old implementations of pad locking and
filtering which are no longer needed. (They're now handled by the
uniform locking code.)
Also removes some of the auto-promotion logic. Rotating a footprint
when a pad was selected is going to be surprising whether the pad
is locked or not.
Fixes https://gitlab.com/kicad/code/kicad/issues/8322
This code was shared between the footprint frame and
pcb edit frame, so push it into the base edit frame.
Also remove the dummy wxUpdateUIEvents that weren't
actually being used.
Use the connecting straight tracks even if not exactly parallel - allow
an error margin configurable in ADVANCED_CFG (default 1 degree). Also
be less strict about end point matching and use the width of the track
as the criteria to determine suitability.
Finally, delete any short lengths of track at the end of the operation
and amend the arc end points to keep connectivity.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7967
It is still possible to move a pad independent of footprint through
the pad properties dialog. This is a much more conscious decision
than using the move tools.
ADDED: "Allow free pads" preference setting in pcbnew, default to off.
When enabled, allows moving unlocked pads independent of the footprint
(i.e. previous behaviour). When disabled (default), any attempt to move
a pad will move the parent footprint instead.
REMOVED: "Lock pads of newly added footprints" preference setting in
pcbnew. (Pad lock state is now loaded from the footprint definition)
CHANGED: There are now only two possible lock states for a footprint:
locked and unlocked. The lock state of the pads in the footprint is
now independent of the footprint lock state.
Also fixed a latent bug that would allow a pad to be moved when the
parent footprint was locked (see m_selectionTool->RequestSelection
lambdas in edit_tool.cpp)
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7739
After commit 9535153f9e there were no more IDs inside the legacy ID
system. Therefore the entire system for dispatching and looking up
the legacy ideas and handling those events can now be removed and
the tool dispatcher simplified (it no longer needs to know about
the ACTIONS class).
Loading this advanced configuration option statically will cause it to
show up in the hotkey list even when the option is disabled. Creating
the tool action at run time resolves this issue.
This is hidden behind an advanced configuration setting and is primarily
useful for developers trying to troubleshoot the netlist payload sent
from the board editor to the schematic editor.
Fixes https://gitlab.com/kicad/code/kicad/issues/8051
The ACTION_MENU constructor now takes the tool as an argument,
so the call to SetTool() immediately following it can be removed
and the tool just passed into the constructor.
Saying "Import/Export" on the labels when the submenu has "Import"
or "Export" in it is redundant.
Note that we can't just update the action text with the new name,
because that is used in the hotkey list and would become too confusing
without the "Import"/"Export" text.
SHIFT, CTRL, ALT modifier keys were handled in 2 different codes, one for
the selection tool and another to modify the mouse cursor shape, with 2
different configs.
Now the modifiers are managed from only one function.
Pcbnew: group also SHIFT, CTRL, ALT modifier keys management to a specific function.
Fixes#8021https://gitlab.com/kicad/code/kicad/issues/8021
We were discarding shapes too aggressively for having a
larger area than a shape underneath.
Let's also try showing fewer disambiguation menus, in particular
always preferring items on the active layer when the candidates
include overlapping items of similar area on other layers.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7949
Bitmaps are now identified by an enum class instead of by pointers.
Bitmap loading and caching is now handled by a class in common, and
we no longer compile most bitmaps into the binary, so there is no
longer a bitmaps static library.
Instead, bitmaps are archived to a .tar.gz file which is installed
in ${KICAD_DATA}/resources/images.tar.gz
The source PNGs are checked in to Git as the original CPP files were,
so that people can build without the required dependencies to convert
SVGs to PNGs.
Initial support is also added for dark theme icons, although this
is not yet exposed in the GUI.
Stubs are present for multi-resolution image resources, but this is
not fully-baked yet and could use some refinement.
CHANGED: add corner and repeat last command now default to 'I' instead
of '<insert>' on Mac.
1) wxWidgets doesn't currently display the correct graphic in the menu
for the insert key
2) Mac laptops don't have an instert key
Fixes https://gitlab.com/kicad/code/kicad/issues/5016
The move tool can stack on others, so when we re-enter the previous tool
this caused another immediate action. We flag re-entry in the tool
stack to check for this and avoid unexpected tool starts
When a user clicks on the "Add Component", "Add Power" or "Add Footprint"
icon, they want to add the item. Requiring an extra click on the screen
before selecting the component/footprint is not needed.
Also remove an implicit zone merge that was happening when the user
edited the zone parameters. This appears to have been a feature but it
happened without a) telling the user and b) having the option to prevent
it.
Fixes https://gitlab.com/kicad/code/kicad/issues/7661
CHANGED: If the user made a selection and then tried dragging it, the
drag would only succeed if the selection contained at least one
footprint. Selections with only tracks and vias would instead make
KiCad drag a new selection box.
This MR allows routing of selections of a single track or via, while moving
selections containing more than one item, whether or not they also contain
a footprint.
Fixes https://gitlab.com/kicad/code/kicad/issues/7539
- Make DIALOG_SHIM::SetPosition working)
- rename PCB_BASE_FRAME::SelectLayer() to PCB_BASE_FRAME::SelectOneLayer()
- PCB_BASE_FRAME::SelectOneLayer(): make dismiss dialog by escape key working.
Fixes#7578https://gitlab.com/kicad/code/kicad/issues/7578
This simple commit makes the Pcbnew copy to clipboard operation snap the
obtained cursor position to grid before the anchors are calculated. This
is also the way the move operation has been apparently working so far.
To be clear, this will not remove all cases where the copy reference
point is not aligned to the grid (see the linked Gitlab issue for
details about the problem). This will still occur for zone outlines that
are not axis-aligned. But such behavior has been so far also present in
the moving operation, so this may be as designed.
Fixes https://gitlab.com/kicad/code/kicad/issues/7507
The automatic wire tool was not working in the gridless mode because the
grid snapping on/off logic present in `EE_GRID_HELPER`, based on the
value of `m_enableGrid`, was not taking into account that another check,
but for the global KiCad setting, would be performed in the `Align()`
method, which is inherited from `GRID_HELPER`.
I've modified all tests of `m_enableGrid` value to also take the global
setting into account, and moved checks for it to `Align()` method, as
it's more consistent this way.
I've also removed an override of the `Align()` method in the
`PCB_GRID_HELPER` class, as it was made redundant by my changes.
Fixes https://gitlab.com/kicad/code/kicad/issues/7402
Some differences are due to difference between libraries being files
in symbol editor and directories in footprint editor, but this unifies
most of the rest.
It also dispenses with the save-to-library vs save-to-document distinction
in the GUI because it makes for too much variability in the GUI, was
implemented differently between the two editors, and isn't needed as much
anymore now that we have the highly visible infobar.
There was also an issue that the save-to-board icon occupies the same
location and has the same size/shape/colours as the Board Setup icon in
PCBNew.
Fixes https://gitlab.com/kicad/code/kicad/issues/7215
Physical layer test needs to be board-visible-layers, not pad-layers.
Also cleans up the tests so that LOD factors in. (When things
disappear due to zoom level they should not be selectable.)
Fixes https://gitlab.com/kicad/code/kicad/issues/7238
For some reason the post-pinned local variable references were replaced
with calls to the points themselves (which are the pre-pinned values).
Fixes https://gitlab.com/kicad/code/kicad/issues/7291
One way to do this would have been to keep the Uuids in the editor
copy. However, this opens us up to errors if we forget a Save As or
export path and end up writing the Uuids out somewhere else.
In the end, it felt safer to store a map of the original Uuids and
restore them if we happen to save the editor footprint back to the
board.
Fixes https://gitlab.com/kicad/code/kicad/issues/7312
... because that's where we do hole-to-copper clearance testing.
Also augments the Clearance Resolution reporter to report on said
hole clearances.
And changes the interpretation of HOLE_CLEARANCE_CONSTRAINT to include
local pad clearance overrides.
Fixes https://gitlab.com/kicad/code/kicad/issues/7325
Non-layer elements can be logical centers for the circle and arc tools.
We allow the non-layer to snap for the center points and revert to only
on-layer elements after
Fixes https://gitlab.com/kicad/code/kicad/issues/7327
CHANGED footprint positions files -> component placement files.
Not all footprints get placed, so component is a more neutral word.
Use of "placement" instead of "positions" removes the double-plural
that makes footprint positions files such a mouth-full.
Fixes https://gitlab.com/kicad/code/kicad/issues/7097
Show the dragging tools in the context selection menu when a single
component is selected. Prevent the dragging tools from appearing when
more than one object is selected, as they will not activate anyway.
Fixes https://gitlab.com/kicad/code/kicad/issues/7258
Also fixes some latent bugs with not updating the local ratsnest
visibility in other places, and the netcode in update PCB from schematic.
Fixes https://gitlab.com/kicad/code/kicad/issues/7202
After a rotation or flip the reference point has to be restored to the
previous value to prevent the dragged item from warping to the cursor.
Before this change, the reference point was only cleared, causing odd
behavior when a rotation or flip was performed.
Fixes https://gitlab.com/kicad/code/kicad/issues/7112
Two issues found with the locking system used to prevent access to
stale connectivity data during the zone fill process:
1) a std::mutex has undefined behavior if you try to use it to guard
against access from the same thread. Because of the use of wx event
loops (and coroutines) it is entirely possible, and in some situations
inevitable, that the same thread will try to redraw the ratsnest in the
middle of zone refilling.
2) The mutex was only guarding the ZONE_FILLER::Fill method, but the callers
of that method also do connectivity updates as part of the COMMIT::Push.
Redrawing the ratsnest after the Fill but before the Push will result in
stale connectivity pointers to zone filled areas.
Fixed (1) by switching to a trivial spinlock implementation. Spinlocks would
generally not be desirable if the contention for the connectivity data crossed
thread boundaries, but at the moment I believe it's guaranteed that the reads
and writes to connectivity that are guarded by this lock happen from the main
UI thread. The writes are also quite rare compared to reads, and reads are
generally fast, so I'm not really worried about the UI thread spinning for any
real amount of time.
Fixed (2) by moving the locking location up to the call sites of
ZONE_FILLER::Fill.
This issue was quite difficult to reproduce, but I found a fairly reliable way:
It only happens (for me) on Windows, MSYS2 build, with wxWidgets 3.0
It also only happens if I restrict PcbNew to use 2 CPU cores.
With those conditions, I can reproduce the issue described in #6471 by
repeatedly editing a zone properties and changing its net. The crash is
especially easy to trigger if you press some keys (such as 'e' for edit)
while the progress dialog is displayed. It's easiest to do this in a debug
build as the slower KiCad is running, the bigger the window is to trigger this
bug.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6471
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7048
Before processing the select tool actions, we check if the router is
currently active and if it is, pass the event for processing in other
tools
Fixes https://gitlab.com/kicad/code/kicad/issues/7021
Check for footprint editor
Promote pad edits to footprint edits iff
- Pad is locked
- Footprint is not
Otherwise, handle the pad normally and prompt for locked items if found
Many, many KIDIALOGs use OK/Cancel and then rename both buttons to
confirm or deny some action. In those cases we *do* want to store
the deny actions if they check "Do Not Show Again".
Fixes https://gitlab.com/kicad/code/kicad/issues/6979
Prompting to unlock is obtrusive and blocks the common action of
dragging from a pad to align footprints. The less common action of
editing pads in layout can be accomplished after unlocking the pads
Fixes https://gitlab.com/kicad/code/kicad/issues/6997
Our rendering pipeline is not set up for this kind of speed,
and this is a blocking operation at the moment.
Note that we will get an update at the end of the move
because OnModify does it.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6819
During the first expansion, we are supposed to stop at vias and branches
(where three track ends connect). This needs to account for the number
of vias and tracks not just tracks
Prevents line splitting behavior needed in v5 when drawing polygons on
courtyards. Also provide property dialog with some smarts to handle
special layers
Fixes https://gitlab.com/kicad/code/kicad/issues/6900
CHANGED: If you flip or rotate an item or selection of items, move
the mouse, press 'M' and start moving the mouse, the selection jumps
to where the mouse is. This MR fixes that so it doesn't happen.
This bug was reported against the 5.1.x branch but also affects the
5.99 branch. This MR is for the 5.99 branch.
Fixes https://gitlab.com/kicad/code/kicad/issues/4069
It's much more useful to use the locked items as targets.
Also fixes some issues with commits getting the wrong items when
pads are promoted to footprints.
Fixes https://gitlab.com/kicad/code/kicad/issues/6859
Locked pads are a bit different from other locked items
and there are sufficient reasons to need to select them
that it makes sense to introduce this inconsistency.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6837
CHANGED: Ctrl-middle mouse button double click should perform
'Zoom to Objects' in Pcbnew, but a change in modifier key handling
broke it. This MR restores the functionality.
Fixes https://gitlab.com/kicad/code/kicad/issues/6740
CHANGED: manually-placed (stitching) vias won't have their nets automatically updated
(unless the via is placed directly on a track segment)
CHANGED: stitching vias can be placed on footprint pads and pick up their nets
Fixes https://gitlab.com/kicad/code/kicad/-/issues/5484
Don't use the same "post_*" icon in the treeview. The badge gives an
action that doesn't apply in the treeview.
Also renames different file blobs to the "file_*" prefix.
Also removes EditToolSelectionFilter which was misused in more places
than it was used correctly. The original point of the client filter
was to move the logic to the point of use, which the
EditToolSelectionFilter sort of obviated anyway.
Fixes https://gitlab.com/kicad/code/kicad/issues/6751