KiCad PCB EDA Suite
Loading...
Searching...
No Matches
SYMBOL_LIBRARY_MANAGER Class Reference

Class to handle modifications to the symbol libraries. More...

#include <symbol_library_manager.h>

Inheritance diagram for SYMBOL_LIBRARY_MANAGER:
LIB_SYMBOL_LIBRARY_MANAGER

Public Member Functions

 SYMBOL_LIBRARY_MANAGER (SCH_BASE_FRAME &aFrame)
 
virtual ~SYMBOL_LIBRARY_MANAGER ()
 
int GetHash () const
 
bool HasModifications () const
 
int GetLibraryHash (const wxString &aLibrary) const
 Return a library hash value to determine if it has changed.
 
wxArrayString GetLibraryNames () const
 Return the array of library names.
 
std::list< LIB_SYMBOL * > EnumerateSymbols (const wxString &aLibrary) const
 
bool CreateLibrary (const wxString &aFilePath, LIBRARY_TABLE_SCOPE aScope)
 Create an empty library and adds it to the library table.
 
bool AddLibrary (const wxString &aFilePath, LIBRARY_TABLE_SCOPE aScope)
 Add an existing library.
 
bool UpdateSymbol (LIB_SYMBOL *aSymbol, const wxString &aLibrary)
 Update the symbol buffer with a new version of the symbol.
 
bool UpdateSymbolAfterRename (LIB_SYMBOL *aSymbol, const wxString &aOldSymbolName, const wxString &aLibrary)
 Update the symbol buffer with a new version of the symbol when the name has changed.
 
bool UpdateLibraryBuffer (const wxString &aLibrary)
 Update the library buffer with a new version of the library.
 
bool RemoveSymbol (const wxString &aSymbolName, const wxString &aLibrary)
 Remove the symbol from the symbol buffer.
 
LIB_SYMBOLGetSymbol (const wxString &aSymbolName, const wxString &aLibrary) const
 Return either an alias of a working LIB_SYMBOL copy, or alias of the original symbol if there is no working copy.
 
LIB_SYMBOLGetBufferedSymbol (const wxString &aSymbolName, const wxString &aLibrary)
 Return the symbol copy from the buffer.
 
SCH_SCREENGetScreen (const wxString &aSymbolName, const wxString &aLibrary)
 Return the screen used to edit a specific symbol.
 
bool SymbolExists (const wxString &aSymbolName, const wxString &aLibrary) const
 Return true if symbol with a specific alias exists in library (either original one or buffered).
 
bool SymbolNameInUse (const wxString &aName, const wxString &aLibrary)
 Return true if the symbol name is already in use in the specified library.
 
bool LibraryExists (const wxString &aLibrary, bool aCheckEnabled=false) const
 Return true if library exists.
 
bool IsLibraryLoaded (const wxString &aLibrary) const
 Return true if the library was successfully loaded.
 
bool IsLibraryModified (const wxString &aLibrary) const
 Return true if library has unsaved modifications.
 
bool IsSymbolModified (const wxString &aSymbolName, const wxString &aLibrary) const
 Return true if symbol has unsaved modifications.
 
void SetSymbolModified (const wxString &aSymbolName, const wxString &aLibrary)
 
bool ClearLibraryModified (const wxString &aLibrary) const
 Clear the modified flag for all symbols in a library.
 
bool ClearSymbolModified (const wxString &aSymbolName, const wxString &aLibrary) const
 Clear the modified flag for a symbol.
 
bool IsLibraryReadOnly (const wxString &aLibrary) const
 Return true if the library is stored in a read-only file.
 
bool SaveLibrary (const wxString &aLibrary, const wxString &aFileName, SCH_IO_MGR::SCH_FILE_T aFileType=SCH_IO_MGR::SCH_FILE_T::SCH_LEGACY)
 Save library to a file, including unsaved changes.
 
LIB_ID RevertSymbol (const wxString &aSymbolName, const wxString &aLibrary)
 Revert unsaved changes for a symbol.
 
bool RevertLibrary (const wxString &aLibrary)
 Revert unsaved changes for a symbol library.
 
bool RevertAll ()
 Revert all pending changes.
 
wxString GetUniqueLibraryName () const
 Return a library name that is not currently in use.
 
void GetSymbolNames (const wxString &aLibName, wxArrayString &aSymbolNames, SYMBOL_NAME_FILTER aFilter=SYMBOL_NAME_FILTER::ALL)
 
