Remove and re-add saved-as libraries when Syncing tree.
Also removes the aForce parameter as it was always true anyway. Fixes https://gitlab.com/kicad/code/kicad/issues/7357
This commit is contained in:
parent
8567739a7a
commit
bbb8173b61
|
@ -62,8 +62,8 @@
|
||||||
|
|
||||||
SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
|
SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
|
||||||
BASE_SCREEN( aParent, SCH_SCREEN_T ),
|
BASE_SCREEN( aParent, SCH_SCREEN_T ),
|
||||||
m_paper( wxT( "A4" ) ),
|
m_fileFormatVersionAtLoad( 0 ),
|
||||||
m_fileFormatVersionAtLoad( 0 )
|
m_paper( wxT( "A4" ) )
|
||||||
{
|
{
|
||||||
m_modification_sync = 0;
|
m_modification_sync = 0;
|
||||||
m_refCount = 0;
|
m_refCount = 0;
|
||||||
|
|
|
@ -900,7 +900,7 @@ wxString SYMBOL_EDIT_FRAME::getTargetLib() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SYMBOL_EDIT_FRAME::SyncLibraries( bool aShowProgress )
|
void SYMBOL_EDIT_FRAME::SyncLibraries( bool aShowProgress, const wxString& aForceRefresh )
|
||||||
{
|
{
|
||||||
LIB_ID selected;
|
LIB_ID selected;
|
||||||
|
|
||||||
|
@ -912,15 +912,19 @@ void SYMBOL_EDIT_FRAME::SyncLibraries( bool aShowProgress )
|
||||||
APP_PROGRESS_DIALOG progressDlg( _( "Loading Symbol Libraries" ), wxEmptyString,
|
APP_PROGRESS_DIALOG progressDlg( _( "Loading Symbol Libraries" ), wxEmptyString,
|
||||||
m_libMgr->GetAdapter()->GetLibrariesCount(), this );
|
m_libMgr->GetAdapter()->GetLibrariesCount(), this );
|
||||||
|
|
||||||
m_libMgr->Sync( true, [&]( int progress, int max, const wxString& libName )
|
m_libMgr->Sync( aForceRefresh,
|
||||||
{
|
[&]( int progress, int max, const wxString& libName )
|
||||||
progressDlg.Update( progress, wxString::Format( _( "Loading library \"%s\"" ),
|
{
|
||||||
libName ) );
|
progressDlg.Update( progress,
|
||||||
} );
|
wxString::Format( _( "Loading library '%s'" ), libName ) );
|
||||||
|
} );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_libMgr->Sync( true );
|
m_libMgr->Sync( aForceRefresh,
|
||||||
|
[&]( int progress, int max, const wxString& libName )
|
||||||
|
{
|
||||||
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_treePane )
|
if( m_treePane )
|
||||||
|
@ -1355,9 +1359,8 @@ bool SYMBOL_EDIT_FRAME::addLibTableEntry( const wxString& aLibFile, TABLE_SCOPE
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
catch( const IO_ERROR& ioe )
|
||||||
{
|
{
|
||||||
wxString msg;
|
wxString msg = aScope == GLOBAL_LIB_TABLE ? _( "Error saving global library table." )
|
||||||
msg.Printf( _( "Error saving %s symbol library table." ),
|
: _( "Error saving project library table." );
|
||||||
( aScope == GLOBAL_LIB_TABLE ) ? _( "global" ) : _( "project" ) );
|
|
||||||
|
|
||||||
wxMessageDialog dlg( this, msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
|
wxMessageDialog dlg( this, msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
|
||||||
dlg.SetExtendedMessage( ioe.What() );
|
dlg.SetExtendedMessage( ioe.What() );
|
||||||
|
@ -1411,9 +1414,8 @@ bool SYMBOL_EDIT_FRAME::replaceLibTableEntry( const wxString& aLibNickname,
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
catch( const IO_ERROR& ioe )
|
||||||
{
|
{
|
||||||
wxString msg;
|
wxString msg = isGlobalTable ? _( "Error saving global library table." )
|
||||||
msg.Printf( _( "Error saving %s symbol library table." ),
|
: _( "Error saving project library table." );
|
||||||
( isGlobalTable ) ? _( "global" ) : _( "project" ) );
|
|
||||||
|
|
||||||
wxMessageDialog dlg( this, msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
|
wxMessageDialog dlg( this, msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
|
||||||
dlg.SetExtendedMessage( ioe.What() );
|
dlg.SetExtendedMessage( ioe.What() );
|
||||||
|
|
|
@ -292,7 +292,7 @@ public:
|
||||||
* Synchronize the library manager to the symbol library table, and then the symbol tree
|
* Synchronize the library manager to the symbol library table, and then the symbol tree
|
||||||
* to the library manager. Optionally displays a progress dialog.
|
* to the library manager. Optionally displays a progress dialog.
|
||||||
*/
|
*/
|
||||||
void SyncLibraries( bool aShowProgress );
|
void SyncLibraries( bool aShowProgress, const wxString& aForceRefresh = wxEmptyString );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter, sort, and redisplay the library tree.
|
* Filter, sort, and redisplay the library tree.
|
||||||
|
|
|
@ -553,6 +553,7 @@ void SYMBOL_EDIT_FRAME::SaveLibraryAs()
|
||||||
m_treePane->GetLibTree()->RefreshLibTree();
|
m_treePane->GetLibTree()->RefreshLibTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SYMBOL_EDIT_FRAME::SaveSymbolAs()
|
void SYMBOL_EDIT_FRAME::SaveSymbolAs()
|
||||||
{
|
{
|
||||||
wxCHECK( getTargetLibId().IsValid(), /* void */ );
|
wxCHECK( getTargetLibId().IsValid(), /* void */ );
|
||||||
|
@ -1033,11 +1034,13 @@ bool SYMBOL_EDIT_FRAME::saveLibrary( const wxString& aLibrary, bool aNewFile )
|
||||||
{
|
{
|
||||||
bool resyncLibTree = false;
|
bool resyncLibTree = false;
|
||||||
wxString originalLibNickname = getTargetLib();
|
wxString originalLibNickname = getTargetLib();
|
||||||
|
wxString forceRefresh;
|
||||||
|
|
||||||
switch( type )
|
switch( type )
|
||||||
{
|
{
|
||||||
case SAVE_AS_HELPER::SAH_TYPE::REPLACE_TABLE_ENTRY:
|
case SAVE_AS_HELPER::SAH_TYPE::REPLACE_TABLE_ENTRY:
|
||||||
resyncLibTree = replaceLibTableEntry( originalLibNickname, fn.GetFullPath() );
|
resyncLibTree = replaceLibTableEntry( originalLibNickname, fn.GetFullPath() );
|
||||||
|
forceRefresh = originalLibNickname;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SAVE_AS_HELPER::SAH_TYPE::ADD_GLOBAL_TABLE_ENTRY:
|
case SAVE_AS_HELPER::SAH_TYPE::ADD_GLOBAL_TABLE_ENTRY:
|
||||||
|
@ -1056,7 +1059,7 @@ bool SYMBOL_EDIT_FRAME::saveLibrary( const wxString& aLibrary, bool aNewFile )
|
||||||
if( resyncLibTree )
|
if( resyncLibTree )
|
||||||
{
|
{
|
||||||
FreezeSearchTree();
|
FreezeSearchTree();
|
||||||
SyncLibraries( true );
|
SyncLibraries( true, forceRefresh );
|
||||||
ThawSearchTree();
|
ThawSearchTree();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,18 +45,13 @@ SYMBOL_LIBRARY_MANAGER::SYMBOL_LIBRARY_MANAGER( SYMBOL_EDIT_FRAME& aFrame ) :
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SYMBOL_LIBRARY_MANAGER::Sync( bool aForce,
|
void SYMBOL_LIBRARY_MANAGER::Sync( const wxString& aForceRefresh,
|
||||||
std::function<void( int, int, const wxString& )> aProgressCallback )
|
std::function<void( int, int, const wxString& )> aProgressCallback )
|
||||||
{
|
{
|
||||||
m_logger.Activate();
|
m_logger.Activate();
|
||||||
{
|
{
|
||||||
int libTableHash = symTable()->GetModifyHash();
|
getAdapter()->Sync( aForceRefresh, aProgressCallback );
|
||||||
|
m_syncHash = symTable()->GetModifyHash();
|
||||||
if( aForce || m_syncHash != libTableHash )
|
|
||||||
{
|
|
||||||
getAdapter()->Sync( aForce, aProgressCallback );
|
|
||||||
m_syncHash = libTableHash;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
m_logger.Deactivate();
|
m_logger.Deactivate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,11 +105,8 @@ public:
|
||||||
/**
|
/**
|
||||||
* Updates the #SYMBOL_LIBRARY_MANAGER data to synchronize with Symbol Library Table.
|
* Updates the #SYMBOL_LIBRARY_MANAGER data to synchronize with Symbol Library Table.
|
||||||
*/
|
*/
|
||||||
void Sync( bool aForce = false,
|
void Sync( const wxString& aForceRefresh,
|
||||||
std::function<void( int, int, const wxString& )> aProgressCallback
|
std::function<void( int, int, const wxString& )> aProgressCallback );
|
||||||
= []( int, int, const wxString& )
|
|
||||||
{
|
|
||||||
} );
|
|
||||||
|
|
||||||
int GetHash() const;
|
int GetHash() const;
|
||||||
|
|
||||||
|
|
|
@ -63,17 +63,12 @@ bool SYMBOL_TREE_SYNCHRONIZING_ADAPTER::IsContainer( const wxDataViewItem& aItem
|
||||||
|
|
||||||
#define PROGRESS_INTERVAL_MILLIS 120
|
#define PROGRESS_INTERVAL_MILLIS 120
|
||||||
|
|
||||||
void SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync( bool aForce,
|
void SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync( const wxString& aForceRefresh,
|
||||||
std::function<void( int, int, const wxString& )> aProgressCallback )
|
std::function<void( int, int, const wxString& )> aProgressCallback )
|
||||||
{
|
{
|
||||||
wxLongLong nextUpdate = wxGetUTCTimeMillis() + (PROGRESS_INTERVAL_MILLIS / 2);
|
wxLongLong nextUpdate = wxGetUTCTimeMillis() + (PROGRESS_INTERVAL_MILLIS / 2);
|
||||||
|
|
||||||
int libMgrHash = m_libMgr->GetHash();
|
m_lastSyncHash = m_libMgr->GetHash();
|
||||||
|
|
||||||
if( !aForce && m_lastSyncHash == libMgrHash )
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_lastSyncHash = libMgrHash;
|
|
||||||
int i = 0, max = GetLibrariesCount();
|
int i = 0, max = GetLibrariesCount();
|
||||||
|
|
||||||
// Process already stored libraries
|
// Process already stored libraries
|
||||||
|
@ -87,18 +82,19 @@ void SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync( bool aForce,
|
||||||
nextUpdate = wxGetUTCTimeMillis() + PROGRESS_INTERVAL_MILLIS;
|
nextUpdate = wxGetUTCTimeMillis() + PROGRESS_INTERVAL_MILLIS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// There is a bug in SYMBOL_LIBRARY_MANAGER::LibraryExists() that uses the buffered modified
|
// There is a bug in SYMBOL_LIBRARY_MANAGER::LibraryExists() that uses the buffered
|
||||||
// libraries before the symbol library table which prevents the library from being
|
// modified libraries before the symbol library table which prevents the library from
|
||||||
// removed from the tree control.
|
// being removed from the tree control.
|
||||||
if( !m_libMgr->LibraryExists( name, true )
|
if( !m_libMgr->LibraryExists( name, true )
|
||||||
|| !m_frame->Prj().SchSymbolLibTable()->HasLibrary( name, true )
|
|| !m_frame->Prj().SchSymbolLibTable()->HasLibrary( name, true )
|
||||||
|| ( m_frame->Prj().SchSymbolLibTable()->FindRow( name, true ) !=
|
|| m_frame->Prj().SchSymbolLibTable()->FindRow( name, true ) !=
|
||||||
m_frame->Prj().SchSymbolLibTable()->FindRow( name, false ) ) )
|
m_frame->Prj().SchSymbolLibTable()->FindRow( name, false )
|
||||||
|
|| name == aForceRefresh )
|
||||||
{
|
{
|
||||||
it = deleteLibrary( it );
|
it = deleteLibrary( it );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if( aForce || m_libMgr->GetLibraryHash( name ) != m_libHashes[name] )
|
else
|
||||||
{
|
{
|
||||||
updateLibrary( *(LIB_TREE_NODE_LIB*) it->get() );
|
updateLibrary( *(LIB_TREE_NODE_LIB*) it->get() );
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,8 +41,8 @@ public:
|
||||||
|
|
||||||
bool IsContainer( const wxDataViewItem& aItem ) const override;
|
bool IsContainer( const wxDataViewItem& aItem ) const override;
|
||||||
|
|
||||||
void Sync( bool aForce = false,
|
void Sync( const wxString& aForceRefresh,
|
||||||
std::function<void( int, int, const wxString&)> aProgressCallback = [](int, int, const wxString&){} );
|
std::function<void( int, int, const wxString&)> aProgressCallback );
|
||||||
|
|
||||||
int GetLibrariesCount() const override;
|
int GetLibrariesCount() const override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue