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.
There are a whole bunch of cases which all have to work:
regular move
move followed by drag
drag followed by move
move followed by duplicate
duplicate
paste
and all both with and without Warp Mouse on Move checked.
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
No dangling symbol for text items with a NO-CONNECT.
DanglingStateChanged doesn't work with dangling flag aggregators
(which return true if any child is dangling).
Then again, we don't actually use any of the aggregators anyway
so I removed them.
Fixes: lp:1799589
* https://bugs.launchpad.net/kicad/+bug/1799589
Previously, when creating a new instance of a sheet, the full set of references
was cleared.
Moreover, if this sheet has sub-sheets, the annotation was incorrectly handled
Now only (and all) new sheet path(s) created have a reference cleared, as expected.
(new sheet paths can be more than one, if the new instance of the sheet has sub-sheets)
Fixes: lp:1789048
https://bugs.launchpad.net/kicad/+bug/1789048
... and GetMsgPanelInfo.
Step 4 in the g_UserUnit eradication effort.
Also removes a couple of conversion routines that were close
enough to extinction.
(cherry picked from commit c75da51)
1) Commit in-progress edits before closing preferences.
2) Handle default fields in Symbol Fields Editor.
3) Save state of checkboxes in Symbol Fields Editor.
Nets assigned by power pins are weak, meaning they are valid
as long as there is nothing else attached to such pins. This patch
checks whether there are other wires or pins attached to a power pin
before placing a global net label.
Fixes: lp:1755191
* https://bugs.launchpad.net/kicad/+bug/1755191
This adjusts the selection addition criteria for
blocks to allow items such as labels to connect to
lines not at the endpoints. It also uses the same
logic to correctly gather bus-wire, bus-bus entries.
Fixes: lp:1738941
* https://bugs.launchpad.net/kicad/+bug/1738941
Pins are weak_ptrs to the library, so they require a lock() before
accessing. This imposes a performance hit on fast loops that access
the pin list repeatedly. This patch caches the pin position locally
for each component, updating only when needed.
Fixes: lp:1737363
* https://bugs.launchpad.net/kicad/+bug/1737363
All of the schematic object load and save code is implemented in the
legacy schematic plugin so it is no longer required.
Remove unused file with old schematic file loader.
Doxygen comment cleaning.
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.
Add Resolve() and ResolveAll() methods the SCH_COMPONENT object to use the
symbol library table to obtain links to the library symbols.
Add LoadAlias() method to SYMBOL_LIB_TABLE to find an alias by it's LIB_ID.
Clean up Doxygen comments to match coding policy changes.
- Allows grouping of matched components
- Bulk edit of components in a spreadsheet window
- User can choose to save / undo changes
- All changes are pushed to the undo stack in a single operation
- Export table to HTML / CSV output
Create dialog and code to allow legacy schematic symbols to be remapped
from the old library path look up method to the new symbol library table
method by using the following steps:
1) Create a project symbol library table containing all of the symbol
libraries defined in the old library look up list not found in the
global symbol library table.
2) Map each symbol to the correct symbol in the symbol library table
if possible.
Recreate library link to symbols so look up method can be converted to
symbol library table properly.
Add function to SCH_COMPONENT to link library symbols using the symbol
library table.
For some reason, rather than using the LIB_PART object reference by an
SCH_COMPONENT to check if a pin was at a given position in the schematic,
a LIB_PART search was performed for every component in a schematic. This
made absolutely no sense and was changed to use the LIB_PART referenced
by the SCH_COMPONENT object. This should significantly speed up any
operations that call SCH_SCREEN functions, IsTerminalPoint(),
MarkConnections(), and IsJunctionNeeded().
Add function to SCH_COMPONENT to access PART_REF object.
eeschema now supports arbitrary colors for all object types, and
pcbnew does in GAL canvas. When switching from GAL to legacy canvas,
pcbnew will convert colors to the nearest legacy color.
bitmaps.h was included in nearly every file in the project due to it
being included by base_struct.h
Only about 130 files actually use the XPM definitions defined there, and
many of those already included bitmaps.h themselves, or via
menu_helpers.h. However, touching bitmaps.h would result in over 400
rebuilt files for pcbnew alone.
This commit moves the bitmap-related types like BITMAT_DEF out to a new
header, which is still included by base_struct.h, which is less
avoidable for now, it's it's used in the interface.
The icon list is still in bitmaps.h. This has the side effect that's
it's now easier to automatically generate this file.
Many classes in pcbnew and eeschema needed some functions moved
to the implementaitons from the headers too.
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.
* Add SCH_PLUGIN::Save() for current file format and code for saving all
SCH_XXX objects.
* Add function to SCH_FIELD to get the position of the field in the component
not the position added to the component position which is what GetPosition()
does. This was required because saving the component field expects position
of the field sans the position of the component.
* Remove public members from BITMAP_BASE object and fix all associated
code.
* Fix the never ending coding policy violations found making these changes.
* Factor out PROPERTIES object from the PCB plugin code and move it into
common so it can be used by both the Pcbnew and Eeschema plugins.
* Add schematic I/O plugin manager for loading and saving schematic and
component library files.
* Add initial attempt at a parser for current schematic file format. This
parser will be infinitely more strict than the current parser which is very
forgiving in what it parses.
* Make minor changes to the base bitmap class to support the new parser.
* Add find root sheet support to sheet object to allow fetching the root
sheet from any sheet in the stack.
* Add sheet number that is set by schematic file load order. This duplicates
the previous SCH_SHEET_PATH behavior.
* Uncouple SCH_REFERENCE and SCH_REFERENCE_LIST from SCH_SHEET_PATH.
* Add - operator to SCH_SHEET for comparison purposes. This duplicates the
behavior of SCH_SHEET_PATH::Cmp().
* Uncouple SCH_COMPONENT::GetRef() from SCH_SHEET_PATH and use SCH_SHEET
instead.
* Uncouple SCH_COMPONENT::GetUnitSelection() from SCH_SHEET_PATH and use
SCH_SHEET instead.
* Fix all calls to GetRef() and GetUnitSelection() to pass a pointer to the
appropriate SCH_SHEET object instead of an SCH_SHEET_PATH object.
* Add code to SCH_SHEET object to clear annotation.
* Change SCH_COMPONENT::GetPath() to derive path from SCH_SHEET object instead
of SCH_SHEET_PATH object.
* Remove clear annotation code from SCH_SCREENS object.
* When multiple pins are in the same position and one is not connected,
show connection indicator correctly.
* LIB_PIN::IsVisible should be a const method so it can be called on
DANGLING_END_ITEM children without having to discard const.
* Test the (!IsVisible() && GetType() == PIN_POWER_IN) condition in a method
LIB_PIN::IsPowerConnection to avoid duplicating that condition if the test
needs to be performed in more than one place. (e.g. dunderheads like myself
might forget about the necessary GetType() == PIN_POWER_IN and just check
visibility.)
* Coding style fix: break a couple lines that were above the 99-column maximum.
* Add and/or improve Doxygen comments on SCH_COMPONENT::IsPinDanglingStateChanged
and SCH_COMPONENT::IsDanglingStateChanged.
Move items rework: enhancements: for some items (sheets, components, bus entries) the mouse cursor is no more wrapped to the anchor. For large symbols, this is better: they are more easy to place.
There is also a change when starting a move item command: the full screen is redraw, and therefore there is no artifact due to the XOR draw mode.
Some other minor coverity fixes (uninitialized members).
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
Pcbnew: Code cleaning and bug fix in autoplace functions
Dialog exchange footprints has now a separate button to update the .cmp file, only on request.
Fix an annoying issue about not named nets:
now, these nets are named from the component references and pin names which are connected.
therefore, unless the net or the footprint references are modified, the net name is not modified between 2 netlist calculations.
sometimes, the modified flag was set for these components just when switching from a sheet to an other sheet.
Pcbnew: fix Bug #1197414 (dragged track segments does not show clearance area)
* Improve MSG_PANEL_ITEM to handle message panel information.
* Create containers for passing message panel items between objects and
the message panel.
* Rename EDA_ITEM::DisplayInfo to EDA_ITEM::GetMsgPanelInfo.
* Remove all direct manipulation of EDA_DRAW_FRAME from all objects derived
from EDA_ITEM.
* BLOCK_SELECTOR class is not longer derived from EDA_ITEM.
* Encapsulate BLOCK_SELECTOR class member variables and add access methods.
* Move HandleBlockBegin() function from block_commande.cpp to drawframe.cpp.
* Remove virtual methods from top level derived objects per future
coding policy change.
* Remove Doxygen copydoc statement from objects derived from EDA_ITEM
since the comments are automatically copied to the derived object.
* Removed copy and pasted Doxygen comments from objects derived from
EDA_ITEM.
* All objects derived from EDA_ITEM now have consistent hit test method
definitions.
* Remove double function calls from all classes derived from SCH_ITEM.
* Lots of Doxygen comment fixes.
* Convert Eeschema from manually linked list to DLIST for storing
SCH_ITEM objects.
* Add helper functions to SCH_SCREEN for appending list of SCH_ITEM
objects.
* Fix bug in wire editing code for accurate undo/redo behavior.
* Add member to DLIST to append another DLIST.
* Other minor code cleaning.
* Remove unnecessary copy constructors from schematic and component
library objects.
* Add comment to class definitions where the default copy constructor
generated by the compiler was adequate.
* Add assignment operator to EDA_ITEM, SCH_ITEM, and all schematic
objects where the default assignment operator generated by the
compiler would not be adequate.
* Enable replace toolbar button and menu entry.
* Improve find replace logging granularity.
* Fix find and replace dialog control hiding and disabling.
* Minor improvements to the SCH_FIND_REPLACE_DATA object.
* Move find collector list iterator into the collector object.
* Add visibility override flag to EDA_ITEM to temporarily show items that
are hidden during find and replace.
* Replace Eeschema find code with a collector based implementation.
* Fixed a search bug when all subsequent searches of an item would ignore
the remaining valid child items when an item had more than one child
item that matched the search criteria.
* Add SCH_FIND_COLLECTOR class to find all items that meet the specified
search criteria.
* Add SCH_FIND_COLLECT0R_DATA to keep track of information for all matching
items.
* Use collector to iterate over the list of items that match the search
criteria rather than trying to start at the last matched item.
* Remove unused searching methods from sheet path and sheet path list
objects.
* Add replace and replace all functionality to Eeschema find dialog.
* Push matching methods down to EDA_ITEM class so they can be used by
other derived objects.
* Add method to EDA_ITEM to test if item supports replacing.
* Add flag to find/replace data to support replace feature.
* Disable wild card matching check box when dialog is in replace mode as
wild card replacement is not supported at this time.
* The usual Doxygen comment and coding policy fixes.
* Fix a set position method bug in schematic item that caused the fields
to drawn in the wrong position.
* Group zoom hot keys to use the same command event in schematic and
library editor frames.
* Add get and set position methods to all schematic items.
* Encapsulate schematic item position members.
* Add swap data method to schematic items that lacked one.
* Remove global swap data function used by undo and redo functions.
* Unify as many schematic move methods as possible.
* Remove unnecessary place schematic item methods.
* All schematic items are now moved in the same event handler.
* Fixed bug in hierarchical sheet get menu item string method.
* Make no connect and junction items movable, fixes lp:804048
* Add net list object creation functions to schematic component object.
* Remove external variables used by the verify bus label and parse bus
label functions.
* Remove redundant net list object include sheet path member assignment.
* Add license statements to all modified files that required one.