size_t GetDerivedSymbolNames (const wxString &aSymbolName, const wxString &aLibraryName, wxArrayString &aList)
 Fetch all of the symbols derived from a aSymbolName into aList.
 
size_t GetLibraryCount () const
 

Protected Member Functions

virtual void OnDataChanged () const
 
bool addLibrary (const wxString &aFilePath, bool aCreate, LIBRARY_TABLE_SCOPE aScope)
 Helper function to add either existing or create new library.
 
std::set< LIB_SYMBOL * > getOriginalSymbols (const wxString &aLibrary)
 Return a set of LIB_SYMBOL objects belonging to the original library.
 
LIB_BUFFERgetLibraryBuffer (const wxString &aLibrary)
 Return an existing library buffer or creates one to using symbol library table to get the original data.
 

Static Protected Member Functions

static wxString getLibraryName (const wxString &aFilePath)
 Extract library name basing on the file name.
 

Protected Attributes

std::map< wxString, LIB_BUFFERm_libs
 The library buffers.
 
SCH_BASE_FRAMEm_frame
 Parent frame.
 
LIB_LOGGERm_logger
 

Detailed Description

Class to handle modifications to the symbol libraries.

TODO(JE) Library tables - this class probably shouldn't exist anymore

Definition at line 181 of file symbol_library_manager.h.

Constructor & Destructor Documentation

◆ SYMBOL_LIBRARY_MANAGER()

SYMBOL_LIBRARY_MANAGER::SYMBOL_LIBRARY_MANAGER ( SCH_BASE_FRAME & aFrame)

Definition at line 48 of file symbol_library_manager.cpp.

References m_frame, and m_logger.

Referenced by LIB_SYMBOL_LIBRARY_MANAGER::LIB_SYMBOL_LIBRARY_MANAGER().

◆ ~SYMBOL_LIBRARY_MANAGER()

SYMBOL_LIBRARY_MANAGER::~SYMBOL_LIBRARY_MANAGER ( )
virtual

Definition at line 55 of file symbol_library_manager.cpp.

References m_logger.

Member Function Documentation

◆ AddLibrary()

bool SYMBOL_LIBRARY_MANAGER::AddLibrary ( const wxString & aFilePath,
LIBRARY_TABLE_SCOPE aScope )
inline

Add an existing library.

The library is added to the library table as well.

Definition at line 222 of file symbol_library_manager.h.

References addLibrary().

◆ addLibrary()

◆ ClearLibraryModified()

bool SYMBOL_LIBRARY_MANAGER::ClearLibraryModified ( const wxString & aLibrary) const

Clear the modified flag for all symbols in a library.

Definition at line 260 of file symbol_library_manager.cpp.

References m_libs, and BASE_SCREEN::SetContentModified().

◆ ClearSymbolModified()

bool SYMBOL_LIBRARY_MANAGER::ClearSymbolModified ( const wxString & aSymbolName,
const wxString & aLibrary ) const

Clear the modified flag for a symbol.

Definition at line 279 of file symbol_library_manager.cpp.

References m_libs.

◆ CreateLibrary()

bool SYMBOL_LIBRARY_MANAGER::CreateLibrary ( const wxString & aFilePath,
LIBRARY_TABLE_SCOPE aScope )
inline

Create an empty library and adds it to the library table.

The library file is created.

Definition at line 212 of file symbol_library_manager.h.

References addLibrary().

Referenced by SCH_BASE_FRAME::SelectLibrary().

◆ EnumerateSymbols()

std::list< LIB_SYMBOL * > SYMBOL_LIBRARY_MANAGER::EnumerateSymbols ( const wxString & aLibrary) const

◆ GetBufferedSymbol()

LIB_SYMBOL * SYMBOL_LIBRARY_MANAGER::GetBufferedSymbol ( const wxString & aSymbolName,
const wxString & aLibrary )

◆ GetDerivedSymbolNames()

size_t SYMBOL_LIBRARY_MANAGER::GetDerivedSymbolNames ( const wxString & aSymbolName,
const wxString & aLibraryName,
wxArrayString & aList )

Fetch all of the symbols derived from a aSymbolName into aList.

Definition at line 653 of file symbol_library_manager.cpp.

References LIB_BUFFER::GetDerivedSymbolNames(), and getLibraryBuffer().

