Fix library save bug in legacy schematic I/O plugin.
Add the ability to save empty symbol library file for caching and empty schematic. Remove check for existing symbol in cache populating routine. Just perform a complete rebuild of the cache library and overwrite the existing one. Fixes lp:1663871 https://bugs.launchpad.net/kicad/+bug/1663871
This commit is contained in:
parent
3f1bcf5be8
commit
d5bf465dc6
|
@ -62,10 +62,10 @@ bool SCH_EDIT_FRAME::CreateArchiveLibrary( const wxString& aFileName )
|
||||||
SCH_SCREENS screens;
|
SCH_SCREENS screens;
|
||||||
PART_LIBS* libs = Prj().SchLibs();
|
PART_LIBS* libs = Prj().SchLibs();
|
||||||
|
|
||||||
std::unique_ptr<PART_LIB> libCache( new PART_LIB( LIBRARY_TYPE_EESCHEMA, aFileName ) );
|
std::unique_ptr<PART_LIB> cacheLib( new PART_LIB( LIBRARY_TYPE_EESCHEMA, aFileName ) );
|
||||||
|
|
||||||
libCache->SetCache();
|
cacheLib->SetCache();
|
||||||
libCache->EnableBuffering();
|
cacheLib->EnableBuffering();
|
||||||
|
|
||||||
/* Examine all screens (not hierarchical sheets) used in the schematic and build a
|
/* Examine all screens (not hierarchical sheets) used in the schematic and build a
|
||||||
* library of unique symbols found in all screens. Complex hierarchies are not a
|
* library of unique symbols found in all screens. Complex hierarchies are not a
|
||||||
|
@ -79,36 +79,31 @@ bool SCH_EDIT_FRAME::CreateArchiveLibrary( const wxString& aFileName )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
|
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
|
||||||
|
LIB_PART* part = NULL;
|
||||||
|
|
||||||
// If not already saved in the new cache, add it.
|
try
|
||||||
if( !libCache->FindAlias( component->GetLibId().GetLibItemName() ) )
|
|
||||||
{
|
{
|
||||||
LIB_PART* part = NULL;
|
part = libs->FindLibPart( component->GetLibId() );
|
||||||
|
|
||||||
try
|
if( part )
|
||||||
{
|
{
|
||||||
part = libs->FindLibPart( component->GetLibId() );
|
// AddPart() does first clone the part before adding.
|
||||||
|
cacheLib->AddPart( part );
|
||||||
if( part )
|
|
||||||
{
|
|
||||||
// AddPart() does first clone the part before adding.
|
|
||||||
libCache->AddPart( part );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( ... /* IO_ERROR ioe */ )
|
|
||||||
{
|
|
||||||
msg.Printf( _( "Failed to add symbol %s to library file '%s'" ),
|
|
||||||
wxString( component->GetLibId().GetLibItemName() ), aFileName );
|
|
||||||
DisplayError( this, msg );
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch( ... /* IO_ERROR ioe */ )
|
||||||
|
{
|
||||||
|
msg.Printf( _( "Failed to add symbol %s to library file '%s'" ),
|
||||||
|
wxString( component->GetLibId().GetLibItemName() ), aFileName );
|
||||||
|
DisplayError( this, msg );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
libCache->Save( false );
|
cacheLib->Save( false );
|
||||||
}
|
}
|
||||||
catch( ... /* IO_ERROR ioe */ )
|
catch( ... /* IO_ERROR ioe */ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -3527,20 +3527,20 @@ bool SCH_LEGACY_PLUGIN::DeleteSymbolLib( const wxString& aLibraryPath,
|
||||||
|
|
||||||
void SCH_LEGACY_PLUGIN::SaveLibrary( const wxString& aLibraryPath, const PROPERTIES* aProperties )
|
void SCH_LEGACY_PLUGIN::SaveLibrary( const wxString& aLibraryPath, const PROPERTIES* aProperties )
|
||||||
{
|
{
|
||||||
if( m_cache )
|
if( !m_cache )
|
||||||
|
m_cache = new SCH_LEGACY_PLUGIN_CACHE( aLibraryPath );
|
||||||
|
|
||||||
|
wxString oldFileName = m_cache->GetFileName();
|
||||||
|
|
||||||
|
if( !m_cache->IsFile( aLibraryPath ) )
|
||||||
{
|
{
|
||||||
wxString oldFileName = m_cache->GetFileName();
|
m_cache->SetFileName( aLibraryPath );
|
||||||
|
|
||||||
if( !m_cache->IsFile( aLibraryPath ) )
|
|
||||||
{
|
|
||||||
m_cache->SetFileName( aLibraryPath );
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is a forced save.
|
|
||||||
m_cache->SetModified();
|
|
||||||
m_cache->Save( writeDocFile( aProperties ) );
|
|
||||||
m_cache->SetFileName( oldFileName );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is a forced save.
|
||||||
|
m_cache->SetModified();
|
||||||
|
m_cache->Save( writeDocFile( aProperties ) );
|
||||||
|
m_cache->SetFileName( oldFileName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue