In order allow the new file format to support derived symbols with
field properties that are different than the parent symbol, the code
that copied the parent field properties to the derive symbol field
properties had to moved out of LIB_PART::SetParent() into the legacy
symbol library plugin and the symbol library editor add new symbol
code to preserve the current behavior and not overwrite derived
symbol field properties.
This lays the ground work for allowing field properties of derived
symbols to be different than their parent symbol.
CHANGED: The symbol library save menu entry is now only enable when the
currently selected library is modified.
CHANGED: The symbol library save all menu entry and tool bar button are
enabled when one or more of the symbol libraries have been modified.
REMOVED: The ability to save symbol libraries in the legacy file format.
Every time SCH_COMPONENT::GetDrawItem() was called, the schematic symbol
pin table was updated. Under certain conditions, this happens inside
loops so the amount of time spent rebuilding the pin table can add up.
Force default settings to be written instead of undefined which mimics
the behavior of the previous file format with the exception of text
objects which requires some more thought. Please note that no new
features are added to the library file format so the file version did
not need to be updated.
Fixes https://gitlab.com/kicad/code/kicad/issues/4411
You can now choose the behavior of dragging with the
middle and right mouse buttons.
You can also choose which modifier keys to use for
panning and zooming with the scroll wheel or trackpad.
You can also customize the zoom speed, which makes
it possible to have a good zoom experience on a wider
range of input devices.
You can also now zoom by dragging with the right or
middle button if desired.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/3885
Fixes https://gitlab.com/kicad/code/kicad/-/issues/4348
Note: this is a basic implementation but it could be
improved once we include bus information in the netlist
and pcbnew can natively keep track of buses and nets
instead of just nets.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/4158
As a visual aid, we can peek into the child to see if a pin
represents a bus in the child (in the case of aliases etc
we might not be able to tell by the name of the pin).
Only do this if there isn't anything else driving a connection
onto the sheet pin in the parent sheet.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/2619
Apparently at some point in our development history, we allowed aliases
to be saved in the cache library. The rescue code was only looking for
root symbols in the cache library which caused missing symbol rescues.
Flattening the symbols ensures the rescue library will have a unique
symbol for every symbol in the schematic. This bug also was in play
when rescuing from the symbol library table.
Fixes https://gitlab.com/kicad/code/kicad/issues/4494
This was causing junctions to not always be added on wire
segments that overlapped component pins, because the pin
might not be part of the component bounding box before
UpdateLocalLibSymbolLinks() is called. When the bbox
was never updated, these symbols weren't collected by
the rtree query for objects overlapping a point.
* Move it to a panel along with the canvas to have a better UI
* Allow the infobar to automatically close after a set time
CHANGED: The eeschema find notifications now use the infobar instead of
a popup window
This widget allows for non-intrusive display of text
above the editing canvas. Currently, this is used
for displaying the read only status of the files.
Set up a new lineage for SCH_ITEMS to get back to the SCHEMATIC
they live on: Items will all be parented to the SCH_SCREEN that
they are added to, and each SCH_SCREEN will point back to the
SCHEMATIC that it is part of. Note that this hierarchy is not
the same as the actual schematic hierarchy, which continues to
be managed through SCH_SHEETs and SCH_SHEET_PATHS.
Add required library symbols to new file formatter and parser when copying
schematic symbols to prevent missing library symbol when pasting into a
different schematic which may not have the same library symbol available.
Fix a minor bug where the default schematic symbol reference was not set
by the parser when loading.
Fixes https://gitlab.com/kicad/code/kicad/issues/4442
Calling config() gets you whatever APP_SETTINGS_BASE is returned
by the underlying kiface, which is currently going to be an
EESCHEMA_SETTINGS everywhere this is used, but that isn't a
guarantee.
Apparently the < operator was never implemented for SCH_JUNCTION objects
so they were not get sorted which was causing the large diffs between
schematic saves.
Fixes https://gitlab.com/kicad/code/kicad/issues/4369
The duplicate sheet code path assigned a SCH_SCREEN object instead of a
SCH_SHEET object as a parent. A recently added assertion to check for
this did it's job.
Fixes https://gitlab.com/kicad/code/kicad/issues/4369
In order to avoid confusion when loading legacy schematics, updating time
stamp UUIDs is no longer performed. If users where not experiencing issues
with time stamp clashes with shared schematics then this was probably a
case of me being overly cautious.
The original conversion code has be moved to
SCH_EDIT_FRAME::ConvertTimeStampUuids() so the working functionality is
not lost. This function should not be used until a way is found to update
the board from the schematics with the appropriate settings.
Move updating the pin maps from external code to the SCH_COMPONENT object
when changing the symbol body style (DeMorgan). This is a vein attempt
to make the SCH_COMPONENT object self contained so we don't have to depend
on the caller needing to figure out how to keep internal objects synced.
SCH_SCREEN::UpdateSymbolLinks() should only be called when working with
the legacy schematic file format. Add schematic symbol library symbol
links should be set using SCH_COMPONENT::SetLibSymbol() which updates
the symbol link and pin map accordingly.
Change the schematic symbol LIB_ID edit dialog to properly use the new
SCH_COMPONENT::SetLibSymbol() function.
Use flattened (root) library symbols to prevent broken library symbols
in schematic files.
Remove the edited symbol from screen before making changes to the symbol
to prevent potential orphaned symbol libraries being saved in schematic
file.
Add some defensive programming to let developers know that an invalid
library symbol link was used when calling SCH_COMPONENT::SetLibSymbol().
Removed some rogue calls to SCH_SCREEN::UpdateSymbolLinks() which should
only be called the last time the schematic is loaded from the legacy file
format. After that, all symbol library links should be changed using
SCH_COMPONENT::SetLibSymbol() which will prevent the pin maps from ending
up with broken symbol library pin links.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/4318
There has been a long standing (since the beginning of the project?)
issue with sharing schematics between projects. It has been somewhat
supported for complex hierarchies (a sheet shared multiple times in a
single design) but it has not been well supported for simple hierarchies
(the symbol references cannot be changed in the shared schematic). This
issue has been resolved by moving all of the symbol instance sheet paths
from the symbol definitions in the all of the project files and save all
symbol path instances in the root sheet. This ensures that orphaned
symbol instance paths do not accumulate in shared schematic files and
that designs that reuse schematic in simple hierarchies can how have
different references. It also allows the root schematic from one project
to be uses as a sub-sheet in another project.
When legacy schematics are loaded, all sheet and symbol UUIDs are
converted from time stamps to true UUIDs. This is done to ensure there
are no sheet path instance clashes between projects. That being said,
there are no checks for this. It is assumed that the probability of
UUID clashes is so low that it doesn't make sense to test for them.
This is a very large and potentially disruptive change so this will be an
unusually long and detailed commit message.
The new file formats are now the default in both the schematic and symbol
library editors. Existing symbol libraries will be saved in their current
format until new features are added to library symbols. Once this happens,
both the legacy schematic and symbol file formats will be no longer be
savable and existing libraries will have to be converted. Saving to the
legacy file formats is still available for round robin testing and should
not be used for normal editing.
When loading the legacy schematic file, it is imperative that the schematic
library symbols are rescued and/or remapped to valid library identifiers.
Otherwise, there will be no way to link to the original library symbol and
the user will be required manually set the library identifier. The cached
symbol will be saved in the schematic file so the last library symbol in
the cache will still be used but there will be no way to update it from the
original library.
The next save after loading a legacy schematic file will be converted to
the s-expression file format. Schematics with hierarchical sheets will
automatically have all sheet file name extensions changed to .kicad_sym
and saved to the new format as well.
Appending schematics requires that the schematic to append has already been
converted to the new file format. This is required to ensure that library
symbols are guaranteed to be valid for the appended schematic.
The schematic symbol library symbol link resolution has been moved out of
the SCH_COMPONENT object and move into the SCH_SCREEN object that owns the
symbol. This was done to ensure that there is a single place where the
library symbol links get resolved rather than the dozen or so different
code paths that previously existed. It also removes the necessity of the
SCH_COMPONENT object of requiring any knowledge of the symbol library table
and/or the cache library.
When opening an s-expression schematic, the legacy cache library is not
loaded so any library symbols not rescued cannot be loaded. Broken library
symbol links will have to be manually resolved by adding the cache library
to the symbol library table and changing the links in the schematic symbol.
Now that the library symbols are embedded in the schematic file, the
SCH_SCREEN object maintains the list of library symbols for the schematic
automatically. No external manipulation of this library cache should ever
occur.
ADDED: S-expression schematic and symbol library file formats.
Some items (tracks and footprint graphic items) when reading were added in reverse order
of the initial file, creating useless differences and breaking source comparisons.
Also fixes a bug where a bunch of eeschema settings weren't getting
loaded because it looked like they were larger than the max value
(which wasn't being scaled from mils to internal units).
Fixes https://gitlab.com/kicad/code/kicad/issues/2089
Also fixes a bug where we were depending on the old deque stuff's
deterministic traversal, which isn't provided by the new RTree stuff.
Fixes https://gitlab.com/kicad/code/kicad/issues/2433
Once the gal canvas hsad the focus, it was not possible to use arrow keys in library
or symbols or fp lists even after clicking on an item.
This focus issue is now fixed.
Fixes#4292https://gitlab.com/kicad/code/kicad/issues/4292
In Eeschema, texts are expected to have the same size X and size Y.
So we cannot set 2 different values for X and Y pin size:
- only size X is saved in file
- 2 different values for X and Y create bad look for pin + associated graphic symbol
Allowing separte values need a file format change *and* a code change.
Texts were drawn with a minimal line thickness = GetDefaultPenWidth().
The default pen width can be to large for small texts.
So the actual text thickness is now always clamped.
Unlike the global labels, the hierarchical label is not inside the graphic symbol.
So the graphic symbol size depends only of the text size, not of the text offset.
* Push all sizing operations into EDA_BASE_FRAME
* Save the unmaximized window size when maximizing
so that we can then save it in the config if the
window is maximized. Otherwise the config ends up
with the maximized size saved, and weird behavior
occurs when unmaximizing on the next opening.
Move the hierarchical sheet loading outside of the try exception block
so that any sheets that were loaded when a schematic file load fails
are loaded rather than skipped. This allows more of the schematic to
be loaded when any parser errors occur.
SCH_SHEET objects can only have another SCH_SHEET object as a parent
or nullptr for the root sheet so overload EDA_ITEM::SetParent() to
prevent the parent from being set to another type of object and add
some checks to the root sheet code just in case someone gets clever
and attempts to bypass the overloaded SetParent() call.
Now only reposition a window if it is completely on a
disconnected display or if only one corner is on screen
and it is within a region close to the screen border.
CHANGED: Window position on startup should be preserved more
Don't try to use complex algorithms taking into account default
margins, line-widths and pen-widths (especially when they differed
between label types). We now use the (user-controlled) text
offset ratio to determine the margins (from the center-point of
the attached line).
Some graphic line thickness were initialized to 0.
The actual line thickness is set after reading config.
But in some cases the config does not exist, and 0 line thickness creates draw issues.
These panels must have the wxTreeBook as parent to receive mouse and key events.
They previously have the dialog itself, but it does not work on any OS.
When the filter = SCH_LOCATE_ANY_T, components and sheets were selected twice, one
from the main loop, and one from specialized loops for SCH_COMPONENT_T and SCH_SHEET_T.
(the dialog was reactivated by calling Raise(), but this is not enough: Show()
must be called also, at least on Windows).
Fix also a minor wxWidgets alert in ERC dialog.
Fixes#4171https://gitlab.com/kicad/code/kicad/issues/4171
I could not find a reasonable solution to the mandatory field canonical
name issue so field indices are back in play as much as I did not want
to use them. They really only have meaning for the mandatory fields.
For all other fields, the index number is meaningless and the field name
is the primary means for searching.
Fix a broken field size bug in the symbol library formatter.
deselect the previously placed items.
Otherwise, the changes (rotation, mirroring...) made during placing the current symbol
are applied to other previously placed items.
This is obviously not what is wanted, and creates crashes in Eeschema.
Fixes#4163https://gitlab.com/kicad/code/kicad/issues/4163
When editing a sheet properties, the dialog always thinks the sheet filename is changed.
It creates serious issues, like duplicating all items in sheet, because the code try to
again import the existing sheet file content.
The temporary fix does not import the existing sheet file content if the
filename is not modified.
This is a very partial fix, because there are many other issues in this dialog
Use an underscore character instead of a semicolon between the library
ID library nickname and symbol name in library ID search strings when
looking up symbols in the cache library since that is how they are saved
when creating the cache library. This fixes rescuing missing symbols
from the cache when they have been removed from the original library and
preventing a broken symbol link indicator from being shown when a symbol
is removed from the library.
Add some defensive testing to make sure the library passed to function
SchGetLibPart() is actually the cache library.
The code that checked for pin conflicts to determine if a symbol needed
rescued did not check either the pin convert setting so it was possible
for a pin from the other convert on symbols that do not have identical
units to appear to not have a pin conflict. Add tests for pin unit and
convert setting to prevent that from breaking the comparison. This must
have always been broken.
Fix the symbol preview widget to prevent drawing all symbols on top of
each other (if we need to do this the code will have to be revised) and
also show the convert if valid.
Fix broken symbol cache library when saving alias symbols.
Fixes https://gitlab.com/kicad/code/kicad/issues/3879
It looks good, but non-mandatory fields have an ID of -1, so it
doesn't actually work. Some places got around this by converting
the ID to unsigned, but this just hides the real issue from
unsuspecting coders.
Fixes https://gitlab.com/kicad/code/kicad/issues/4140
Move the camera out to its own so that everything else is board-
related, and then rename BOARD_ADAPTER.
At some point the flags should probably be moved out too, and they
can have the EDA_3D_SETTINGS name.
Iterators are invalidated by vector reallocation. We need to keep the
count in the loop in order to have a valid position in the vector
Fixes https://gitlab.com/kicad/code/kicad/issues/4073
Please note that the symbol cache is not embedded in the schematic file
to allow for round robin testing with the existing file format. Once
the parser round robin testing is complete, the symbol cache will be
embedded in the schematic file.
Includes improvements to Update PCB from Schematic dialog and
corresponding changes to Symbol Properties, Sheet Properties and
Footprint Properties.
Fixes https://gitlab.com/kicad/code/kicad/issues/4012
I imagine this was inserted to ensure the selected item is visible,
but selecting the item does that. SyncLibraries() rebuilds the
entire tree, causing it to lose the user's scroll position.
Fixes https://gitlab.com/kicad/code/kicad/issues/4020
Replace SEVERITY_ERROR by RPT_SEVERITY_ERROR to avoid collision with a system definition.
Replace other SEVERITY_XXX by RPT_SEVERITY_XX for consistency.
Fix compil warnings and some other compil issues.
Previously, to list changes, the Reference field was used in comparisons.
In complex hierarchies, this is incorrect: the Reference field contains
only the last displayed reference, not the reference of a given sheet.
The comparison uses now the sheet paths for ref and unit selection.
This implements all existing symbol library object support and the ability
to save and load symbol library files between file formats for round robin
testing.
CHANGES: Symbol library file format has been converted to s-expressions.
Add support code for picking apart symbols at some future junction that
will allow full inheritance conversion of existing symbol libraries. For
now, symbols arranged by unit and body style numbers are nested for round
robin testing of symbol libraries once the parser is complete.
The symbol check output the HTML message for each item. This is _very_
slow and can lock the system reponsiveness. Changing to a queue/flush
method is much faster
Keeping a pointer to the actual file history inside a special
file history menu led to many cases of use after free crashes,
so instead rework the actual file history to add the menu
items.
Fixes https://gitlab.com/kicad/code/kicad/issues/3741
After importing, some schmeatics are moved, item at a time. When moving
schematic items, we need to update the RTree bounding box to allow
searching on position
Fixes#3915 | https://gitlab.com/kicad/code/kicad/issues/3915
CHANGED: Settings are now stored in versioned sub-directories
ADDED: First-run dialog for migrating settings from a previous version
CHANGED: Settings are now stored as JSON files instead of wxConfig-style INI files
CHANGED: Color settings are now all stored in a separate settings file
CHANGED: The symbol editor and footprint editor now have their own settings files
CHANGED: Color settings are no longer exposed through BOARD object
CHANGED: Page layout editor now uses Eeschema's color scheme
Settings are now managed through a central SETTINGS_MANAGER held by PGM_BASE.
Existing settings will be migrated from the wxConfig format on first run of each application.
Per-application settings are now stored in one class for each application.
When searching for fields, the code was sometimes comparing translated and not translated names.
This is an issue for mandatory fields, in non English languages.
Translated field names should be used only in messages.
Using a UTF8 char inside a C string can work on unix, but not on Windows.
It must be explicitly converted in a unicode value inside a wide string
(like a wxString)
When adding a .pretty library, if the actual .pretty folder were
selected then no folder would be added to the list of libraries.
This led to an assert when normalizing paths, and the library
not being added.
Add also a comment in common.cpp about using wxLocale instead of setlocale.
DIALOG_UPDATE_FIELDS has issues in non English languages, due to its design.
The fix for mandatory fields is only a partial fix that avoid major issues.
The immediate action option clears (or not) the position of the events.
We use this to determine if the command should start at the given
position or merely activate the tool. This was being checked in the
menu options, which only activated for tool commands in the context
menu. Moving to the process event, we catch hotkeys as well.
This also restores the previous logic in eeschema that used a static
variable for storing wires rather than the private class variable.
Starting the draw event now picks up from the existing wires when
activated in immediate mode.
Fixes#3891 | https://gitlab.com/kicad/code/kicad/issues/3891
If the point editor is active and a change is made, the tool was shut down after
deleting the board data, in the frame Dtor.
Therefore a crash happened because a call to GetScreen()->SetModify(); using a null pointer,
and after the test for modifications was done.
Now tools are stopped when closing the window, before any test for modifications.
The parents are the only items that live in the RTree, so the rebuild
check needs to recurse into the sub structure to check for selection
Fixes https://gitlab.com/kicad/code/kicad/issues/3858
Previously, OnModify() was called for a lot of items, even when not modified.
For large schematics, the calculation time was unreasonable ( several minutes)
It is now called only a few times.
Shared sheets can create issues in a complex hierarchy.
This is not related to sharing sheets between projects.
(Sharing sheets between projects is not supported by Kicad)
These help files are created from the .md source files and contain I18n strings,
but do not exist if kicad is not built from sources.
However they are needed by translators.
ADDED: Back annotation algorithm,
eeschema back annotation dialog
CHANGED: added some minor helper methods to SCH_REFERENCE_LIST and SCH_REFERENCE,
split SCH_REFERENCE_LIST::CheckAnnotation on 2 parts to reuse code
The RTree does not have a deterministic iterator, so extracting items
may be in arbitrary order, causing issues as the schematic appears to
change when comparing to previous revisions.
This uses the SCH_ITEM comparison operator to for ordering by type, then
by custom sorting within type.
For the netlist, we choose the first available unit in the sheet for
each component.
Fixes#3811 | https://gitlab.com/kicad/code/kicad/issues/3811
We need to ensure that the appended sheet does not already exist in the
parent hierarchy. We do this for new sheets but need to check for
existing ones as well.
Fixes#3806 | https://gitlab.com/kicad/code/kicad/issues/3806
When opening the symbol editor without loading the schematic editor the
default text size setting is not loaded and was defaulting to the old mils
setting. Convert the default text size to internal units in case the
symbol editor is launched first.
Set default line, bus, and selection highlight width to internal units.
Change new symbol dialog pin position offset control from a spin control
to a text control so the unit binder object can handle converting to and
from internal units.
Fixes#3802https://gitlab.com/kicad/code/kicad/issues/3802
The components are reloaded when libraries change and when loading a
schematic. The initial load does not contain pins and so bbox hits may
miss elements.
Fixes#3800 | https://gitlab.com/kicad/code/kicad/issues/3800
Convert minimum sheet width and height definitions from mils to internal
units.
Add comment to sheet minimum width and height definitions to indicate
sizes are in mils.
This file should really be included first from any source file, because it
contains platform specific workarounds.
This also groups includes a bit by source.
Bus submenus weren't sending events because tool wasn't set.
Net names need to be unescaped for display.
Unfolding wasn't drawing the new wire segments.
SCH_LINE_WIRE_BUS_TOOL could get caught in an infinite event handling loop.
Fixes https://gitlab.com/kicad/code/kicad/issues/3796
Scope: NETLIST_ITEM, CONNECTION_TYPE, ELECTRICAL_PINTYPE,
NET_CONNECTION, NETLIST_ITEM, GRAPHIC_PINSHAPE
Note, the pin type enum had PT_ added to the front to prevent
shadowing of the INPUT symbol on msys2 (see discussion at
c17c9960d8)
Spice lines defining circuit elements are contained in a .subckt ..
.ends block. The intervening lines should be exported to the netlist as
well as the control lines.
dynamic_cast could not resolve the cast chain leading to a null undo
point. Since we know the item to be LIB_ITEM, we can use static_cast
anyway and avoid the overhead.
Fixes#3771 | https://gitlab.com/kicad/code/kicad/issues/3771
This also removes vector cover types which do nothing except obfuscate
the underlying implementation.
Mainly changes SCH_SHEET_PINS and CONFIG_PARAM_ARRAY (which will soon
be replaced by Jon's new stuff).
* Ensure the lib edit undo checks for pointer validity
* Assert that the frames are the correct type (satisfies coverity)
* Convert C casts to C++ casts
It served us (mostly) well for more than a decade. It helped KiCad grow
before the std:: came into decent shape or speed. It was a good little
list.
RIP DLIST 2008-2020
This moves EESchema DLIST structures to rtree. These changes are more
fundamental than the pcbnew changes from 9163ac543888c01d11d1877d7c1
and 961b22d60 as eeschema operations were more dependent on passing
drawing list references around with SCH_ITEM* objects.
Add try/catch blocks when saving symbols using a plugin object directly
to prevent potential unhandled exception bugs. I'm not totally happy
using wxLogError to flag exceptions but I couldn't think of a better way
to handle them.
Fixes#3665https://gitlab.com/kicad/code/kicad/issues/3665
"INPUT" declaration in sch_text.h generate *a lot of* compil warnings.
So it is replaced by PS_INPUT.
For consistency, others member of enum class PINSHEETLABEL_SHAPE are also renamed.
For legacy reasons, it stored left and right "spin" as flipped integers in the file format.
But the code handled the flip in multiple locations rather than just doing it on file io.
This change unifies the internal code and does the mapping in the file I/O.
and switch to the paren sheet from the context menu.
Mainly, change the way the dialog is managed from the sch_edit_frame:
the pointer to find the created dialog is replaced by a call to wxWidows::FindWindowByName().
Using a pointer set and cleared by events is a recipe for crashes.
ADD: Allow drawing of current and phase traces with dotted style
for easier differentiation from voltage and magnitude. The option
is available in the View menu of the simulator.
* Split up the thirdparty code into the thirdparty folder (#3637)
* Create a new kimath static library containing all the math functions
This is part of cleaning the build system for #1906.
ADD: User can now decide to keep the hierarchy navigator open while working
on a schematic.
This behavior can be configured in eeschema->preferences->eeschema->Editing options.
New v6 can test multiple points not previously considered. This
corrects the test to ensure that junctions are correctly added when
lines are present.
Fixes#3729 | https://gitlab.com/kicad/code/kicad/issues/3729
Change default text size and anchor positions back to mils. Internal
units need to be converted at the source, otherwise the size will get
converted twice in the schematic editor configuration code which will
result in the default text size being off by the conversion factor.
Fixes#3730https://gitlab.com/kicad/code/kicad/issues/3730#
Derived symbols were causing the symbol properties grid to assume that
the reference could not be edited because derived symbols inherit the
reference from the parent symbol. The flattened symbols in the schematic
still have the parent set which cause the issue. Clearing the parent of
the flattened symbol resolves the issue.
Fix a minor bug in the symbol information of derived symbols show in the
symbol chooser dialog.
Fixes#3723https://gitlab.com/kicad/code/kicad/issues/3723
When dragging we'll create new line segments between selection-edge
objects and things outside the selection that they're attached to.
These new lines have their IS_NEW flags set, but shouldn't fool us
into thinking that the selection contains pasted (or placed) items.
Abandon the previous behavior of always creating a new copy of the
buffered symbol which required a re-parenting of every derived symbol
to prevent accidentally orphaning a derived symbol parent symbol
pointers.
This change required something that should have been done a long time
ago by adding an assignment operator to LIB_PART. The assignment
operator makes it possible to create a single copy of the symbol to
buffer which gets updated rather than deleting the last copy and
replacing it with a new copy.
Add a clear method to the MULTIVECTOR class so that existing LIB_PART
object draw items can be removed before assigning the draw items from
the part being assigned.
Fixes#3672https://gitlab.com/kicad/code/kicad/issues/3672
m_connected_bus_item and m_connected_bus_items pointers were not cleared when
rebuilding connection data.
So in some cases these pointers were not updated, and created a crash
once the old data was no longer available (deleted)
Create an IsContentModified() function in each frame
that provides if the content has been modified, and
use that instead of always copying the checks.
ADDED: a config option to select (when clicking on a pin) the parent symbol
or only the pin.
Previously, when cliking on a pin, the parent symbol was selected.
Allowing the pin selection is mandatory in cross probing, and to display the pin
characteristics in some cases, for instance if a pin is flagged by the ERC tooL.
Do not check the connection graph when editing the symbol library table
from KiCad because the connection graph object is no valid when the
schematic editor is not open.
Fixes kicad/code/kicad#3682
There is no need to create a new root symbol and re-parent all derived
symbols when renaming a root symbol. Just rename the buffered root
symbol.
Test for duplicate symbol names when validating the properties dialog
information to prevent broken symbol pointers.
Fix a field drawing bug when editing derived symbols.
Fix bug to insure duplicate symbol names cannot exist in a library.
Fixes kicad/code/kicad#3654
Fixes kicad/code/kicad#3672
The library manager update part function was orphaning the root symbol
of derived symbols when the root symbol was edited. Re-parent the
inherited symbols when updating a root symbol.
Update the mandatory field attributes whenever the parent is set for
derived parts. This will show the fields with the correct attributes
in the symbol editor and viewer.
Using std::unique_ptr to hold the current symbols was deleting the
pointer on symbol selection changes causing the pointer in the library
manager buffer to be stale in some cases. Revert back to using a
simple pointer and manual clean up as required.
Prevent derived symbols from being saved to a different library to
prevent orphaned symbols.
Fixes kicad/code/kicad#3649
The schematic symbol swap function still had the old pin map swapping
code which overwrote the correct pin maps that were rebuild after the
library symbol was update. Duh!
Fixes kicad/code/kicad#3661
Apparently the schematic and symbol library editors now have common
selection filtering so checking for a valid LIB_EDIT_FRAME when
filtering for the schematic editor frame prevented all schematic
object from being selected.
The symbol editor selection criteria did not include LIB_FIELD objects
which allowed the root symbol name to be changed causing broken derived
symbol links. Disable the symbols fields from being edited when a
derived part is shown in the editor to prevent this.
Add a missing warning that deleting a root symbol used to derive other
symbols would also delete all derived symbols from a library. Give the
user a chance to cancel the delete operation in this case.
Fixes kicad/code/kicad#3654
The new symbol library changes left stale pointers in the connection
graph because the SCH_COMPONENT object pins were not always getting
updated when a new copy of the library symbol was updated.
Force a full update of the connection graph whenever the schematic
library symbol links are refreshed. This seems like overkill but it
ensures that there a no stale libraries items left in the connection
graph.
Fixes kicad/code/kicad#3658
Some windows systems will not fall back correctly on our standard
initialization step, so we need the additional std:: error fall back to
catch them.
Fixes#2620 | https://gitlab.com/kicad/code/kicad/issues/2620
Use the root symbol when comparing against the cached symbol when
checking to see if a symbol changed. When the original symbol is
a derived symbol, the test will always fail.
Force a symbol link refresh on a rescue to prevent stale links from
crashing the connection graph refresh when running the project rescue
on demand.
Force a symbol link refresh on project load to prevent stale links from
symbol link changes from crashing the connection graph when the project
rescue in invoked.
Fixes kicad/code/kicad#3645
ADDED new option to set selection highlight thickness.
Also change selection shadow width constants to
make the selection thickness change less drastically
with the zoom level.
Replace some C casts with C++ dynamic_cast.
Fix iterator bug when deleting inherited symbols from legacy file format
symbol library cache.
Remove unnecessary const when return wxString object instead of reference.
Don't clobber value file when load aliases in legacy symbol library cache
parser.
Use actual symbol library LIB_PART pointer rather than a flattened copy
of the symbol. This fixed a bug when displaying the parent field in the
message panel for derived symbols.
Simplify the flatten code by copying the parent and updating the lesser
information from the inherited symbol.
This change completely removes the LIB_ALIAS design pattern an replaces
it by allowing LIB_PART objects to inherit from other LIB_PART objects.
The initial implementation only allows for single inheritance and only
supports the mandatory fields in the derived part because that is all
that the current symbol library file format will support. Once the new
file format is implemented and saving to the old file format is deprecated,
more complex inheritance will be added. The LIB_ALIAS information saved
in the document files was move into the LIB_PART object. This change
impacts virtually every part of the schematic and symbol library editor
code so this commit message is woefully incomplete.
REMOVE: Removed the symbol aliases concept from the schematic and symbol
editors and the symbol viewer.
NEW: Replace the symbol alias concept with simple inheritance that allows
a library symbol to be derived from another library symbol.
The wxArrayString doesn't have a standard assignment operator to
std::vector<wxString> so we iterate over the members.
Fixes: lp:1854562
* https://bugs.launchpad.net/kicad/+bug/1854562
The pin name defined in Eeschema is now available as pad info.
Useful for the board designer (the pin function is displayed in the message panel).
Needed for the Gerber P&P files.
It happens when the spice library model shown in dialog is a large file.
Looks like the wxTextCtrl used to displays the library content
creates the crash ( GKT bug?) for large texts.
The fix is to replace this wxTextCtrlt by a wxStyledTextCtrl.
It has advantages (does not crash... and much faster display) and
inconvenients (cannot disable editing).
Fixes: lp:1853161
https://bugs.launchpad.net/kicad/+bug/1853161
Apparently there are some issues with wxString::CmpNoCase() that was
causing the sheet file name case sensitivity test to incorrectly fail.
Converting the name strings to lower case before comparing resolved
the issue.
Add missing check for root sheet when searching sheet hierarchies for
already loaded schematics. This prevents the root sheet from being
omitted when adding new sheets using the root sheet file name.
CHANGED: Make file name tests case sensitive so that schematic sheet
file names on non-Windows systems can be uses as expected.
Warn users when attempting to use schematic file names that only vary
by case sensitivity that doing so will result in a project that is not
portable to Windows.
Fixes lp:1843415
https://bugs.launchpad.net/kicad/+bug/1843415
When dragging a bus the entry is connected to the bus so the wire
connected to the entry (if any) needs to stretch.
While an entry can connect in the middle of bus, it cannot connect
in the middle of a wire.
Fixes: lp:1849973
* https://bugs.launchpad.net/kicad/+bug/1849973
Remove not used files:
- markdown2html is not used (we are using "Sundown" tool)
- newstroke_font_without_CJK.cpp is removed.
Due to code optimization the full font works fine without memory issues
-fix also a few very minor compil warnings
CHANGED: No longer call schematics noname.sch in standalone mode,
instead don't given them any name so the user can choose on save.
Fixes: lp:1852607
* https://bugs.launchpad.net/kicad/+bug/1852607
We have different requirements than sheet paths for netlists,
so going through that code and then doing a lot of conversions
just ends up with a mess.
We now generate the path directly from the SCH_SHEET_PATH.
Fixes: lp:1852353
* https://bugs.launchpad.net/kicad/+bug/1852353
The sort routine requires the value to be true with a is strictly lower
than b. But just inverting the '<' doesn't yield strictly lower, it
includes '>='. This causes items to jump in the list.
Copy/Paste should keep the original items' designation for all units and
conversion type. If it was specified in the original copy, we should
keep the same specification when pasting (but update for the current
frame)
Handle symbols as well as strings in the "source" lists of
netlist files.
Handle Protex gerber file extensions.
Check for project_name-whatever pattern for files that we
don't recognize (such as project_name-NPTH-drl_map.ps)
NEW: The simulator plot now avoids colors already in use, if possible.
The palette is replaced with a larger one with less saturated colors.
Fixes: lp:1851372
* https://bugs.launchpad.net/kicad/+bug/1851372
NEW: A text entry allows adding signals by name. This includes vectors
not in the signal list, which is useful for plotting calculated vectors
like `let AB=V(a)*V(b)`. It's also a faster way to add a signal if you
know its name already.
Fixes: lp:1851373
* https://bugs.launchpad.net/kicad/+bug/1851373
The new connectivity algorithm had a tendency to cleanup
globally, but that could insert undo records from other sheets
into the current screen's undo stack. Needless to say, this
was a recipie for segfaults.
Fixes: lp:1846247
* https://bugs.launchpad.net/kicad/+bug/1846247
Mainly replacing std::string by wxString to manage filenames.
On Windows, a sdt::string cannot manage a filename, unless using
in many places TO_UTF8 and FROM_UTF8.
So the best way is to use a wxString for filenames and error messages.
Note that since the markup might exist for other reasons, it has
to be turned on with a preference setting. (It goes through a set
of bitflags so the same architecture can be used for other markup
structures that we might want to support in the future.)
Note also that this is more about engineering nomenclature than
visual formatting. In that respect it's more similar to overbar
than italic or bold.
When more than one item has the duplicated timestamp, the update code
doesn't accurately change the duplicates as it only checks that a single
sort has not adjacent duplicates.
This adds all items to a set, ensuring that updated timestamps are
unique to the schematic, which prevents reseting or mangling the units
for duplicated components.
Right click is a pointing operation combined with a request for the
context menu. We need to highlight the user's intended object when they
have moved their mouse to a new element instead of showing the context
menu for the selected object.
However, in cases where the selection is difficult to make, it is
sometimes helpful to select the item first, then right-click. In these
cases, we keep the selection where the mouse remains inside the selected
object's bounding box.
When placing a new component in the schematic, this allows the user to
iterate through all units in the selected component without re-opening
the choose part dialog. It also allows the optional addition of
multiple copies of the same component to be placed in the schematic.
Fixes: lp:1806217
* https://bugs.launchpad.net/kicad/+bug/1806217
Adding a field to a selection changes the bounding box and count for
rotation. This can cause odd offsets when the field is rotated against
the selection center rather than the bounding box as well as with the
component.
Fixes: lp:1849078
* https://bugs.launchpad.net/kicad/+bug/1849078
The break wire command will break all wires at a point. If there are
multiple crossing wires, we need to check to see if a junction might be
required to reflect the new connection.
Fixes: lp:1848450
* https://bugs.launchpad.net/kicad/+bug/1848450
* Fix not drawn shapes for clock low, inverted clock and broken shape for falling edge clock
* Especially, shape for falling edge clock was a not existing shape, therefore useless.
* now falling edge clock and clock low shape are similar.
Fixes: lp:1846901
https://bugs.launchpad.net/kicad/+bug/1846901
The previous converter (maddy) is still available, during some time.
We therefore have the time to choose between them.
sundown is better to convert a md text, but is written to C
maddy has a few issues to convert a md text, but is written to C++
Both have no dependency.
When checking for 3 or more connections, at least one of them must be
a pin. Otherwise we need to fall down to the next check which also
ensures that at least one of them is not parallel.
Fixes: lp:1841458
* https://bugs.launchpad.net/kicad/+bug/1841458
The spin style is stored as a numeric and can be corrupted. We handle
this by triggering assertions for debugging the bad value while
resetting to default if we have non-valid spin values that are outside
the array.
Fixes: lp:1843091
* https://bugs.launchpad.net/kicad/+bug/1843091
This makes the pcbnew multiline text editor natively accept tabs in the
same manner as eeschema and extracts key handling routines to the shim
to allow undo/redo.
Also allows Ctrl-Y under Linux in addition to other platforms. While
not as popular as Ctrl-Shift-Z, it is utilized for Redo in some contexts
When we add enough SHEET_PINs that the vector has to grow, it
re-allocates the vector causing our for-loop to get its knickers
tied in a knot.
Fixes: lp:1842394
* https://bugs.launchpad.net/kicad/+bug/1842394
1) When sheet pins are on 3 or more sides there's no point in switching
the orientation to vertical.
2) Careful that we don't cause the sheet to walk when rotating and the
sheet-name or file-name is longer than the side it's on.
Fixes: lp:1841714
* https://bugs.launchpad.net/kicad/+bug/1841714
Also, if it can't be loaded then at least initialize it so that we
don't crash later (trying to access a NULL screen).
Fixes: lp:1841801
* https://bugs.launchpad.net/kicad/+bug/1841801
Saving individual parts of a schematic can break the schematic. This
moves the schematic save option to save all sheets rather than just the
current sheet.
Fixes: lp:1840383
* https://bugs.launchpad.net/kicad/+bug/1840383
The highlight color chosen from the system highlight doesn't always show
against the schematic sheet background color. Allowing the user to
customize with their KiCad theme makes it configurable on par with other
colors. This is stop-gap until we get full color schemes from
lp:1678345
When editing symbol library reference, this ensures that all units are
modified by the same action and the component is not represented by its
subunits.
Fixes: lp:1834509
* https://bugs.launchpad.net/kicad/+bug/1834509
(cherry picked from commit 80e0d848f2)
They're now used for bus definition control characters.
Also fixes the sheet pin edit dialog to correctly escape/unescape
netnames.
Fixes: lp:1840834
* https://bugs.launchpad.net/kicad/+bug/1840834
While it's tempting to look at the changed flag that TestDanglingEnds
returns, it's insuficient as the connectivity algorithm might have
already updated it (and ignored the changed flag).
Fixes: lp:1835107
* https://bugs.launchpad.net/kicad/+bug/1835107
Items that have BG fill need to be plotted in the background but we
still need their stroked edges to be in the FG. This is a workaround
that overplots the edges ensuring visual similarity. Re-working the
plot engine to support layers is a larger project.
Fixes: lp:1833428
* https://bugs.launchpad.net/kicad/+bug/1833428
(cherry picked from commit 6796e8fff6)
Control ordering is critical to make dialog mnemonics work correct. The
static text with the mnemonic must immediately proceed the control and
no additional controls can be added between static text/control pair.
Fixing this required adding the units static text controls after all of
the mnemonic static text controls and their associated edit controls.
Mnemonics do not work for read only controls so all of the combobox
controls were moved after the text controls.
Fixes lp:1818930
https://bugs.launchpad.net/kicad/+bug/1818930