Referenced by DIALOG_LIB_FIELDS_TABLE::setScope().

◆ GetHash()

int SYMBOL_LIBRARY_MANAGER::GetHash ( ) const

◆ getLibraryBuffer()

LIB_BUFFER & SYMBOL_LIBRARY_MANAGER::getLibraryBuffer ( const wxString & aLibrary)
protected

Return an existing library buffer or creates one to using symbol library table to get the original data.

Definition at line 735 of file symbol_library_manager.cpp.

References LIB_BUFFER::CreateBuffer(), getOriginalSymbols(), LIB_BUFFER::GetSymbol(), and m_libs.

Referenced by GetBufferedSymbol(), GetDerivedSymbolNames(), GetSymbolNames(), RemoveSymbol(), UpdateLibraryBuffer(), UpdateSymbol(), and UpdateSymbolAfterRename().

◆ GetLibraryCount()

size_t SYMBOL_LIBRARY_MANAGER::GetLibraryCount ( ) const

◆ GetLibraryHash()

int SYMBOL_LIBRARY_MANAGER::GetLibraryHash ( const wxString & aLibrary) const

Return a library hash value to determine if it has changed.

For buffered libraries, it returns a number corresponding to the number of modifications. For original libraries, hash is computed basing on the library URI. Returns -1 when the requested library does not exist.

Definition at line 80 of file symbol_library_manager.cpp.

References LIBRARY_MANAGER::GetFullURI(), PGM_BASE::GetLibraryManager(), m_libs, Pgm(), and SYMBOL.

◆ getLibraryName()

wxString SYMBOL_LIBRARY_MANAGER::getLibraryName ( const wxString & aFilePath)
staticprotected

Extract library name basing on the file name.

Definition at line 669 of file symbol_library_manager.cpp.

Referenced by addLibrary().

◆ GetLibraryNames()

wxArrayString SYMBOL_LIBRARY_MANAGER::GetLibraryNames ( ) const

Return the array of library names.

Definition at line 96 of file symbol_library_manager.cpp.

References PGM_BASE::GetLibraryManager(), Pgm(), res, LIBRARY_MANAGER::Rows(), SCH_IO_MGR::ShowType(), and SYMBOL.

◆ getOriginalSymbols()

std::set< LIB_SYMBOL * > SYMBOL_LIBRARY_MANAGER::getOriginalSymbols ( const wxString & aLibrary)
protected

Return a set of LIB_SYMBOL objects belonging to the original library.

Definition at line 721 of file symbol_library_manager.cpp.

References SYMBOL_LIBRARY_ADAPTER::GetSymbols(), LibraryExists(), m_frame, and PROJECT_SCH::SymbolLibAdapter().

Referenced by getLibraryBuffer(), and SaveLibrary().

◆ GetScreen()

SCH_SCREEN * SYMBOL_LIBRARY_MANAGER::GetScreen ( const wxString & aSymbolName,
const wxString & aLibrary )

Return the screen used to edit a specific symbol.

SYMBOL_LIBRARY_MANAGER retains the ownership.

Definition at line 392 of file symbol_library_manager.cpp.

References LIB_BUFFER::GetBuffer(), and m_libs.

◆ GetSymbol()

LIB_SYMBOL * SYMBOL_LIBRARY_MANAGER::GetSymbol ( const wxString & aSymbolName,
const wxString & aLibrary ) const

Return either an alias of a working LIB_SYMBOL copy, or alias of the original symbol if there is no working copy.

Definition at line 532 of file symbol_library_manager.cpp.

References _, DisplayErrorMessage(), SYMBOL_LIBRARY_ADAPTER::LoadSymbol(), m_frame, m_libs, PROJECT_SCH::SymbolLibAdapter(), and IO_ERROR::What().

Referenced by CheckSavingIntoOwnInheritance(), LIB_SYMBOL_LIBRARY_MANAGER::CreateNewSymbol(), and SYMBOL_EDITOR_CONTROL::Init().

◆ GetSymbolNames()

void SYMBOL_LIBRARY_MANAGER::GetSymbolNames ( const wxString & aLibName,
wxArrayString & aSymbolNames,
SYMBOL_NAME_FILTER aFilter = SYMBOL_NAME_FILTER::ALL )

◆ GetUniqueLibraryName()

wxString SYMBOL_LIBRARY_MANAGER::GetUniqueLibraryName ( ) const

