1) don't ASSERT; use exceptions (which can be caught) instead.
2) clean up LIB_LOGGER so it's only used during sync
3) fix typos in wxLogMessage() calls so they produce output.
4) throw on unrecognized token in loadContent().
5) if clipboard can't be pasted as content then paste as text.
Fixes: lp:1840172
* https://bugs.launchpad.net/kicad/+bug/1840172
The full filename comparison to detect the reuse of a file was broken on Windows
because it mixed a native filename notation (containing the drive id),
and a unix notation (no drive in filename, different separator).
This allows a const BITMAP_BASE to expose const image
data. This is currently done with const_casts, which is
"OK", only as long as the source image is not declared
const, in which case it's undefined behaviour.
Also immediately dereference the pointer to a reference
if it's not checked to make the non-null requirements
explicit at the point of access.
Apparently at some point in KiCad's development, a '~' character was
prefixed to the symbol name to indicate that it was not visible. The
visibility state is now saved in the name field so remove the prefix.
The parser was kept unchanged.
Fixes lp:1632048
https://bugs.launchpad.net/kicad/+bug/1632048
Bus upgrades: core new connectivity code
Bus upgrades: eeschema integration and modifications
Bus upgrades: eeschema dialogs
Bus upgrades: netlist export
Bus upgrades: file format changes
Prevent obvious scale issues (0.0, nan, etc) from corrupting display of
schematic images. In these cases, we reset the scale value to 1.0 and
allow the user to input the appropriate value when editing the
schematic.
Fixes: lp:1811066
* https://bugs.launchpad.net/kicad/+bug/1811066
Schematic symbol library link names are unquoted strings that can
contain non-ascii characters which breaks the parser. Converting
the line to uft-8 before breaking the string into tokens resolves
the issue.
Pin names are unquoted strings that can contain non-ascii characters
which breaks the parser. Converting the line to uft-8 before breaking
the string into tokens resolves the issue.
Iterating over unquoted strings as ASCII8 fails when ' ' character is
not the LSB of a UTF8 string with wide characters. Change parsing method
for unquoted strings to convert the entire line as UTF8 and then use
wxStringTokenizer to break the line into tokens at the ' ' characters.
Fixes lp:1806206
https://bugs.launchpad.net/kicad/+bug/1806206
The '/' and ':' are reserved and cannot be used in symbol or footprint
names. They will cause the LIB_ID parser and formatter to fail. While
it seems like they should be legal in symbol alias names, they will
trigger a symbol rescue the next time the schematic is loaded.
Use ID_SCH as in the Eagle schematic plugin rather than ID_ALIAS to
ensure symbol names do not need rescued the next time the schematic is
opened.
Remove ID_ALIAS since the rules for alias names are the same as the
rules for symbol names. Otherwise, allowing '/' and ':' in alias names
will force a symbol rescue on the next schematic load.
Fixes lp:1795600
https://bugs.launchpad.net/kicad/+bug/1795600
The parser also now skip empty lines.
This bug created unreadable saved .dcm files and .sch files after adding a new symbol.
Fixes: lp:1786141
https://bugs.launchpad.net/kicad/+bug/1786141
The issue is in:
wxPoint( parseInt( aReader, line, &line ), parseInt( aReader, line, &line ) )
that calls parseInt() twice, but parseInt changes parameters at each call.
(Does not return the same value at each call).
However, due to some side effect or compil optimization, the value returned is incorrect.
It can be dependent of the compiler, and optimization level.
This kind of code must be avoided.
This removes the existing constructors so that all parsing must
be explicit and callers are made aware that they need to think
about illegal characters, malformed ids, etc.
Fixes: lp:1783474
* https://bugs.launchpad.net/kicad/+bug/1783474
When parsing component names, we need to account for the possibility of
illegal characters (e.g. "/", ":") in the names from v4 libraries. They
are fixed internally by the cache parser but if we don't fix them
in the rescue routine, the symbol won't match it's cache name.
This standardizes all schematic illegal character routines into LIB_ID
Fixes: lp:1774774
* https://bugs.launchpad.net/kicad/+bug/1774774
It was always replaced with space in a graphic text, but it should happens
only in non quoted texts
Now graphic texts containing ' ' or '~' or '"' are always quoted
(work fine with 4.0 version)
Fixes: lp:1771105
https://bugs.launchpad.net/kicad/+bug/1771105
Path keeping stack copes well with paths pointing outside the project
directory (e.g. "../path"). The so far used wxFileName::GetDirCount() and
wxFileName::RemoveLastDir() remove too many directories, as ".." is also
counted as a directory.
Fixes: lp:1769746
* https://bugs.launchpad.net/kicad/+bug/1769746
When a relative sheet path was not in the project path or a subfolder
within the project path, the schematic path would be empty. Set the
base path to the project path when the schematic path is no within
the project path hierarchy.
Sheet file name paths were not being saved and restored properly under
certain conditions when walking the sheet hierarchy causing schematic
load errors.
Changed debugging output to use wxLogTrace left over from last fix.
Fixes lp:1748401
https://bugs.launchpad.net/kicad/+bug/1748401
1) don't call UI-level LIB_PIN routines when reading library --
not only are they a performance hit, they set the modified flag
too
2) limit progress dialog updating to 15 times a second (this
had crept back up to 31% of the time spent loading libraries)
Fixes: lp:1734773
* https://bugs.launchpad.net/kicad/+bug/1734773
Don't use wxFileName == operator when comparing cache file name. There
is a lot of overhead the wxFileName == operator that is not necessary
so just do a comparison with the original string used to create the
cache.
This commit is a partial revert of aa81f5b9 & 445ac505. LIB_ID should
not be modified when a library is assigned to its part, as the library
nickname cannot be evaluated during the assignment and might be
different than its filename.
With the implementation of the legacy schematic plugin, any I/O error
when parsing the schematics would prevent the entire schematic from
being loaded. This change restores (somewhat) the previous behavior
where as long as the root schematic is loaded properly, then all of
the remaining sub-sheet will attempt to load.
Add GetError() method the SCH_PLUGIN object to allow for partial
schematic loading.
Check the error message contents when no exception was caught to warn
the user of any accumulated errors.
Fixes lp:1690644
https://bugs.launchpad.net/kicad/+bug/1690644
This is the last of the object save/load code that was not moved into
the SCH_LEGACY_PLUGIN object. All schematic and library I/O is now
performed in the SCH_LEGACY_PLUGIN object and as been removed from the
schematic and library objects.
The old single symbol file format has been replaced with the normal
symbol library file format since there was no difference between them
except the SYMBOL token. The SYMBOL token was no longer being read
since the introduction of the SCH_LEGACY_PLUGIN symbol library loader.
Update the Doxygen comments in all of the modified files.
Change the legacy schematic plugin to preserve illegal LIB_ID characters
when load schematics prior to version 4.
Check for illegal LIB_ID symbol names during project rescue. Rename and
rescue any symbols with illegal LIB_ID names.
Add static methods to LIB_ID object for testing for and fixing names
with illegal characters so there is uniform code for doing so.
Update the Eagle plugin symbol loader to fix symbol names using the new
LIB_ID fix illegal names method.
Fixes lp:1732236
https://bugs.launchpad.net/kicad/+bug/1732236
LIB_PART name is stored in three places that might be changed
independently:
- the first LIB_ALIAS in m_aliases
- LIB_FIELD with VALUE ID
- m_name wxString field
This is potentially leads to an incoherent LIB_PART state. To prevent
this, all fields are changed using only one method: LIB_PART::SetName().
LIB_PART::m_name has been removed as the same information is available
in two other variables.
Refactor rescue objects so that they can support derivation.
Factor out legacy rescuer code to perform legacy project rescues.
Create new symbol library table rescuer for rescuing symbol library table
based projects.
Perform the correct rescue type on project load.
Add symbol library table remapping support to the tools menu for run on
demand as applicable.
Add flag to SCH_SCREENS::UpdateSymbolLinks() to allow forcing the symbol
link updates when the library modification hash has not changed.
Simplify some of the library editing code. There have been a few minor
changes in the behavior of the editor. If the current symbol is deleted
from the library, the next symbol in the library is not loaded. The
deleted symbol is cleared and the current symbol is empty.
Change component to symbol to align with the preferred terminology
discussed on the developer's mailing list.
Add separate update UI event for save library as to enable the menu entry
whenever a library is selected.
Change the select symbol list dialog to a single column using the LIB_ID
format LIB_NICKNAME:LIB_ITEM_NAME so that the selection can be parsed by
LIB_ID.
Add method to expand URI to LIB_TABLE_BASE.
Override wxApp::OnExceptionInMainLoop() in debug builds to make debugging
easier when an unhandled exception occurs in a wxUpdateUIEvent handler.
Change SCH_SCREENS::HasNoFullyDefinedLibIds() to return false when the
schematic has no symbols to prevent the remapping dialog from being run.
Use SCH_COMPONENT part reference when creating netlist rather than looking
up the library symbol.
Remove all instances of PART_LIBS and replace them with SYMBOL_LIB_TABLE
except for the CMP_TREE_MODEL_ADAPTER which requires updating as well.
Return the selected symbol using the LIB_NICKNAME:SYMBOL_NAME format when
viewer is launched as modal.
Add code to SYMBOL_LIB_TABLE object to allow enumerating symbol library
power symbols only.
Add a non-const version of LIB_TABLE::findRow().
Remove redundant information from Doxygen comments.
Check the if the schematic being loaded has been remapped (no symbol
library table nicknames defined) and remap accordingly.
Fix issues when resolving the library symbol links in the schematic
symbols.
Add cache library fallback when resolving symbols that cannot be
remapped.
Add remap complete message to remap dialog.
Add HasLibrary() helper to LIB_TABLE_BASE.
Fix issues when loading library symbols using symbol library table.
Add hashing function to symbol library table.
Improve the symbol panel message to warn user when cache library is
used to resolve symbol.
Make all trace environment variable strings upper case and prefix with
KICAD_TRACE_ for consistency.
Add Doxygen group for the trace environment variable strings.
- pad names are stored as wxString instead of a char[4] & integer union
- removed pad name to string conversion functions
- fixed pad & pin properties dialog restrictions regarding the name
length
This commit was too broad and not cognizant of the purpose of the class
UTF8.
Add MAYBE_VERIFY_UTF8() macro, which can trap non-UTF8 encoded strings in
debug builds.
Use that macro conditionally in class UTF8 to trap non-UTF8 encoded strings
being put into UTF8 instances.
Fix if statement logic to ensure the unit number is never set to zero.
Add logic to the legacy schematic plugin to automatically convert any
schematic files that have components with a unit setting of zero. Set
the schematic modified flag so that the user will be notified of a
changed schematic.
Add a user warning when the schematic parser fixes the bug and sets
the file modified flag.
Fixes lp:1677282
https://bugs.launchpad.net/kicad/+bug/1677282
PROPERTIES object has been recreated every time it was needed, using
two fields in PART_LIB class. Now the buffering & caching settings are
stored directly in a PROPERTIES object.
(now "F1" is forced to name given by "DEF", like in stable version)
Fix also an incorrect parsing of .dcm file, if a component was not found in corresponding symbol lib.
(Can happen for not updated .dcm files)
A conversion from wxString using FROM_UTF8() was inadvertently used when
loading and enumerating symbols from the legacy plugin. This conversion
would break any non-ascii characters in the symbol name.
Fixes lp:1664642
https://bugs.launchpad.net/kicad/+bug/1664642
Check to see if the root symbol alias already exists before adding it to
the symbol library alias list in the legacy schematic I/O plugin. There
currently about six different ways that the root alias can be changed in
the root symbol which causes issues. This really needs to be cleaned up.
Use buffering when updating a symbol in a library to prevent the library
file from being written before it is backed up.
Update the alias and unit selection menubar drop down lists.
Delete the output formatter so the file is closed so that reading the
file time stamp can be performed to prevent unnecessary cache reloads.
Fixes lp:1664834
https://bugs.launchpad.net/kicad/+bug/1664834
Apparently symbol definition blocks can have a '0' character in the lock
position which is typically defined as 'L' or 'F'. This must have been
a oversight at some point since both versions of the DEF parameters
exist in library version 2.3 files.
Disable the symbol library cache buffering after saving.
Check for existence of cache library when before attempting to rebuild
the cache. Create a new cache library object if no cache library was
loaded.
Add missing buffering and cache properties to LIB_PART::FindAlias() to
prevent the plugin from reloading the cache library that may not exist.
Add method to find library by full path and file name.
Revert the check for a symbol in the cache library remove from last
patch.
Add checks for plugin cache file name validity and existence of a the
file before attempting to verify the file modification time to prevent
wxWidgets from raising an assertion in debug builds.
Clear modified flag when saving buffered and/or cached library.
Add the ability to save empty symbol library file for caching and empty
schematic.
Remove check for existing symbol in cache populating routine. Just perform
a complete rebuild of the cache library and overwrite the existing one.
Fixes lp:1663871
https://bugs.launchpad.net/kicad/+bug/1663871
Move adding LIB_PART to library until the part is fully parse. The problem
was unique_ptr was cleaning up the part when an exception was thrown during
parsing causing a double free when the cache was deleted.
Add missing try/catch block when loading the cache library during an append
schematic operation.
Fixes lp:1663869
https://bugs.launchpad.net/kicad/+bug/1663869
LIB_ID was changing the symbol name due to the parser dropping everything
past the first '/' character which is interpreted by LIB_ID as the item
version. Add flag to ignore this in LIB_ID::SetLibItemName() and add a
new ctor so the library nickname, item name, and revision can be set as
required to prevent the standard LIB_ID parsing.
Fix a few places where PART_LIBS functions FindLibraryAlias() and
FindLibPar() were translating wxString symbol names to LIB_IDs where the
LIB_ID parser was truncating the symbol name.
Use LIB_ID instead of wxString for storing the library symbol information
in the schematic symbol in preparation for the upcoming symbol library table
implementation.
Change the FindLibAlias and FindLibPart functions in the PART_LIBS object
instead of wxString. Please note that only the library ID name is used to
search the list of libraries. The library nickname is ignored. Once the
symbol library table is implemented and full LIB_IDs are defined, the
library search code will no longer be used and will only be kept to load
older schematics that have not been converted.
Move SCH_LEGACY_PLUGIN_CACHE definition so that the legacy plugin knows
how to properly delete the cache object.