69 while( !loader.
Done() )
86 msg.Replace(
"\n",
"<BR>" );
96 for(
const std::pair<const wxString, LIB_BUFFER>& lib :
m_libs )
98 if( lib.second.IsModified() )
110 for(
const std::pair<const wxString, LIB_BUFFER>& lib :
m_libs )
111 hash += lib.second.GetHash();
119 const auto libBufIt =
m_libs.find( aLibrary );
121 if( libBufIt !=
m_libs.end() )
122 return libBufIt->second.GetHash();
127 return row ? std::hash<std::string>{}( aLibrary.ToStdString() +
136 for(
const wxString& libName :
symTable()->GetLogicalLibs() )
139 if(
GetLibrary( libName )->SchLibType() == SCH_IO_MGR::SCH_DATABASE )
161 msg.Printf(
_(
"Library '%s' not found in the Symbol Library Table." ), aLibrary );
170 SCH_IO_MGR::SCH_FILE_T aFileType )
172 wxCHECK( aFileType != SCH_IO_MGR::SCH_FILE_T::SCH_LEGACY &&
LibraryExists( aLibrary ),
false );
173 wxFileName fn( aFileName );
174 wxCHECK( !fn.FileExists() || fn.IsFileWritable(),
false );
181 auto it =
m_libs.find( aLibrary );
188 const auto& symbolBuffers = libBuf.
GetBuffers();
190 for(
const auto& symbolBuf : symbolBuffers )
192 if( !libBuf.
SaveBuffer( symbolBuf, aFileName, &*pi,
true ) )
200 wxFileName original, destination( aFileName );
211 if(
res && original == destination )
223 if( symbol->IsAlias() )
225 std::shared_ptr< LIB_SYMBOL > oldParent = symbol->
GetParent().lock();
227 wxCHECK_MSG( oldParent,
false,
228 wxString::Format( wxT(
"Derived symbol '%s' found with "
229 "undefined parent." ),
230 symbol->GetName() ) );
237 libParent =
new LIB_SYMBOL( *oldParent.get() );
238 pi->
SaveSymbol( aLibrary, libParent, &properties );
243 pi->
SaveSymbol( aLibrary, newSymbol, &properties );
245 else if( !pi->
LoadSymbol( aLibrary, symbol->GetName(), &properties ) )
275 auto it =
m_libs.find( aLibrary );
276 return it !=
m_libs.end() ? it->second.IsModified() :
false;
281 const wxString& aLibrary )
const
283 auto libIt =
m_libs.find( aLibrary );
285 if( libIt ==
m_libs.end() )
289 const std::shared_ptr<SYMBOL_LIBRARY_MANAGER::SYMBOL_BUFFER> symbolBuf = buf.
GetBuffer( aAlias );
290 return symbolBuf ? symbolBuf->IsModified() :
false;
295 const wxString& aLibrary )
297 auto libIt =
m_libs.find( aLibrary );
299 if( libIt ==
m_libs.end() )
303 std::shared_ptr<SYMBOL_LIBRARY_MANAGER::SYMBOL_BUFFER> symbolBuf = buf.
GetBuffer( aAlias );
305 wxCHECK( symbolBuf, );
307 symbolBuf->GetScreen()->SetContentModified();
313 auto libIt =
m_libs.find( aLibrary );
315 if( libIt ==
m_libs.end() )
318 for(
auto& symbolBuf : libIt->second.GetBuffers() )
331 const wxString& aLibrary )
const
333 auto libI =
m_libs.find( aLibrary );
335 if( libI ==
m_libs.end() )
338 auto symbolBuf = libI->second.GetBuffer( aAlias );
339 wxCHECK( symbolBuf,
false );
341 symbolBuf->GetScreen()->SetContentModified(
false );
364 std::list<LIB_SYMBOL*> ret;
367 auto libIt =
m_libs.find( aLibrary );
369 if( libIt !=
m_libs.end() )
371 for(
auto& symbolBuf : libIt->second.GetBuffers() )
373 ret.push_back( symbolBuf->GetSymbol() );
378 std::vector<LIB_SYMBOL*> aliases;
389 std::copy( aliases.begin(), aliases.end(), std::back_inserter( ret ) );
397 const wxString& aLibrary )
405 if( !bufferedSymbol )
412 if( symbol ==
nullptr )
420 std::shared_ptr< LIB_SYMBOL > parent = symbol->
GetParent().lock();
421 wxCHECK_MSG( parent,
nullptr,
422 wxString::Format(
"Derived symbol '%s' found with undefined parent.",
426 bufferedParent = libBuf.
GetSymbol( parent->GetName() );
428 if( !bufferedParent )
430 bufferedParent =
new LIB_SYMBOL( *parent.get() );
438 bufferedSymbol->
SetParent( bufferedParent );
446 msg.Printf(
_(
"Error loading symbol %s from library '%s'." ), aAlias, aLibrary );
448 bufferedSymbol =
nullptr;
452 return bufferedSymbol;
459 wxCHECK( !aAlias.IsEmpty(),
nullptr );
460 auto it =
m_libs.find( aLibrary );
461 wxCHECK( it !=
m_libs.end(),
nullptr );
464 auto symbolBuf = buf.
GetBuffer( aAlias );
465 return symbolBuf ? symbolBuf->GetScreen() :
nullptr;
472 wxCHECK( aSymbol,
false );
480 wxCHECK( bufferedSymbol,
false );
482 *bufferedSymbol = *aSymbol;
483 symbolBuf->GetScreen()->SetContentModified();
501 const wxString& aLibrary )
504 auto symbolBuf = libBuf.
GetBuffer( aOldName );
506 wxCHECK( symbolBuf,
false );
517 auto it =
m_libs.find( aLibrary );
522 auto symbolBuf = it->second.GetBuffer( aAlias );
523 wxCHECK( symbolBuf,
false );
525 return it->second.SaveBuffer( symbolBuf,
symTable() );
531 auto it =
m_libs.find( aLibrary );
534 return LIB_ID( aLibrary, aAlias );
536 auto symbolBuf = it->second.GetBuffer( aAlias );
537 wxCHECK( symbolBuf,
LIB_ID( aLibrary, aAlias ) );
538 LIB_SYMBOL original( *symbolBuf->GetOriginal() );
540 if( original.
GetName() != aAlias )
547 *symbolBuf->GetSymbol() = original;
557 auto it =
m_libs.find( aLibrary );
577 for(
const auto& lib :
m_libs )
579 if( !lib.second.IsModified() )
582 for(
const auto& buffer : lib.second.GetBuffers() )
584 if( !buffer->IsModified() )
587 RevertSymbol( lib.first, buffer->GetOriginal()->GetName() );
598 auto symbolBuf = libBuf.
GetBuffer( aAlias );
599 wxCHECK( symbolBuf,
false );
611 const wxString& aLibrary )
const
614 auto libIt =
m_libs.find( aLibrary );
616 if( libIt !=
m_libs.end() )
618 LIB_SYMBOL* symbol = libIt->second.GetSymbol( aAlias );
635 msg.Printf(
_(
"Cannot load symbol '%s' from library '%s'." ), aAlias, aLibrary );
645 auto libBufIt =
m_libs.find( aLibrary );
648 if( libBufIt !=
m_libs.end() )
649 return !!libBufIt->second.GetBuffer( aAlias );
660 return alias !=
nullptr;
666 if( aLibrary.IsEmpty() )
669 if(
m_libs.count( aLibrary ) > 0 )
678 wxString
name =
"New_Library";
685 for(
unsigned int i = 0; i < std::numeric_limits<unsigned int>::max(); ++i )
688 return name + wxString::Format(
"%u", i );
692 return wxEmptyString;
697 wxArrayString& aSymbolNames,
707 const wxString& aLibraryName )
723 wxFileName fn( aFilePath );
731 wxCHECK( aTable,
false );
740 if( schFileType == SCH_IO_MGR::SCH_FILE_UNKNOWN )
741 schFileType = SCH_IO_MGR::SCH_LEGACY;
749 wxCHECK( schFileType != SCH_IO_MGR::SCH_FILE_T::SCH_LEGACY,
false );
776 std::set<LIB_SYMBOL*> symbols;
781 wxArrayString aliases;
784 for(
const auto& aliasName : aliases )
787 symbols.insert( alias );
794 msg.Printf(
_(
"Cannot enumerate library '%s'." ), aLibrary );
803 const wxString& aLibrary )
805 auto it =
m_libs.find( aLibrary );
818 if( symbol->IsAlias() )
820 std::shared_ptr< LIB_SYMBOL > oldParent = symbol->
GetParent().lock();
822 wxCHECK_MSG( oldParent, buf,
823 wxString::Format(
"Derived symbol '%s' found with undefined parent.",
824 symbol->GetName() ) );
830 libParent =
new LIB_SYMBOL( *oldParent.get() );
838 else if( !buf.
GetSymbol( symbol->GetName() ) )
855 catch(
const std::exception& e)
857 wxLogError(
_(
"Error updating library buffer: %s" ), e.what() );
862 wxLogError(
_(
"Error updating library buffer: %s" ), e.What() );
867 wxLogError(
_(
"Error updating library buffer." ) );
878 std::unique_ptr<SCH_SCREEN> aScreen ) :
879 m_screen(
std::
move( aScreen ) ),
895 wxCHECK( m_symbol != aSymbol, );
901 if( m_original->GetLibId().GetLibNickname() != m_symbol->GetLibId().GetLibNickname() )
903 m_original->
SetLibId(
LIB_ID( m_symbol->GetLibId().GetLibNickname(),
904 m_original->GetLibId().GetLibItemName() ) );
911 wxCHECK( m_original != aSymbol, );
914 m_original = aSymbol;
917 if( m_original->GetLibId().GetLibNickname() != m_symbol->GetLibId().GetLibNickname() )
919 m_original->
SetLibId(
LIB_ID( m_symbol->GetLibId().GetLibNickname(),
920 m_original->GetLibId().GetLibItemName() ) );
927 return m_screen && m_screen->IsContentModified();
933 auto buf = GetBuffer( aAlias );
940 wxCHECK( symbol,
nullptr );
949 wxASSERT( aCopy->
GetLib() ==
nullptr );
950 std::unique_ptr<SCH_SCREEN> screen( aScreen );
951 auto symbolBuf = std::make_shared<SYMBOL_BUFFER>( aCopy, std::move( screen ) );
952 m_symbols.push_back( symbolBuf );
968 wxCHECK( aCopy && aSymbolBuf,
false );
970 LIB_SYMBOL* bufferedSymbol = aSymbolBuf->GetSymbol();
972 wxCHECK( bufferedSymbol,
false );
974 *bufferedSymbol = *aCopy;
983 auto symbolBufIt = std::find( m_symbols.begin(), m_symbols.end(), aSymbolBuf );
984 wxCHECK( symbolBufIt != m_symbols.end(),
false );
990 && ( removeChildSymbols( aSymbolBuf ) == 0 ) )
995 m_deleted.emplace_back( *symbolBufIt );
996 m_symbols.erase( symbolBufIt );
1006 wxCHECK( aSymbolBuf,
false );
1007 LIB_SYMBOL* libSymbol = aSymbolBuf->GetSymbol();
1008 LIB_SYMBOL* originalSymbol = aSymbolBuf->GetOriginal();
1009 wxCHECK( libSymbol && originalSymbol,
false );
1014 wxString errorMsg =
_(
"Error saving symbol %s to library '%s'." ) + wxS(
"\n%s" );
1036 std::shared_ptr< LIB_SYMBOL > bufferedParent = libSymbol->
GetParent().lock();
1038 wxCHECK( bufferedParent,
false );
1044 cachedParent =
new LIB_SYMBOL( *bufferedParent.get() );
1045 newCachedSymbol->
SetParent( cachedParent );
1046 result = aLibTable->
SaveSymbol( m_libName, cachedParent );
1048 result = aLibTable->
SaveSymbol( m_libName, newCachedSymbol );
1052 aSymbolBuf->SetOriginal( originalParent );
1053 originalSymbol =
new LIB_SYMBOL( *libSymbol );
1054 originalSymbol->
SetParent( originalParent );
1055 aSymbolBuf->SetOriginal( originalSymbol );
1059 newCachedSymbol->
SetParent( cachedParent );
1060 result = aLibTable->
SaveSymbol( m_libName, newCachedSymbol );
1063 auto originalBufferedParent = GetBuffer( bufferedParent->GetName() );
1064 wxCHECK( originalBufferedParent,
false );
1065 originalSymbol =
new LIB_SYMBOL( *libSymbol );
1066 originalSymbol->
SetParent( originalBufferedParent->GetSymbol() );
1067 aSymbolBuf->SetOriginal( originalSymbol );
1072 wxArrayString derivedSymbols;
1074 if( GetDerivedSymbolNames( libSymbol->
GetName(), derivedSymbols ) == 0 )
1078 aSymbolBuf->SetOriginal(
new LIB_SYMBOL( *libSymbol ) );
1084 aLibTable->
SaveSymbol( m_libName, parentSymbol );
1086 for(
auto& entry : derivedSymbols )
1088 std::shared_ptr<SYMBOL_BUFFER> symbol = GetBuffer( entry );
1090 wxCHECK2( symbol,
continue );
1093 derivedSymbol->
SetParent( parentSymbol );
1094 result = aLibTable->
SaveSymbol( m_libName, derivedSymbol );
1106 const wxString& aFileName,
1109 wxCHECK( aSymbolBuf,
false );
1110 LIB_SYMBOL* libSymbol = aSymbolBuf->GetSymbol();
1111 LIB_SYMBOL* originalSymbol = aSymbolBuf->GetOriginal();
1112 wxCHECK( libSymbol && originalSymbol,
false );
1113 wxCHECK( !aFileName.IsEmpty(),
false );
1115 wxString errorMsg =
_(
"Error saving symbol %s to library '%s'." ) + wxS(
"\n%s" );
1140 std::shared_ptr< LIB_SYMBOL > bufferedParent = libSymbol->
GetParent().lock();
1142 wxCHECK( bufferedParent,
false );
1148 cachedParent = aPlugin->
LoadSymbol( aFileName, bufferedParent->GetName() );
1157 cachedParent =
new LIB_SYMBOL( *bufferedParent.get() );
1158 newCachedSymbol->
SetParent( cachedParent );
1162 aPlugin->
SaveSymbol( aFileName, cachedParent, aBuffer ? &properties :
nullptr );
1173 aPlugin->
SaveSymbol( aFileName, newCachedSymbol, aBuffer ? &properties :
nullptr );
1183 aSymbolBuf->SetOriginal( originalParent );
1184 originalSymbol =
new LIB_SYMBOL( *libSymbol );
1185 originalSymbol->
SetParent( originalParent );
1186 aSymbolBuf->SetOriginal( originalSymbol );
1190 newCachedSymbol->
SetParent( cachedParent );
1194 aPlugin->
SaveSymbol( aFileName, newCachedSymbol, aBuffer ? &properties :
nullptr );
1203 auto originalBufferedParent = GetBuffer( bufferedParent->GetName() );
1204 wxCHECK( originalBufferedParent,
false );
1205 originalSymbol =
new LIB_SYMBOL( *libSymbol );
1206 originalSymbol->
SetParent( originalBufferedParent->GetSymbol() );
1207 aSymbolBuf->SetOriginal( originalSymbol );
1212 wxArrayString derivedSymbols;
1214 if( GetDerivedSymbolNames( libSymbol->
GetName(), derivedSymbols ) == 0 )
1219 aBuffer ? &properties :
nullptr );
1228 aSymbolBuf->SetOriginal(
new LIB_SYMBOL( *libSymbol ) );
1237 aPlugin->
SaveSymbol( aFileName, parentSymbol, aBuffer ? &properties :
nullptr );
1246 aSymbolBuf->SetOriginal(
new LIB_SYMBOL( *libSymbol ) );
1249 for(
const wxString& entry : derivedSymbols )
1251 std::shared_ptr<SYMBOL_BUFFER> symbol = GetBuffer( entry );
1253 wxCHECK2( symbol,
continue );
1256 derivedSymbol->
SetParent( parentSymbol );
1261 aBuffer ? &properties :
nullptr );
1278std::shared_ptr<SYMBOL_LIBRARY_MANAGER::SYMBOL_BUFFER>
1281 for( std::shared_ptr<SYMBOL_LIBRARY_MANAGER::SYMBOL_BUFFER> entry : m_symbols )
1283 if( entry->GetSymbol()->GetName() == aAlias )
1287 return std::shared_ptr<SYMBOL_BUFFER>(
nullptr );
1293 for(
auto& entry : m_symbols )
1295 if( entry->GetSymbol()->IsAlias() )
1300 wxCHECK( parent,
false );
1302 if( parent->GetName() == aParentName )
1314 for(
auto& entry : m_symbols )
1316 if( ( entry->GetSymbol()->IsAlias() && ( aFilter == SYMBOL_NAME_FILTER::ROOT_ONLY ) )
1317 || ( entry->GetSymbol()->IsRoot() && ( aFilter == SYMBOL_NAME_FILTER::DERIVED_ONLY ) ) )
1320 aSymbolNames.Add(
UnescapeString( entry->GetSymbol()->GetName() ) );
1326 wxArrayString& aList )
1328 wxCHECK( !aSymbolName.IsEmpty(), 0 );
1330 for(
auto& entry : m_symbols )
1332 if( entry->GetSymbol()->IsAlias() )
1337 wxCHECK2( parent,
continue );
1339 if( parent->GetName() == aSymbolName )
1341 aList.Add( entry->GetSymbol()->GetName() );
1343 GetDerivedSymbolNames( entry->GetSymbol()->GetName(), aList );
1348 return aList.GetCount();
1354 wxCHECK( aSymbolBuf, 0 );
1357 wxArrayString derivedSymbolNames;
1358 std::deque< std::shared_ptr<SYMBOL_BUFFER> >::iterator it;
1360 if( GetDerivedSymbolNames( aSymbolBuf->GetSymbol()->GetName(), derivedSymbolNames ) )
1362 for(
const wxString& symbolName : derivedSymbolNames )
1364 it = std::find_if( m_symbols.begin(), m_symbols.end(),
1365 [symbolName]( std::shared_ptr<SYMBOL_BUFFER>& buf )
1367 return buf->GetSymbol()->GetName() == symbolName;
1370 wxCHECK2( it != m_symbols.end(),
continue );
1372 m_deleted.emplace_back( *it );
1373 m_symbols.erase( it );
void SetContentModified(bool aModified=true)
void MessageSet(const wxString &message)
Add a message (in bold) to message list.
void AddHTML_Text(const wxString &message)
Add HTML text (without any change) to message list.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
virtual const wxString Problem() const
what was the problem?
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
A logical library item identifier and consists of various portions much like a URI.
int SetLibNickname(const UTF8 &aNickname)
Override the logical library name portion of the LIB_ID to aNickname.
const UTF8 & GetLibItemName() const
Define a library symbol object.
LIB_ID GetLibId() const override
void SetParent(LIB_SYMBOL *aParent=nullptr)
wxString GetName() const override
SYMBOL_LIB * GetLib() const
void SetLibId(const LIB_ID &aLibId)
LIB_SYMBOL_REF & GetParent()
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library table.
bool InsertRow(LIB_TABLE_ROW *aRow, bool doReplace=false)
Adds aRow if it does not already exist or if doReplace is true.
bool RemoveRow(const LIB_TABLE_ROW *aRow)
Removes a row from the table and frees the pointer.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
A progress reporter interface for use in multi-threaded environments.
virtual bool KeepRefreshing(bool aWait=false)=0
Update the UI (if any).
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
static const wxString ShowType(SCH_FILE_T aFileType)
Return a brief name for a plugin, given aFileType enum.
static SCH_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a symbol library using the file extension of aLibPath.
static const char * PropBuffering
The property used internally by the plugin to enable cache buffering which prevents the library file ...
Helper object to release a SCH_PLUGIN in the context of a potential thrown exception through its dest...
Base class that schematic file and library loading and saving plugins should derive from.
virtual void SaveSymbol(const wxString &aLibraryPath, const LIB_SYMBOL *aSymbol, const STRING_UTF8_MAP *aProperties=nullptr)
Write aSymbol to an existing library located at aLibraryPath.
virtual void DeleteSymbol(const wxString &aLibraryPath, const wxString &aSymbolName, const STRING_UTF8_MAP *aProperties=nullptr)
Delete the entire LIB_SYMBOL associated with aAliasName from the library aLibraryPath.
virtual void SaveLibrary(const wxString &aFileName, const STRING_UTF8_MAP *aProperties=nullptr)
virtual LIB_SYMBOL * LoadSymbol(const wxString &aLibraryPath, const wxString &aPartName, const STRING_UTF8_MAP *aProperties=nullptr)
Load a LIB_SYMBOL object having aPartName from the aLibraryPath containing a library format that this...
A name/value tuple with unique names and optional values.
bool Done()
Returns a string containing any errors generated during the load.
const wxString & GetErrors() const
Represents a pair of <nickname, loaded parts list>
void Start()
Spins up threads to load all the libraries in m_nicknames.
bool Join()
Finalizes the threads and combines the output into the target output map.
LIB_SYMBOL * GetSymbol(const wxString &aAlias) const
Create a new buffer to store a symbol. LIB_BUFFER takes ownership of aCopy.
void ClearDeletedBuffer()
Save stored modifications to Symbol Lib Table.
int removeChildSymbols(std::shared_ptr< SYMBOL_BUFFER > &aSymbolBuf)
Remove all symbols derived from aParent from the library buffer.
bool HasDerivedSymbols(const wxString &aParentName) const
Check to see any symbols in the buffer are derived from a parent named aParentName.
bool SaveBuffer(std::shared_ptr< SYMBOL_BUFFER > aSymbolBuf, SYMBOL_LIB_TABLE *aLibTable)
Save stored modifications using a plugin.
const std::deque< std::shared_ptr< SYMBOL_BUFFER > > & GetBuffers() const
std::shared_ptr< SYMBOL_BUFFER > GetBuffer(const wxString &aAlias) const
Return all buffered symbols.
bool UpdateBuffer(std::shared_ptr< SYMBOL_BUFFER > aSymbolBuf, LIB_SYMBOL *aCopy)
bool DeleteBuffer(std::shared_ptr< SYMBOL_BUFFER > aSymbolBuf)
void GetSymbolNames(wxArrayString &aSymbolNames, SYMBOL_NAME_FILTER aFilter=SYMBOL_NAME_FILTER::ALL)
Fetch a list of root symbols names from the library buffer.
bool CreateBuffer(LIB_SYMBOL *aCopy, SCH_SCREEN *aScreen)
Update the buffered symbol with the contents of aCopy.
size_t GetDerivedSymbolNames(const wxString &aSymbolName, wxArrayString &aList)
Fetch all of the symbols derived from a aSymbolName into aList.
SYMBOL_BUFFER(LIB_SYMBOL *aSymbol=nullptr, std::unique_ptr< SCH_SCREEN > aScreen=nullptr)
void SetOriginal(LIB_SYMBOL *aSymbol)
void SetSymbol(LIB_SYMBOL *aSymbol)
LIB_SYMBOL * GetBufferedSymbol(const wxString &aAlias, const wxString &aLibrary)
Return the symbol copy from the buffer.
bool UpdateSymbolAfterRename(LIB_SYMBOL *aSymbol, const wxString &oldAlias, const wxString &aLibrary)
Update the symbol buffer with a new version of the symbol when the name has changed.
bool IsLibraryReadOnly(const wxString &aLibrary) const
Return true if the library is stored in a read-only file.
bool addLibrary(const wxString &aFilePath, bool aCreate, SYMBOL_LIB_TABLE *aTable)
Return the current Symbol Library Table.
bool ClearSymbolModified(const wxString &aAlias, const wxString &aLibrary) const
Clear the modified flag for a symbol.
bool LibraryExists(const wxString &aLibrary, bool aCheckEnabled=false) const
Return true if library exists.
size_t GetLibraryCount() const
bool ClearLibraryModified(const wxString &aLibrary) const
Clear the modified flag for all symbols in a library.
LIB_SYMBOL * GetAlias(const wxString &aAlias, const wxString &aLibrary) const
Return either an alias of a working LIB_SYMBOL copy, or alias of the original symbol if there is no w...
SCH_SCREEN * GetScreen(const wxString &aAlias, const wxString &aLibrary)
Return the screen used to edit a specific symbol.
bool IsLibraryModified(const wxString &aLibrary) const
Return true if library has unsaved modifications.
wxArrayString GetLibraryNames() const
Return the array of library names.
void SetSymbolModified(const wxString &aAlias, const wxString &aLibrary)
bool SymbolExists(const wxString &aAlias, const wxString &aLibrary) const
Return true if symbol with a specific alias exists in library (either original one or buffered).
wxString GetUniqueLibraryName() const
Return a library name that is not currently in use.
bool HasModifications() const
bool RemoveSymbol(const wxString &aName, const wxString &aLibrary)
Remove the symbol from the symbol buffer.
static wxString getLibraryName(const wxString &aFilePath)
Helper function to add either existing or create new library.
LIB_BUFFER & getLibraryBuffer(const wxString &aLibrary)
Return an existing library buffer or creates one to using Symbol Library Table to get the original da...
virtual void OnDataChanged() const
Extract library name basing on the file name.
bool IsSymbolModified(const wxString &aAlias, const wxString &aLibrary) const
Return true if symbol has unsaved modifications.
bool IsLibraryLoaded(const wxString &aLibrary) const
Return true if the library was successfully loaded.
SYMBOL_LIB_TABLE * symTable() const
Class to store a working copy of a LIB_SYMBOL object and editor context.
virtual ~SYMBOL_LIBRARY_MANAGER()
bool RevertLibrary(const wxString &aLibrary)
Revert unsaved changes for a symbolicular library.
void GetSymbolNames(const wxString &aLibName, wxArrayString &aSymbolNames, SYMBOL_NAME_FILTER aFilter=SYMBOL_NAME_FILTER::ALL)
std::set< LIB_SYMBOL * > getOriginalSymbols(const wxString &aLibrary)
Return a set of LIB_SYMBOL objects belonging to the original library.
int GetLibraryHash(const wxString &aLibrary) const
Return a library hash value to determine if it has changed.
void Preload(PROGRESS_REPORTER &aReporter)
Preloads all symbol libraries in the symbol library table using SYMBOL_ASYNC_LOADER.
bool RevertAll()
Revert all pending changes.
SYMBOL_LIBRARY_MANAGER(SCH_BASE_FRAME &aFrame)
LIB_ID RevertSymbol(const wxString &aAlias, const wxString &aLibrary)
Revert unsaved changes for a symbolicular symbol.
SYMBOL_LIB_TABLE_ROW * GetLibrary(const wxString &aLibrary) const
Find a single library within the (aggregate) library table.
SCH_BASE_FRAME & m_frame
Parent frame.
std::list< LIB_SYMBOL * > GetAliases(const wxString &aLibrary) const
bool UpdateSymbol(LIB_SYMBOL *aSymbol, const wxString &aLibrary)
Update the symbol buffer with a new version of the symbol.
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.
bool HasDerivedSymbols(const wxString &aSymbolName, const wxString &aLibraryName)
Check if symbol aSymbolName in library aLibraryName is a root symbol that has derived symbols.
std::map< wxString, LIB_BUFFER > m_libs
bool UpdateLibraryBuffer(const wxString &aLibrary)
Update the library buffer with a new version of the library.
bool FlushSymbol(const wxString &aAlias, const wxString &aLibrary)
Save symbol changes to the library copy used by the schematic editor.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_PLUGIN obje...
void LoadSymbolLib(std::vector< LIB_SYMBOL * > &aAliasList, const wxString &aNickname, bool aPowerSymbolsOnly=false)
void DeleteSymbol(const wxString &aNickname, const wxString &aSymbolName)
Deletes the aSymbolName from the library given by aNickname.
bool IsSymbolLibWritable(const wxString &aNickname)
Return true if the library given by aNickname is writable.
bool IsSymbolLibLoaded(const wxString &aNickname)
Return true if the library given by aNickname was successfully loaded.
void CreateSymbolLib(const wxString &aNickname)
void EnumerateSymbolLib(const wxString &aNickname, wxArrayString &aAliasNames, bool aPowerSymbolsOnly=false)
Return a list of symbol alias names contained within the library given by aNickname.
LIB_SYMBOL * LoadSymbol(const wxString &aNickname, const wxString &aName)
Load a LIB_SYMBOL having aName from the library given by aNickname.
SAVE_T SaveSymbol(const wxString &aNickname, const LIB_SYMBOL *aSymbol, bool aOverwrite=true)
Write aSymbol to an existing library given by aNickname.
SAVE_T
The set of return values from SaveSymbol() below.
SYMBOL_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an SYMBOL_LIB_TABLE_ROW if aNickName is found in this table or in any chained fallBack table f...
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
wxString NormalizePath(const wxFileName &aFilePath, const ENV_VAR_MAP *aEnvVars, const wxString &aProjectPath)
Normalize a file path to an environmental variable, if possible.
#define THROW_IO_ERROR(msg)
std::shared_ptr< LIB_SYMBOL > LIB_SYMBOL_SPTR
shared pointer to LIB_SYMBOL
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
wxString UnescapeString(const wxString &aSource)
Definition for symbol library class.
#define FN_NORMALIZE_FLAGS
Default flags to pass to wxFileName::Normalize().