|
KiCad PCB EDA Suite
|
The interface used by the classes that actually can load IO plugins for the different parts of KiCad and return concrete types (symbols, footprints, etc) More...
#include <library_manager.h>
Public Member Functions | |
| LIBRARY_MANAGER_ADAPTER (LIBRARY_MANAGER &aManager) | |
| Constructs a type-specific adapter into the library manager. | |
| virtual | ~LIBRARY_MANAGER_ADAPTER () |
| LIBRARY_MANAGER & | Manager () const |
| virtual LIBRARY_TABLE_TYPE | Type () const =0 |
| The type of library table this adapter works with. | |
| LIBRARY_TABLE * | GlobalTable () const |
| Retrieves the global library table for this adapter type. | |
| std::optional< LIBRARY_TABLE * > | ProjectTable () const |
| Retrieves the project library table for this adapter type, or nullopt if one doesn't exist. | |
| std::optional< wxString > | FindLibraryByURI (const wxString &aURI) const |
| std::vector< wxString > | GetLibraryNames () const |
| Returns a list of library nicknames that are available (skips any that failed to load) | |
| bool | HasLibrary (const wxString &aNickname, bool aCheckEnabled=false) const |
| Test for the existence of aNickname in the library tables. | |
| bool | DeleteLibrary (const wxString &aNickname) |
| Deletes the given library from disk if it exists; returns true if deleted. | |
| std::optional< wxString > | GetLibraryDescription (const wxString &aNickname) const |
| std::vector< LIBRARY_TABLE_ROW * > | Rows (LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH, bool aIncludeInvalid=false) const |
| Like LIBRARY_MANAGER::Rows but filtered to the LIBRARY_TABLE_TYPE of this adapter. | |
| std::optional< LIBRARY_TABLE_ROW * > | GetRow (const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const |
| Like LIBRARY_MANAGER::GetRow but filtered to the LIBRARY_TABLE_TYPE of this adapter. | |
| std::optional< LIBRARY_TABLE_ROW * > | FindRowByURI (const wxString &aUri, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const |
| Like LIBRARY_MANAGER::FindRowByURI but filtered to the LIBRARY_TABLE_TYPE of this adapter. | |
| virtual void | ProjectChanged () |
| Notify the adapter that the active project has changed. | |
| void | GlobalTablesChanged (std::initializer_list< LIBRARY_TABLE_TYPE > aChangedTables={}) |
| Notify the adapter that the global library tables have changed. | |
| void | ProjectTablesChanged (std::initializer_list< LIBRARY_TABLE_TYPE > aChangedTables={}) |
| Notify the adapter that the project library tables are about to be rebuilt. | |
| void | ProjectTablesReloaded (std::initializer_list< LIBRARY_TABLE_TYPE > aChangedTables={}) |
| Complements ProjectTablesChanged by erasing project-scope cache entries whose nicknames no longer appear in the rebuilt project table. | |
| void | CheckTableRow (LIBRARY_TABLE_ROW &aRow) |
| void | AsyncLoad () |
| Loads all available libraries for this adapter type in the background. | |
| virtual std::optional< LIB_STATUS > | LoadOne (LIB_DATA *aLib)=0 |
| std::optional< float > | AsyncLoadProgress () const |
| Returns async load progress between 0.0 and 1.0, or nullopt if load is not in progress. | |
| void | BlockUntilLoaded () |
| void | AbortAsyncLoad () |
| Aborts any async load in progress; blocks until fully done aborting. | |
| bool | IsLibraryLoaded (const wxString &aNickname) |
| std::optional< LIB_STATUS > | GetLibraryStatus (const wxString &aNickname) const |
| Returns the status of a loaded library, or nullopt if the library hasn't been loaded (yet) | |
| std::vector< std::pair< wxString, LIB_STATUS > > | GetLibraryStatuses () const |
| Returns a list of all library nicknames and their status (even if they failed to load) | |
| wxString | GetLibraryLoadErrors () const |
| Returns all library load errors as newline-separated strings for display. | |
| void | ReloadLibraryEntry (const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) |
| std::optional< LIB_STATUS > | LoadLibraryEntry (const wxString &aNickname) |
| Synchronously loads the named library to LOADED state. | |
| virtual bool | IsWritable (const wxString &aNickname) const |
| Return true if the given nickname exists and is not a read-only library. | |
| bool | CreateLibrary (const wxString &aNickname) |
| Creates the library (i.e. saves to disk) for the given row if it exists. | |
| virtual bool | SupportsConfigurationDialog (const wxString &aNickname) const |
| virtual void | ShowConfigurationDialog (const wxString &aNickname, wxWindow *aParent) const |
| virtual std::optional< LIBRARY_ERROR > | LibraryError (const wxString &aNickname) const |
Protected Member Functions | |
| virtual std::map< wxString, LIB_DATA > & | globalLibs ()=0 |
| virtual std::map< wxString, LIB_DATA > & | globalLibs () const =0 |
| virtual std::shared_mutex & | globalLibsMutex ()=0 |
| virtual std::shared_mutex & | globalLibsMutex () const =0 |
| virtual void | enumerateLibrary (LIB_DATA *aLib, const wxString &aUri)=0 |
| Override in derived class to perform library-specific enumeration. | |
| std::optional< const LIB_DATA * > | fetchIfLoaded (const wxString &aNickname) const |
| std::optional< LIB_DATA * > | fetchIfLoaded (const wxString &aNickname) |
| LIBRARY_RESULT< LIB_DATA * > | loadIfNeeded (const wxString &aNickname) |
| Fetches a loaded library, triggering a load of that library if it isn't loaded yet. | |
| LIBRARY_RESULT< LIB_DATA * > | loadFromScope (const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope, std::map< wxString, LIB_DATA > &aTarget, std::shared_mutex &aMutex) |
| void | evictOwnedGlobalEntries () |
| Erases this adapter's own entries (LIB_DATA::global_owner == this) from the process-wide globalLibs() cache. | |
| void | abortLoad () |
| Aborts any async load in progress; blocks until fully done aborting. | |
| void | resetProjectCache () |
| Aborts pending loads and resets every project-scope cache entry in place (plugin and row cleared, status returned to INVALID) while preserving the nickname keys. | |
| virtual LIBRARY_RESULT< IO_BASE * > | createPlugin (const LIBRARY_TABLE_ROW *row)=0 |
| Creates a concrete plugin for the given row. | |
| virtual IO_BASE * | plugin (const LIB_DATA *aRow)=0 |
Static Protected Member Functions | |
| static wxString | getUri (const LIBRARY_TABLE_ROW *aRow) |
| static std::mutex & | pluginMutex (const wxString &aNickname) |
| Serializes access to a library's shared plugin instance so its single mutable cache is not raced by concurrent enumerate/load/save/delete calls from the loader pool, preview panels and tree refreshes. | |
Protected Attributes | |
| LIBRARY_MANAGER & | m_manager |
| std::map< wxString, LIB_DATA > | m_libraries |
| std::shared_mutex | m_librariesMutex |
| std::atomic_bool | m_abort |
| std::vector< std::future< void > > | m_futures |
| std::atomic< size_t > | m_loadCount { 0 } |
| std::atomic< size_t > | m_loadTotal { 0 } |
| std::mutex | m_loadMutex |
The interface used by the classes that actually can load IO plugins for the different parts of KiCad and return concrete types (symbols, footprints, etc)
Definition at line 77 of file library_manager.h.
| LIBRARY_MANAGER_ADAPTER::LIBRARY_MANAGER_ADAPTER | ( | LIBRARY_MANAGER & | aManager | ) |
Constructs a type-specific adapter into the library manager.
The code for these generally resides in app-specific libraries (eeschema/pcbnew for example) rather than being in kicommon.
| aManager | should usually be Pgm().GetLibraryManager() except in QA tests |
Definition at line 1089 of file library_manager.cpp.
References m_manager.
Referenced by DESIGN_BLOCK_LIBRARY_ADAPTER::DESIGN_BLOCK_LIBRARY_ADAPTER(), FOOTPRINT_LIBRARY_ADAPTER::FOOTPRINT_LIBRARY_ADAPTER(), and SYMBOL_LIBRARY_ADAPTER::SYMBOL_LIBRARY_ADAPTER().
|
virtual |
Definition at line 1095 of file library_manager.cpp.
| void LIBRARY_MANAGER_ADAPTER::AbortAsyncLoad | ( | ) |
Aborts any async load in progress; blocks until fully done aborting.
This is the public interface to allow LIBRARY_MANAGER to abort loads before project changes.
Definition at line 1129 of file library_manager.cpp.
References abortLoad().
Referenced by LoadOne(), PGM_BASE::PreloadDesignBlockLibraries(), PCB::IFACE::PreloadLibraries(), and SCH::IFACE::PreloadLibraries().
|
protected |
Aborts any async load in progress; blocks until fully done aborting.
Definition at line 1396 of file library_manager.cpp.
References BlockUntilLoaded(), m_abort, m_futures, m_loadCount, m_loadMutex, m_loadTotal, and traceLibraries.
Referenced by AbortAsyncLoad(), CheckTableRow(), enumerateLibrary(), evictOwnedGlobalEntries(), GlobalTablesChanged(), ReloadLibraryEntry(), and resetProjectCache().
| void LIBRARY_MANAGER_ADAPTER::AsyncLoad | ( | ) |
Loads all available libraries for this adapter type in the background.
Definition at line 1806 of file library_manager.cpp.
References GetKiCadThreadPool(), getUri(), globalLibs(), globalLibsMutex(), LOADED, LOADING, m_futures, m_libraries, m_librariesMutex, m_loadCount, m_loadMutex, m_loadTotal, m_manager, tp, traceLibraries, and Type().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), filterFootprints(), PCB::IFACE::handleOpenFootprint(), PCBNEW_JOBS_HANDLER::JobExportDrc(), EESCHEMA_JOBS_HANDLER::JobSchErc(), LoadNetlistFootprints(), PANEL_FOOTPRINT_CHOOSER::PANEL_FOOTPRINT_CHOOSER(), PGM_BASE::PreloadDesignBlockLibraries(), PCB::IFACE::PreloadLibraries(), and SCH::IFACE::PreloadLibraries().
| std::optional< float > LIBRARY_MANAGER_ADAPTER::AsyncLoadProgress | ( | ) | const |
Returns async load progress between 0.0 and 1.0, or nullopt if load is not in progress.
Definition at line 1421 of file library_manager.cpp.
References m_loadCount, and m_loadTotal.
Referenced by BOOST_AUTO_TEST_CASE(), LoadOne(), PGM_BASE::PreloadDesignBlockLibraries(), PCB::IFACE::PreloadLibraries(), and SCH::IFACE::PreloadLibraries().
| void LIBRARY_MANAGER_ADAPTER::BlockUntilLoaded | ( | ) |
Definition at line 1433 of file library_manager.cpp.
References m_futures, m_loadCount, m_loadMutex, m_loadTotal, and traceLibraries.
Referenced by abortLoad(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), filterFootprints(), PCB::IFACE::handleOpenFootprint(), PCBNEW_JOBS_HANDLER::JobExportDrc(), EESCHEMA_JOBS_HANDLER::JobSchErc(), LoadNetlistFootprints(), LoadOne(), PANEL_FOOTPRINT_CHOOSER::PANEL_FOOTPRINT_CHOOSER(), PGM_BASE::PreloadDesignBlockLibraries(), PCB::IFACE::PreloadLibraries(), SCH::IFACE::PreloadLibraries(), and SYMBOL_EDIT_FRAME::SyncLibraries().
| void LIBRARY_MANAGER_ADAPTER::CheckTableRow | ( | LIBRARY_TABLE_ROW & | aRow | ) |
Definition at line 1232 of file library_manager.cpp.
References abortLoad(), createPlugin(), fetchIfLoaded(), LIBRARY_TABLE_ROW::IsOk(), LOADED, LoadOne(), LIBRARY_TABLE_ROW::Nickname(), LIB_DATA::plugin, plugin(), LIB_DATA::row, LIBRARY_TABLE_ROW::SetErrorDescription(), LIBRARY_TABLE_ROW::SetOk(), LIBRARY_TABLE_ROW::Type(), and LIBRARY_TABLE_ROW::URI().
Referenced by LIB_TABLE_NOTEBOOK_PANEL::onGridCellChanging().
| bool LIBRARY_MANAGER_ADAPTER::CreateLibrary | ( | const wxString & | aNickname | ) |
Creates the library (i.e. saves to disk) for the given row if it exists.
Definition at line 1621 of file library_manager.cpp.
References IO_BASE::CreateLibrary(), LIBRARY_TABLE_ROW::GetOptionsMap(), getUri(), loadIfNeeded(), LIB_DATA::plugin, pluginMutex(), result, LIB_DATA::row, traceLibraries, and IO_ERROR::What().
Referenced by SYMBOL_LIBRARY_MANAGER::addLibrary(), and LoadOne().
|
protectedpure virtual |
Creates a concrete plugin for the given row.
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
Referenced by CheckTableRow(), and loadFromScope().
| bool LIBRARY_MANAGER_ADAPTER::DeleteLibrary | ( | const wxString & | aNickname | ) |
Deletes the given library from disk if it exists; returns true if deleted.
Definition at line 1340 of file library_manager.cpp.
References IO_BASE::DeleteLibrary(), LIBRARY_TABLE_ROW::GetOptionsMap(), getUri(), loadIfNeeded(), LIB_DATA::plugin, pluginMutex(), result, and LIB_DATA::row.
Referenced by Type().
|
protectedpure virtual |
Override in derived class to perform library-specific enumeration.
| aUri | is the pre-resolved library URI (must be resolved on the main thread since URI expansion accesses PROJECT data that is not thread-safe). |
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
References abortLoad(), evictOwnedGlobalEntries(), fetchIfLoaded(), getUri(), loadFromScope(), loadIfNeeded(), and resetProjectCache().
|
protected |
Erases this adapter's own entries (LIB_DATA::global_owner == this) from the process-wide globalLibs() cache.
The cached LIB_DATA::row pointers reference this manager's tables, so they must be dropped before the manager is destroyed or a later manager's fetchIfLoaded() would dereference freed rows. Derived destructors must call this while globalLibs() is still resolvable.
Definition at line 1160 of file library_manager.cpp.
References abortLoad(), globalLibs(), and globalLibsMutex().
Referenced by enumerateLibrary(), DESIGN_BLOCK_LIBRARY_ADAPTER::~DESIGN_BLOCK_LIBRARY_ADAPTER(), FOOTPRINT_LIBRARY_ADAPTER::~FOOTPRINT_LIBRARY_ADAPTER(), and SYMBOL_LIBRARY_ADAPTER::~SYMBOL_LIBRARY_ADAPTER().
|
protected |
Definition at line 1691 of file library_manager.cpp.
References find, globalLibs(), globalLibsMutex(), LOADED, m_libraries, and m_librariesMutex.
|
protected |
Definition at line 1661 of file library_manager.cpp.
References find, globalLibs(), globalLibsMutex(), LOADED, m_libraries, and m_librariesMutex.
Referenced by CheckTableRow(), DESIGN_BLOCK_LIBRARY_ADAPTER::DeleteDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::DeleteFootprint(), DESIGN_BLOCK_LIBRARY_ADAPTER::DesignBlockExists(), enumerateLibrary(), FOOTPRINT_LIBRARY_ADAPTER::FootprintExists(), FOOTPRINT_LIBRARY_ADAPTER::GenerateTimestamp(), SYMBOL_LIBRARY_ADAPTER::GetAvailableExtraFields(), DESIGN_BLOCK_LIBRARY_ADAPTER::GetDesignBlockNames(), DESIGN_BLOCK_LIBRARY_ADAPTER::GetDesignBlocks(), DESIGN_BLOCK_LIBRARY_ADAPTER::GetEnumeratedDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::GetFootprintNames(), GetLibraryDescription(), SYMBOL_LIBRARY_ADAPTER::GetLibraryModifyHash(), GetLibraryNames(), SYMBOL_LIBRARY_ADAPTER::GetModifyHash(), SYMBOL_LIBRARY_ADAPTER::GetSubLibraries(), SYMBOL_LIBRARY_ADAPTER::GetSymbolNames(), SYMBOL_LIBRARY_ADAPTER::GetSymbols(), HasLibrary(), DESIGN_BLOCK_LIBRARY_ADAPTER::IsDesignBlockLibWritable(), FOOTPRINT_LIBRARY_ADAPTER::IsFootprintLibWritable(), SYMBOL_LIBRARY_ADAPTER::IsSymbolLibWritable(), IsWritable(), DESIGN_BLOCK_LIBRARY_ADAPTER::LoadDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::LoadFootprint(), SYMBOL_LIBRARY_ADAPTER::LoadSymbol(), FOOTPRINT_LIBRARY_ADAPTER::RefreshLibraryIfChanged(), DESIGN_BLOCK_LIBRARY_ADAPTER::SaveDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::SaveFootprint(), SYMBOL_LIBRARY_ADAPTER::ShowConfigurationDialog(), SYMBOL_LIBRARY_ADAPTER::SupportsConfigurationDialog(), and SYMBOL_LIBRARY_ADAPTER::SupportsSubLibraries().
| std::optional< wxString > LIBRARY_MANAGER_ADAPTER::FindLibraryByURI | ( | const wxString & | aURI | ) | const |
Definition at line 1294 of file library_manager.cpp.
References m_manager, Type(), and LIBRARY_MANAGER::UrisAreEquivalent().
Referenced by Type().
| std::optional< LIBRARY_TABLE_ROW * > LIBRARY_MANAGER_ADAPTER::FindRowByURI | ( | const wxString & | aUri, |
| LIBRARY_TABLE_SCOPE | aScope = LIBRARY_TABLE_SCOPE::BOTH ) const |
Like LIBRARY_MANAGER::FindRowByURI but filtered to the LIBRARY_TABLE_TYPE of this adapter.
Definition at line 1388 of file library_manager.cpp.
References m_manager, and Type().
Referenced by FOOTPRINT_EDIT_FRAME::KiwayMailIn(), SYMBOL_EDIT_FRAME::KiwayMailIn(), and Type().
| std::optional< wxString > LIBRARY_MANAGER_ADAPTER::GetLibraryDescription | ( | const wxString & | aNickname | ) | const |
Definition at line 1365 of file library_manager.cpp.
References fetchIfLoaded().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), PCB_BASE_FRAME::GetLibraryItemsForListDialog(), SCH_BASE_FRAME::GetLibraryItemsForListDialog(), and Type().
| wxString LIBRARY_MANAGER_ADAPTER::GetLibraryLoadErrors | ( | ) | const |
Returns all library load errors as newline-separated strings for display.
Definition at line 1518 of file library_manager.cpp.
References _, GetLibraryStatuses(), and LOAD_ERROR.
Referenced by PCB_EDIT_FRAME::KiwayMailIn(), SCH_EDIT_FRAME::KiwayMailIn(), LoadOne(), PCB::IFACE::PreloadLibraries(), and SCH::IFACE::PreloadLibraries().
| std::vector< wxString > LIBRARY_MANAGER_ADAPTER::GetLibraryNames | ( | ) | const |
Returns a list of library nicknames that are available (skips any that failed to load)
Definition at line 1306 of file library_manager.cpp.
References fetchIfLoaded(), INSENSITIVE, m_manager, StrNumSort(), traceLibraries, and Type().
Referenced by CVPCB_MAINFRAME::BuildLibrariesList(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), DESIGN_BLOCK_LIBRARY_ADAPTER::DesignBlockLoadWithOptionalNickname(), filterFootprints(), FOOTPRINT_LIBRARY_ADAPTER::GenerateTimestamp(), SYMBOL_LIBRARY_MANAGER::GetLibraryCount(), PCB_BASE_FRAME::GetLibraryItemsForListDialog(), SCH_BASE_FRAME::GetLibraryItemsForListDialog(), guessNickname(), FOOTPRINT_LIBRARY_ADAPTER::LoadFootprintWithOptionalNickname(), FOOTPRINT_VIEWER_FRAME::OnActivate(), DIALOG_EDIT_SYMBOLS_LIBID::onClickOrphansButton(), SCH_EDIT_FRAME::OpenProjectFiles(), FOOTPRINT_LIST_IMPL::ReadFootprintFiles(), SYMBOL_VIEWER_FRAME::ReCreateLibList(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), SAVE_AS_DIALOG::SAVE_AS_DIALOG(), and Type().
| std::optional< LIB_STATUS > LIBRARY_MANAGER_ADAPTER::GetLibraryStatus | ( | const wxString & | aNickname | ) | const |
Returns the status of a loaded library, or nullopt if the library hasn't been loaded (yet)
Definition at line 1786 of file library_manager.cpp.
References find, globalLibs(), globalLibsMutex(), m_libraries, and m_librariesMutex.
Referenced by GetLibraryStatuses(), LoadOne(), SCH_EDIT_FRAME::OpenProjectFiles(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync(), and CV::testFootprintLink().
| std::vector< std::pair< wxString, LIB_STATUS > > LIBRARY_MANAGER_ADAPTER::GetLibraryStatuses | ( | ) | const |
Returns a list of all library nicknames and their status (even if they failed to load)
Definition at line 1488 of file library_manager.cpp.
References GetLibraryStatus(), INVALID, m_manager, result, and Type().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), GetLibraryLoadErrors(), LoadOne(), and SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync().
| std::optional< LIBRARY_TABLE_ROW * > LIBRARY_MANAGER_ADAPTER::GetRow | ( | const wxString & | aNickname, |
| LIBRARY_TABLE_SCOPE | aScope = LIBRARY_TABLE_SCOPE::BOTH ) const |
Like LIBRARY_MANAGER::GetRow but filtered to the LIBRARY_TABLE_TYPE of this adapter.
Definition at line 1381 of file library_manager.cpp.
References m_manager, and Type().
Referenced by EXPORTER_STEP::buildFootprint3DShapes(), FOOTPRINT_EDITOR_CONTROL::CompareLibraryWithFile(), SYMBOL_VIEWER_FRAME::DisplayLibInfos(), CVPCB_MAINFRAME::DisplayStatus(), SCH_EDITOR_CONTROL::ExportSymbolsToLibrary(), EXPORTER_PCB_VRML::ExportVrmlFootprint(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::GetValue(), idf_export_footprint(), SYMBOL_EDIT_FRAME::IsSymbolFromLegacyLibrary(), SYMBOL_EDIT_FRAME::KiwayMailIn(), SYMBOL_VIEWER_FRAME::KiwayMailIn(), RENDER_3D_RAYTRACE_BASE::load3DModels(), RENDER_3D_OPENGL::load3dModels(), SCH_EDIT_FRAME::LoadSheetFromFile(), PANEL_FP_PROPERTIES_3D_MODEL::OnAdd3DModel(), PANEL_SYMBOL_CHOOSER::PANEL_SYMBOL_CHOOSER(), SYMBOL_VIEWER_FRAME::ReCreateLibList(), SYMBOL_EDIT_FRAME::replaceLibTableEntry(), DRC_TEST_PROVIDER_LIBRARY_PARITY::Run(), SYMBOL_EDIT_FRAME::saveLibrary(), PCB_BASE_FRAME::setFPWatcher(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync(), DIALOG_FOOTPRINT_ASSOCIATIONS::TransferDataToWindow(), Type(), SCH_SCREEN::UpdateSymbolLinks(), and PANEL_FP_PROPERTIES_3D_MODEL::validateModelExists().
|
staticprotected |
Definition at line 1655 of file library_manager.cpp.
References LIBRARY_MANAGER::ExpandURI(), Pgm(), Prj(), and LIBRARY_TABLE_ROW::URI().
Referenced by AsyncLoad(), CreateLibrary(), DESIGN_BLOCK_LIBRARY_ADAPTER::DeleteDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::DeleteFootprint(), DeleteLibrary(), DESIGN_BLOCK_LIBRARY_ADAPTER::DesignBlockExists(), enumerateLibrary(), FOOTPRINT_LIBRARY_ADAPTER::FootprintExists(), DESIGN_BLOCK_LIBRARY_ADAPTER::GetDesignBlockNames(), DESIGN_BLOCK_LIBRARY_ADAPTER::GetDesignBlocks(), DESIGN_BLOCK_LIBRARY_ADAPTER::GetEnumeratedDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::GetFootprintNames(), SYMBOL_LIBRARY_ADAPTER::GetSymbolNames(), SYMBOL_LIBRARY_ADAPTER::GetSymbols(), DESIGN_BLOCK_LIBRARY_ADAPTER::IsDesignBlockLibWritable(), FOOTPRINT_LIBRARY_ADAPTER::IsFootprintLibWritable(), SYMBOL_LIBRARY_ADAPTER::IsSymbolLibWritable(), IsWritable(), DESIGN_BLOCK_LIBRARY_ADAPTER::LoadDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::LoadFootprint(), DESIGN_BLOCK_LIBRARY_ADAPTER::LoadOne(), FOOTPRINT_LIBRARY_ADAPTER::LoadOne(), SYMBOL_LIBRARY_ADAPTER::LoadOne(), SYMBOL_LIBRARY_ADAPTER::LoadSymbol(), FOOTPRINT_LIBRARY_ADAPTER::RefreshLibraryIfChanged(), DESIGN_BLOCK_LIBRARY_ADAPTER::SaveDesignBlock(), FOOTPRINT_LIBRARY_ADAPTER::SaveFootprint(), and SYMBOL_LIBRARY_ADAPTER::SaveSymbol().
|
protectedpure virtual |
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
|
protectedpure virtual |
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
Referenced by AsyncLoad(), evictOwnedGlobalEntries(), fetchIfLoaded(), fetchIfLoaded(), GetLibraryStatus(), GlobalTablesChanged(), IsLibraryLoaded(), LibraryError(), loadIfNeeded(), and ReloadLibraryEntry().
|
protectedpure virtual |
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
|
protectedpure virtual |
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
Referenced by AsyncLoad(), evictOwnedGlobalEntries(), fetchIfLoaded(), fetchIfLoaded(), GetLibraryStatus(), GlobalTablesChanged(), IsLibraryLoaded(), LibraryError(), loadIfNeeded(), and ReloadLibraryEntry().
| LIBRARY_TABLE * LIBRARY_MANAGER_ADAPTER::GlobalTable | ( | ) | const |
| void LIBRARY_MANAGER_ADAPTER::GlobalTablesChanged | ( | std::initializer_list< LIBRARY_TABLE_TYPE > | aChangedTables = {} | ) |
Notify the adapter that the global library tables have changed.
Definition at line 1135 of file library_manager.cpp.
References abortLoad(), globalLibs(), globalLibsMutex(), and Type().
Referenced by Type().
| bool LIBRARY_MANAGER_ADAPTER::HasLibrary | ( | const wxString & | aNickname, |
| bool | aCheckEnabled = false ) const |
Test for the existence of aNickname in the library tables.
| aCheckEnabled | if true will only return true for enabled libraries |
Definition at line 1329 of file library_manager.cpp.
References fetchIfLoaded().
Referenced by SYMBOL_EDIT_FRAME::AddLibraryFile(), SYMBOL_EDIT_FRAME::addLibTableEntry(), SYMBOL_VIEWER_FRAME::ClickOnLibList(), SYMBOL_EDIT_FRAME::DdAddLibrary(), BOARD_INSPECTION_TOOL::DiffFootprint(), SCH_INSPECTION_TOOL::DiffSymbol(), FOOTPRINT_LIBRARY_ADAPTER::GenerateTimestamp(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), FOOTPRINT_EDIT_FRAME::KiwayMailIn(), SYMBOL_EDIT_FRAME::KiwayMailIn(), SYMBOL_LIBRARY_MANAGER::LibraryExists(), SCH_EDIT_FRAME::LoadSheetFromFile(), PANEL_SYMBOL_CHOOSER::PANEL_SYMBOL_CHOOSER(), DRC_TEST_PROVIDER_LIBRARY_PARITY::Run(), SYMBOL_EDIT_FRAME::saveLibrary(), SCH_BASE_FRAME::SelectLibrary(), CV::testFootprintLink(), Type(), and SCH_SCREEN::UpdateSymbolLinks().
| bool LIBRARY_MANAGER_ADAPTER::IsLibraryLoaded | ( | const wxString & | aNickname | ) |
Definition at line 1448 of file library_manager.cpp.
References find, globalLibs(), globalLibsMutex(), LOADED, m_libraries, and m_librariesMutex.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), SYMBOL_LIBRARY_MANAGER::IsLibraryLoaded(), LoadOne(), DRC_TEST_PROVIDER_LIBRARY_PARITY::Run(), and ERC_TESTER::TestLibSymbolIssues().
|
virtual |
Return true if the given nickname exists and is not a read-only library.
Definition at line 1604 of file library_manager.cpp.
References fetchIfLoaded(), getUri(), IO_BASE::IsLibraryWritable(), LIB_DATA::plugin, pluginMutex(), result, and LIB_DATA::row.
Referenced by LoadOne().
|
virtual |
Definition at line 1468 of file library_manager.cpp.
References find, globalLibs(), globalLibsMutex(), m_libraries, and m_librariesMutex.
Referenced by LIB_TABLE_GRID_TRICKS::onGridCellLeftClick().
|
protected |
Definition at line 1721 of file library_manager.cpp.
References createPlugin(), GLOBAL, LOADING, m_manager, LIBRARY_TABLE_ROW::Nickname(), plugin(), result, traceLibraries, and Type().
Referenced by enumerateLibrary(), loadIfNeeded(), and ReloadLibraryEntry().
|
protected |
Fetches a loaded library, triggering a load of that library if it isn't loaded yet.
Definition at line 1768 of file library_manager.cpp.
References _, GLOBAL, globalLibs(), globalLibsMutex(), loadFromScope(), m_libraries, m_librariesMutex, PROJECT, and result.
Referenced by CreateLibrary(), DeleteLibrary(), enumerateLibrary(), LoadLibraryEntry(), DESIGN_BLOCK_LIBRARY_ADAPTER::LoadOne(), FOOTPRINT_LIBRARY_ADAPTER::LoadOne(), SYMBOL_LIBRARY_ADAPTER::LoadOne(), and SYMBOL_LIBRARY_ADAPTER::SaveSymbol().
| std::optional< LIB_STATUS > LIBRARY_MANAGER_ADAPTER::LoadLibraryEntry | ( | const wxString & | aNickname | ) |
Synchronously loads the named library to LOADED state.
Returns the resulting status, or nullopt if the library is not found in any table.
Definition at line 1538 of file library_manager.cpp.
References loadIfNeeded(), LoadOne(), and result.
Referenced by LoadOne().
|
pure virtual |
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
References AbortAsyncLoad(), AsyncLoadProgress(), BlockUntilLoaded(), BOTH, CreateLibrary(), GetLibraryLoadErrors(), GetLibraryStatus(), GetLibraryStatuses(), IsLibraryLoaded(), IsWritable(), LoadLibraryEntry(), and ReloadLibraryEntry().
Referenced by CheckTableRow(), and LoadLibraryEntry().
| LIBRARY_MANAGER & LIBRARY_MANAGER_ADAPTER::Manager | ( | ) | const |
Definition at line 1100 of file library_manager.cpp.
References m_manager.
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
References pluginMutex().
Referenced by CheckTableRow(), and loadFromScope().
|
staticprotected |
Serializes access to a library's shared plugin instance so its single mutable cache is not raced by concurrent enumerate/load/save/delete calls from the loader pool, preview panels and tree refreshes.
Keyed by nickname, a safe over-approximation of the real resource (the plugin instance): sharing one mutex across two distinct resources can only over-serialize, never under-protect. Static because global-library plugins are shared process-wide.
Definition at line 53 of file library_manager.cpp.
Referenced by CreateLibrary(), FOOTPRINT_LIBRARY_ADAPTER::DeleteFootprint(), DeleteLibrary(), FOOTPRINT_LIBRARY_ADAPTER::enumerateLibrary(), FOOTPRINT_LIBRARY_ADAPTER::FootprintExists(), FOOTPRINT_LIBRARY_ADAPTER::GetFootprintNames(), FOOTPRINT_LIBRARY_ADAPTER::IsFootprintLibWritable(), IsWritable(), FOOTPRINT_LIBRARY_ADAPTER::LoadFootprint(), FOOTPRINT_LIBRARY_ADAPTER::LoadOne(), plugin(), and FOOTPRINT_LIBRARY_ADAPTER::SaveFootprint().
|
virtual |
Notify the adapter that the active project has changed.
Definition at line 1106 of file library_manager.cpp.
References resetProjectCache().
| std::optional< LIBRARY_TABLE * > LIBRARY_MANAGER_ADAPTER::ProjectTable | ( | ) | const |
Retrieves the project library table for this adapter type, or nullopt if one doesn't exist.
Definition at line 1288 of file library_manager.cpp.
References m_manager, PROJECT, and Type().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), SCH_IO_EAGLE::LoadSchematicFile(), SCH_EDIT_FRAME::LoadSheetFromFile(), SCH_EDIT_FRAME::OpenProjectFiles(), and Type().
| void LIBRARY_MANAGER_ADAPTER::ProjectTablesChanged | ( | std::initializer_list< LIBRARY_TABLE_TYPE > | aChangedTables = {} | ) |
Notify the adapter that the project library tables are about to be rebuilt.
Mirrors GlobalTablesChanged: aborts any in-progress loads and invalidates cached LIB_DATA entries so raw LIBRARY_TABLE_ROW pointers do not dangle when the backing LIBRARY_TABLE objects are destroyed and rebuilt. Entries are reset in place (rather than erased) so their nicknames continue to mask same-named global libraries until the project scope is repopulated.
Definition at line 1178 of file library_manager.cpp.
References resetProjectCache(), and Type().
| void LIBRARY_MANAGER_ADAPTER::ProjectTablesReloaded | ( | std::initializer_list< LIBRARY_TABLE_TYPE > | aChangedTables = {} | ) |
Complements ProjectTablesChanged by erasing project-scope cache entries whose nicknames no longer appear in the rebuilt project table.
Must be called AFTER the new project table is loaded; otherwise removed libraries would be permanently masked by stale sentinels installed during the reset.
Definition at line 1198 of file library_manager.cpp.
References m_libraries, m_librariesMutex, m_manager, PROJECT, and Type().
| void LIBRARY_MANAGER_ADAPTER::ReloadLibraryEntry | ( | const wxString & | aNickname, |
| LIBRARY_TABLE_SCOPE | aScope = LIBRARY_TABLE_SCOPE::BOTH ) |
Definition at line 1549 of file library_manager.cpp.
References abortLoad(), BOTH, GLOBAL, globalLibs(), globalLibsMutex(), loadFromScope(), m_libraries, m_librariesMutex, PROJECT, result, traceLibraries, and UNINITIALIZED.
Referenced by LoadOne(), and SCH_IO_EAGLE::LoadSchematicFile().
|
protected |
Aborts pending loads and resets every project-scope cache entry in place (plugin and row cleared, status returned to INVALID) while preserving the nickname keys.
Keeping the keys acts as a sentinel: fetchIfLoaded() finds the entry, sees it is no longer LOADED, and returns nullopt instead of falling through to globalLibs(), which is what preserves project-over- global shadowing across a project table reload. Shared between ProjectChanged() and ProjectTablesChanged() so both hooks stay in sync.
Definition at line 1112 of file library_manager.cpp.
References abortLoad(), m_libraries, and m_librariesMutex.
Referenced by enumerateLibrary(), ProjectChanged(), and ProjectTablesChanged().
| std::vector< LIBRARY_TABLE_ROW * > LIBRARY_MANAGER_ADAPTER::Rows | ( | LIBRARY_TABLE_SCOPE | aScope = LIBRARY_TABLE_SCOPE::BOTH, |
| bool | aIncludeInvalid = false ) const |
Like LIBRARY_MANAGER::Rows but filtered to the LIBRARY_TABLE_TYPE of this adapter.
Definition at line 1374 of file library_manager.cpp.
References m_manager, and Type().
Referenced by CVPCB_MAINFRAME::LoadFootprintFiles(), LoadNetlistFootprints(), and Type().
|
inlinevirtual |
Reimplemented in SYMBOL_LIBRARY_ADAPTER.
Definition at line 194 of file library_manager.h.
Referenced by LIB_TABLE_GRID_TRICKS::doPopupSelection(), and LIB_TABLE_GRID_TRICKS::onGridCellLeftClick().
|
inlinevirtual |
Reimplemented in SYMBOL_LIBRARY_ADAPTER.
Definition at line 192 of file library_manager.h.
Referenced by LIB_TABLE_GRID_TRICKS::onGridCellLeftClick().
|
pure virtual |
The type of library table this adapter works with.
Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.
References BOTH, DeleteLibrary(), FindLibraryByURI(), FindRowByURI(), GetLibraryDescription(), GetLibraryNames(), GetRow(), GlobalTable(), GlobalTablesChanged(), HasLibrary(), ProjectTable(), and Rows().
Referenced by AsyncLoad(), FindLibraryByURI(), FindRowByURI(), GetLibraryNames(), GetLibraryStatuses(), GetRow(), GlobalTable(), GlobalTablesChanged(), loadFromScope(), ProjectTable(), ProjectTablesChanged(), ProjectTablesReloaded(), and Rows().
|
protected |
Definition at line 261 of file library_manager.h.
Referenced by abortLoad().
|
protected |
Definition at line 262 of file library_manager.h.
Referenced by abortLoad(), AsyncLoad(), and BlockUntilLoaded().
|
protected |
Definition at line 257 of file library_manager.h.
Referenced by AsyncLoad(), fetchIfLoaded(), fetchIfLoaded(), GetLibraryStatus(), IsLibraryLoaded(), LibraryError(), loadIfNeeded(), ProjectTablesReloaded(), ReloadLibraryEntry(), and resetProjectCache().
|
mutableprotected |
Definition at line 259 of file library_manager.h.
Referenced by AsyncLoad(), fetchIfLoaded(), fetchIfLoaded(), GetLibraryStatus(), IsLibraryLoaded(), LibraryError(), loadIfNeeded(), ProjectTablesReloaded(), ReloadLibraryEntry(), and resetProjectCache().
|
protected |
Definition at line 264 of file library_manager.h.
Referenced by abortLoad(), AsyncLoad(), AsyncLoadProgress(), and BlockUntilLoaded().
|
protected |
Definition at line 266 of file library_manager.h.
Referenced by abortLoad(), AsyncLoad(), and BlockUntilLoaded().
|
protected |
Definition at line 265 of file library_manager.h.
Referenced by abortLoad(), AsyncLoad(), AsyncLoadProgress(), and BlockUntilLoaded().
|
protected |
Definition at line 254 of file library_manager.h.
Referenced by AsyncLoad(), DESIGN_BLOCK_LIBRARY_ADAPTER::createPlugin(), FOOTPRINT_LIBRARY_ADAPTER::createPlugin(), SYMBOL_LIBRARY_ADAPTER::createPlugin(), FindLibraryByURI(), FindRowByURI(), GetLibraryNames(), GetLibraryStatuses(), SYMBOL_LIBRARY_ADAPTER::GetModifyHash(), GetRow(), GlobalTable(), LIBRARY_MANAGER_ADAPTER(), loadFromScope(), Manager(), ProjectTable(), ProjectTablesReloaded(), and Rows().