Return a library name that is not currently in use.

Used for generating names for new libraries.

Definition at line 624 of file symbol_library_manager.cpp.

References LibraryExists(), and name.

◆ HasModifications()

bool SYMBOL_LIBRARY_MANAGER::HasModifications ( ) const

Definition at line 61 of file symbol_library_manager.cpp.

References m_libs, and name.

◆ IsLibraryLoaded()

bool SYMBOL_LIBRARY_MANAGER::IsLibraryLoaded ( const wxString & aLibrary) const

Return true if the library was successfully loaded.

Definition at line 301 of file symbol_library_manager.cpp.

References LIBRARY_MANAGER_ADAPTER::IsLibraryLoaded(), m_frame, and PROJECT_SCH::SymbolLibAdapter().

◆ IsLibraryModified()

bool SYMBOL_LIBRARY_MANAGER::IsLibraryModified ( const wxString & aLibrary) const

Return true if library has unsaved modifications.

Definition at line 223 of file symbol_library_manager.cpp.

References m_libs.

Referenced by SYMBOL_EDITOR_CONTROL::Init().

◆ IsLibraryReadOnly()

bool SYMBOL_LIBRARY_MANAGER::IsLibraryReadOnly ( const wxString & aLibrary) const

Return true if the library is stored in a read-only file.

Returns
True on success, false otherwise.

Definition at line 294 of file symbol_library_manager.cpp.

References SYMBOL_LIBRARY_ADAPTER::IsSymbolLibWritable(), m_frame, and PROJECT_SCH::SymbolLibAdapter().

Referenced by SYMBOL_EDITOR_CONTROL::AddSymbol(), SYMBOL_EDITOR_CONTROL::CutCopyDelete(), and SYMBOL_EDITOR_CONTROL::DuplicateSymbol().

◆ IsSymbolModified()

bool SYMBOL_LIBRARY_MANAGER::IsSymbolModified ( const wxString & aSymbolName,
const wxString & aLibrary ) const

Return true if symbol has unsaved modifications.

Definition at line 230 of file symbol_library_manager.cpp.

References LIB_BUFFER::GetBuffer(), and m_libs.

◆ LibraryExists()

bool SYMBOL_LIBRARY_MANAGER::LibraryExists ( const wxString & aLibrary,
bool aCheckEnabled = false ) const

◆ OnDataChanged()

virtual void SYMBOL_LIBRARY_MANAGER::OnDataChanged ( ) const
inlineprotectedvirtual

◆ RemoveSymbol()

bool SYMBOL_LIBRARY_MANAGER::RemoveSymbol ( const wxString & aSymbolName,
const wxString & aLibrary )

Remove the symbol from the symbol buffer.

It is required to save the library to have the symbol removed in the schematic editor.

Definition at line 517 of file symbol_library_manager.cpp.

References LIB_BUFFER::DeleteBuffer(), LIB_BUFFER::GetBuffer(), getLibraryBuffer(), and OnDataChanged().

Referenced by SYMBOL_EDITOR_CONTROL::RenameSymbol().

◆ RevertAll()

bool SYMBOL_LIBRARY_MANAGER::RevertAll ( )

Revert all pending changes.

Returns
True if all changes successfully reverted.

Definition at line 491 of file symbol_library_manager.cpp.

References GetHash(), m_libs, and RevertSymbol().

◆ RevertLibrary()

bool SYMBOL_LIBRARY_MANAGER::RevertLibrary ( const wxString & aLibrary)

Revert unsaved changes for a symbol library.

Returns
True on success, false otherwise.

Definition at line 477 of file symbol_library_manager.cpp.

References m_libs, and OnDataChanged().

◆ RevertSymbol()

LIB_ID SYMBOL_LIBRARY_MANAGER::RevertSymbol ( const wxString & aSymbolName,
const wxString & aLibrary )

Revert unsaved changes for a symbol.

Returns
The LIB_ID of the reverted symbol (which may be different in the case of a rename)

Definition at line 451 of file symbol_library_manager.cpp.

References LIB_SYMBOL::GetName(), m_libs, OnDataChanged(), and UpdateSymbolAfterRename().

Referenced by RevertAll().

◆ SaveLibrary()

bool SYMBOL_LIBRARY_MANAGER::SaveLibrary ( const wxString & aLibrary,
const wxString & aFileName,
SCH_IO_MGR::SCH_FILE_T aFileType = SCH_IO_MGR::SCH_FILE_T::SCH_LEGACY )

Save library to a file, including unsaved changes.

Parameters
aLibraryis the library name.
aFileNameis the target file name.
Returns
True on success, false otherwise.

Definition at line 115 of file symbol_library_manager.cpp.

References LIB_BUFFER::ClearDeletedBuffer(), FN_NORMALIZE_FLAGS, LIB_BUFFER::GetBuffers(), LIBRARY_MANAGER::GetFullURI(), PGM_BASE::GetLibraryManager(), LIB_SYMBOL::GetName(), getOriginalSymbols(), m_libs, Pgm(), SCH_IO_KICAD_LEGACY::PropBuffering, res, LIB_BUFFER::SaveBuffer(), LIB_SYMBOL::SetParent(), and SYMBOL.

◆ SetSymbolModified()

void SYMBOL_LIBRARY_MANAGER::SetSymbolModified ( const wxString & aSymbolName,
const wxString & aLibrary )

Definition at line 244 of file symbol_library_manager.cpp.

References LIB_BUFFER::GetBuffer(), and m_libs.

Referenced by SYMBOL_EDITOR_CONTROL::RenameSymbol().

◆ SymbolExists()

bool SYMBOL_LIBRARY_MANAGER::SymbolExists ( const wxString & aSymbolName,
const wxString & aLibrary ) const

Return true if symbol with a specific alias exists in library (either original one or buffered).

Definition at line 567 of file symbol_library_manager.cpp.

References SYMBOL_LIBRARY_ADAPTER::LoadSymbol(), m_frame, m_libs, and PROJECT_SCH::SymbolLibAdapter().

Referenced by SYMBOL_EDITOR_CONTROL::RenameSymbol().

◆ SymbolNameInUse()

bool SYMBOL_LIBRARY_MANAGER::SymbolNameInUse ( const wxString & aName,
const wxString & aLibrary )

Return true if the symbol name is already in use in the specified library.

Definition at line 591 of file symbol_library_manager.cpp.

References GetSymbolNames(), and UnescapeString().

Referenced by CheckForParentalChainConflicts(), CheckSavingIntoOwnInheritance(), and SYMBOL_EDITOR_CONTROL::RenameSymbol().

◆ UpdateLibraryBuffer()

bool SYMBOL_LIBRARY_MANAGER::UpdateLibraryBuffer ( const wxString & aLibrary)

Update the library buffer with a new version of the library.

Definition at line 778 of file symbol_library_manager.cpp.

References _, getLibraryBuffer(), and m_libs.

◆ UpdateSymbol()

bool SYMBOL_LIBRARY_MANAGER::UpdateSymbol ( LIB_SYMBOL * aSymbol,
const wxString & aLibrary )

Update the symbol buffer with a new version of the symbol.

The library buffer creates a copy of the symbol.

It is required to save the library to use the updated symbol in the schematic editor.

Definition at line 404 of file symbol_library_manager.cpp.

References LIB_BUFFER::CreateBuffer(), LIB_BUFFER::GetBuffer(), LIB_SYMBOL::GetLibId(), LIB_ID::GetLibItemName(), getLibraryBuffer(), LIB_SYMBOL::GetName(), BASE_SCREEN::SetContentModified(), and LIB_SYMBOL::SetLibId().

Referenced by LIB_SYMBOL_LIBRARY_MANAGER::CreateNewSymbol(), and SYMBOL_EDITOR_CONTROL::FlattenSymbol().

◆ UpdateSymbolAfterRename()

bool SYMBOL_LIBRARY_MANAGER::UpdateSymbolAfterRename ( LIB_SYMBOL * aSymbol,
const wxString & aOldSymbolName,
const wxString & aLibrary )

Update the symbol buffer with a new version of the symbol when the name has changed.

The old library buffer will be deleted and a new one created with the new name.

Definition at line 436 of file symbol_library_manager.cpp.

References LIB_BUFFER::GetBuffer(), getLibraryBuffer(), OnDataChanged(), and LIB_BUFFER::UpdateBuffer().

Referenced by SYMBOL_EDITOR_CONTROL::RenameSymbol(), and RevertSymbol().

Member Data Documentation

◆ m_frame

◆ m_libs

◆ m_logger

LIB_LOGGER* SYMBOL_LIBRARY_MANAGER::m_logger
protected

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