KiCad PCB EDA Suite
Loading...
Searching...
No Matches
LIBRARY_MANAGER_ADAPTER Class Referenceabstract

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>

Inheritance diagram for LIBRARY_MANAGER_ADAPTER:
DESIGN_BLOCK_LIBRARY_ADAPTER FOOTPRINT_LIBRARY_ADAPTER SYMBOL_LIBRARY_ADAPTER

Public Member Functions

 LIBRARY_MANAGER_ADAPTER (LIBRARY_MANAGER &aManager)
 Constructs a type-specific adapter into the library manager.
 
virtual ~LIBRARY_MANAGER_ADAPTER ()
 
LIBRARY_MANAGERManager () const
 
virtual LIBRARY_TABLE_TYPE Type () const =0
 The type of library table this adapter works with.
 
LIBRARY_TABLEGlobalTable () 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 CheckTableRow (LIBRARY_TABLE_ROW &aRow)
 
void AsyncLoad ()
 Loads all available libraries for this adapter type in the background.
 
virtual std::optional< LIB_STATUSLoadOne (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_STATUSGetLibraryStatus (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)
 
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_ERRORLibraryError (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)=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 abortLoad ()
 Aborts any async load in progress; blocks until fully done aborting.
 
virtual LIBRARY_RESULT< IO_BASE * > createPlugin (const LIBRARY_TABLE_ROW *row)=0
 Creates a concrete plugin for the given row.
 
virtual IO_BASEplugin (const LIB_DATA *aRow)=0
 

Static Protected Member Functions

static wxString getUri (const LIBRARY_TABLE_ROW *aRow)
 

Protected Attributes

LIBRARY_MANAGERm_manager
 
std::map< wxString, LIB_DATAm_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
 

Detailed Description

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 70 of file library_manager.h.

Constructor & Destructor Documentation

◆ LIBRARY_MANAGER_ADAPTER()

LIBRARY_MANAGER_ADAPTER::LIBRARY_MANAGER_ADAPTER ( LIBRARY_MANAGER & aManager)

Constructs a type-specific adapter into the library manager.

LIBRARY_MANAGER_ADAPTER.

The code for these generally resides in app-specific libraries (eeschema/pcbnew for example) rather than being in kicommon.

Parameters
aManagershould usually be Pgm().GetLibraryManager() except in QA tests

Definition at line 786 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().

◆ ~LIBRARY_MANAGER_ADAPTER()

LIBRARY_MANAGER_ADAPTER::~LIBRARY_MANAGER_ADAPTER ( )
virtual

Definition at line 792 of file library_manager.cpp.

Member Function Documentation

◆ AbortAsyncLoad()

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 814 of file library_manager.cpp.

References abortLoad().

Referenced by LoadOne().

◆ abortLoad()

void LIBRARY_MANAGER_ADAPTER::abortLoad ( )
protected

Aborts any async load in progress; blocks until fully done aborting.

Definition at line 989 of file library_manager.cpp.

References BlockUntilLoaded(), m_abort, m_futures, m_loadCount, m_loadMutex, m_loadTotal, and traceLibraries.

Referenced by AbortAsyncLoad(), CheckTableRow(), enumerateLibrary(), GlobalTablesChanged(), and ProjectChanged().

◆ AsyncLoad()

◆ AsyncLoadProgress()

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 1014 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().

◆ BlockUntilLoaded()

◆ CheckTableRow()

◆ CreateLibrary()

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 1190 of file library_manager.cpp.

References IO_BASE::CreateLibrary(), LIBRARY_TABLE_ROW::GetOptionsMap(), getUri(), loadIfNeeded(), LIB_DATA::plugin, result, and LIB_DATA::row.

Referenced by SYMBOL_LIBRARY_MANAGER::addLibrary(), and LoadOne().

◆ createPlugin()

virtual LIBRARY_RESULT< IO_BASE * > LIBRARY_MANAGER_ADAPTER::createPlugin ( const LIBRARY_TABLE_ROW * row)
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().

◆ DeleteLibrary()

bool LIBRARY_MANAGER_ADAPTER::DeleteLibrary ( const wxString & aNickname)

Deletes the given library from disk if it exists; returns true if deleted.

Definition at line 937 of file library_manager.cpp.

References IO_BASE::DeleteLibrary(), LIBRARY_TABLE_ROW::GetOptionsMap(), getUri(), loadIfNeeded(), LIB_DATA::plugin, result, and LIB_DATA::row.

Referenced by Type().

◆ enumerateLibrary()

virtual void LIBRARY_MANAGER_ADAPTER::enumerateLibrary ( LIB_DATA * aLib)
protectedpure virtual

Override in derived class to perform library-specific enumeration.

Implemented in DESIGN_BLOCK_LIBRARY_ADAPTER, FOOTPRINT_LIBRARY_ADAPTER, and SYMBOL_LIBRARY_ADAPTER.

References abortLoad(), fetchIfLoaded(), getUri(), loadFromScope(), and loadIfNeeded().

◆ fetchIfLoaded() [1/2]

std::optional< LIB_DATA * > LIBRARY_MANAGER_ADAPTER::fetchIfLoaded ( const wxString & aNickname)
protected

◆ fetchIfLoaded() [2/2]

◆ FindLibraryByURI()

std::optional< wxString > LIBRARY_MANAGER_ADAPTER::FindLibraryByURI ( const wxString & aURI) const

Definition at line 894 of file library_manager.cpp.

References m_manager, Type(), and LIBRARY_MANAGER::UrisAreEquivalent().

Referenced by Type().

◆ FindRowByURI()

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 981 of file library_manager.cpp.

References m_manager, and Type().

Referenced by FOOTPRINT_EDIT_FRAME::KiwayMailIn(), SYMBOL_EDIT_FRAME::KiwayMailIn(), and Type().

◆ GetLibraryDescription()

std::optional< wxString > LIBRARY_MANAGER_ADAPTER::GetLibraryDescription ( const wxString & aNickname) const

◆ GetLibraryLoadErrors()

wxString LIBRARY_MANAGER_ADAPTER::GetLibraryLoadErrors ( ) const

Returns all library load errors as newline-separated strings for display.

Definition at line 1105 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().

◆ GetLibraryNames()

◆ GetLibraryStatus()

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 1340 of file library_manager.cpp.

References find, globalLibs(), globalLibsMutex(), m_libraries, and m_librariesMutex.

Referenced by GetLibraryStatuses(), CV::kiface(), LoadOne(), and SCH_EDIT_FRAME::OpenProjectFiles().

◆ GetLibraryStatuses()

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 1081 of file library_manager.cpp.

References _, GetLibraryStatus(), LOAD_ERROR, m_manager, result, and Type().

Referenced by BOOST_AUTO_TEST_CASE(), GetLibraryLoadErrors(), LoadOne(), and SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync().

◆ GetRow()

◆ getUri()

◆ globalLibs() [1/2]

virtual std::map< wxString, LIB_DATA > & LIBRARY_MANAGER_ADAPTER::globalLibs ( ) const
protectedpure virtual

◆ globalLibs() [2/2]

virtual std::map< wxString, LIB_DATA > & LIBRARY_MANAGER_ADAPTER::globalLibs ( )
protectedpure virtual

◆ globalLibsMutex() [1/2]

virtual std::shared_mutex & LIBRARY_MANAGER_ADAPTER::globalLibsMutex ( ) const
protectedpure virtual

◆ globalLibsMutex() [2/2]

virtual std::shared_mutex & LIBRARY_MANAGER_ADAPTER::globalLibsMutex ( )
protectedpure virtual

◆ GlobalTable()

LIBRARY_TABLE * LIBRARY_MANAGER_ADAPTER::GlobalTable ( ) const

Retrieves the global library table for this adapter type.

Definition at line 881 of file library_manager.cpp.

References GLOBAL, m_manager, and Type().

Referenced by Type().

◆ GlobalTablesChanged()

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 820 of file library_manager.cpp.

References abortLoad(), globalLibs(), globalLibsMutex(), and Type().

Referenced by Type().

◆ HasLibrary()

◆ IsLibraryLoaded()

bool LIBRARY_MANAGER_ADAPTER::IsLibraryLoaded ( const wxString & aNickname)

◆ IsWritable()

bool LIBRARY_MANAGER_ADAPTER::IsWritable ( const wxString & aNickname) const
virtual

Return true if the given nickname exists and is not a read-only library.

Definition at line 1178 of file library_manager.cpp.

References fetchIfLoaded(), getUri(), IO_BASE::IsLibraryWritable(), LIB_DATA::plugin, result, and LIB_DATA::row.

Referenced by LoadOne().

◆ LibraryError()

std::optional< LIBRARY_ERROR > LIBRARY_MANAGER_ADAPTER::LibraryError ( const wxString & aNickname) const
virtual

◆ loadFromScope()

LIBRARY_RESULT< LIB_DATA * > LIBRARY_MANAGER_ADAPTER::loadFromScope ( const wxString & aNickname,
LIBRARY_TABLE_SCOPE aScope,
std::map< wxString, LIB_DATA > & aTarget,
std::shared_mutex & aMutex )
protected

◆ loadIfNeeded()

LIBRARY_RESULT< LIB_DATA * > LIBRARY_MANAGER_ADAPTER::loadIfNeeded ( const wxString & aNickname)
protected

◆ LoadOne()

◆ Manager()

LIBRARY_MANAGER & LIBRARY_MANAGER_ADAPTER::Manager ( ) const

Definition at line 797 of file library_manager.cpp.

References m_manager.

◆ plugin()

virtual IO_BASE * LIBRARY_MANAGER_ADAPTER::plugin ( const LIB_DATA * aRow)
protectedpure virtual

◆ ProjectChanged()

void LIBRARY_MANAGER_ADAPTER::ProjectChanged ( )
virtual

Notify the adapter that the active project has changed.

Definition at line 803 of file library_manager.cpp.

References abortLoad(), m_libraries, and m_librariesMutex.

◆ ProjectTable()

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 888 of file library_manager.cpp.

References m_manager, PROJECT, and Type().

Referenced by SCH_IO_CADSTAR_ARCHIVE::LoadSchematicFile(), SCH_IO_EAGLE::LoadSchematicFile(), SCH_IO_EASYEDAPRO::LoadSchematicFile(), SCH_EDIT_FRAME::LoadSheetFromFile(), SCH_EDIT_FRAME::OpenProjectFiles(), and Type().

◆ ReloadLibraryEntry()

void LIBRARY_MANAGER_ADAPTER::ReloadLibraryEntry ( const wxString & aNickname,
LIBRARY_TABLE_SCOPE aScope = LIBRARY_TABLE_SCOPE::BOTH )

◆ Rows()

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 967 of file library_manager.cpp.

References m_manager, and Type().

Referenced by CVPCB_MAINFRAME::LoadFootprintFiles(), and Type().

◆ ShowConfigurationDialog()

virtual void LIBRARY_MANAGER_ADAPTER::ShowConfigurationDialog ( const wxString & aNickname,
wxWindow * aParent ) const
inlinevirtual

◆ SupportsConfigurationDialog()

virtual bool LIBRARY_MANAGER_ADAPTER::SupportsConfigurationDialog ( const wxString & aNickname) const
inlinevirtual

Reimplemented in SYMBOL_LIBRARY_ADAPTER.

Definition at line 167 of file library_manager.h.

Referenced by LIB_TABLE_GRID_TRICKS::onGridCellLeftClick().

◆ Type()

Member Data Documentation

◆ m_abort

std::atomic_bool LIBRARY_MANAGER_ADAPTER::m_abort
protected

Definition at line 211 of file library_manager.h.

Referenced by abortLoad().

◆ m_futures

std::vector<std::future<void> > LIBRARY_MANAGER_ADAPTER::m_futures
protected

Definition at line 212 of file library_manager.h.

Referenced by abortLoad(), AsyncLoad(), and BlockUntilLoaded().

◆ m_libraries

◆ m_librariesMutex

◆ m_loadCount

std::atomic<size_t> LIBRARY_MANAGER_ADAPTER::m_loadCount { 0 }
protected

Definition at line 214 of file library_manager.h.

Referenced by abortLoad(), AsyncLoad(), AsyncLoadProgress(), and BlockUntilLoaded().

◆ m_loadMutex

std::mutex LIBRARY_MANAGER_ADAPTER::m_loadMutex
protected

Definition at line 216 of file library_manager.h.

Referenced by abortLoad(), AsyncLoad(), and BlockUntilLoaded().

◆ m_loadTotal

std::atomic<size_t> LIBRARY_MANAGER_ADAPTER::m_loadTotal { 0 }
protected

Definition at line 215 of file library_manager.h.

Referenced by abortLoad(), AsyncLoad(), AsyncLoadProgress(), and BlockUntilLoaded().

◆ m_manager


The documentation for this class was generated from the following files: