Refresh lib trees after editing library tables.
Also make sure that we grab the library item descriptions from their source rather than just the cached tree copy. Fixes https://gitlab.com/kicad/code/kicad/issues/7875
This commit is contained in:
parent
fee3c41c40
commit
36259b1f6b
|
@ -982,7 +982,7 @@ void InvokeSchEditSymbolLibTable( KIWAY* aKiway, wxWindow *aParent )
|
||||||
currentLib = symbolEditor->GetCurLib();
|
currentLib = symbolEditor->GetCurLib();
|
||||||
|
|
||||||
// This prevents an ugly crash on OSX (https://bugs.launchpad.net/kicad/+bug/1765286)
|
// This prevents an ugly crash on OSX (https://bugs.launchpad.net/kicad/+bug/1765286)
|
||||||
symbolEditor->FreezeSearchTree();
|
symbolEditor->FreezeLibraryTree();
|
||||||
|
|
||||||
if( symbolEditor->HasLibModifications() )
|
if( symbolEditor->HasLibModifications() )
|
||||||
{
|
{
|
||||||
|
@ -995,7 +995,7 @@ void InvokeSchEditSymbolLibTable( KIWAY* aKiway, wxWindow *aParent )
|
||||||
case wxID_YES: symbolEditor->SaveAll(); break;
|
case wxID_YES: symbolEditor->SaveAll(); break;
|
||||||
case wxID_NO: symbolEditor->RevertAll(); break;
|
case wxID_NO: symbolEditor->RevertAll(); break;
|
||||||
default:
|
default:
|
||||||
case wxID_CANCEL: symbolEditor->ThawSearchTree(); return;
|
case wxID_CANCEL: symbolEditor->ThawLibraryTree(); return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1009,7 +1009,7 @@ void InvokeSchEditSymbolLibTable( KIWAY* aKiway, wxWindow *aParent )
|
||||||
if( dlg.ShowModal() == wxID_CANCEL )
|
if( dlg.ShowModal() == wxID_CANCEL )
|
||||||
{
|
{
|
||||||
if( symbolEditor )
|
if( symbolEditor )
|
||||||
symbolEditor->ThawSearchTree();
|
symbolEditor->ThawLibraryTree();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1053,7 +1053,8 @@ void InvokeSchEditSymbolLibTable( KIWAY* aKiway, wxWindow *aParent )
|
||||||
}
|
}
|
||||||
|
|
||||||
symbolEditor->SyncLibraries( true );
|
symbolEditor->SyncLibraries( true );
|
||||||
symbolEditor->ThawSearchTree();
|
symbolEditor->ThawLibraryTree();
|
||||||
|
symbolEditor->RefreshLibraryTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( symbolViewer )
|
if( symbolViewer )
|
||||||
|
|
|
@ -569,14 +569,14 @@ bool SYMBOL_EDIT_FRAME::IsSearchTreeShown()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SYMBOL_EDIT_FRAME::FreezeSearchTree()
|
void SYMBOL_EDIT_FRAME::FreezeLibraryTree()
|
||||||
{
|
{
|
||||||
m_treePane->Freeze();
|
m_treePane->Freeze();
|
||||||
m_libMgr->GetAdapter()->Freeze();
|
m_libMgr->GetAdapter()->Freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SYMBOL_EDIT_FRAME::ThawSearchTree()
|
void SYMBOL_EDIT_FRAME::ThawLibraryTree()
|
||||||
{
|
{
|
||||||
m_libMgr->GetAdapter()->Thaw();
|
m_libMgr->GetAdapter()->Thaw();
|
||||||
m_treePane->Thaw();
|
m_treePane->Thaw();
|
||||||
|
@ -955,6 +955,12 @@ void SYMBOL_EDIT_FRAME::RegenerateLibraryTree()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SYMBOL_EDIT_FRAME::RefreshLibraryTree()
|
||||||
|
{
|
||||||
|
m_treePane->GetLibTree()->RefreshLibTree();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SYMBOL_LIB_TABLE* SYMBOL_EDIT_FRAME::selectSymLibTable( bool aOptional )
|
SYMBOL_LIB_TABLE* SYMBOL_EDIT_FRAME::selectSymLibTable( bool aOptional )
|
||||||
{
|
{
|
||||||
// If no project is loaded, always work with the global table
|
// If no project is loaded, always work with the global table
|
||||||
|
|
|
@ -173,8 +173,8 @@ public:
|
||||||
void OnToggleSearchTree( wxCommandEvent& event );
|
void OnToggleSearchTree( wxCommandEvent& event );
|
||||||
|
|
||||||
bool IsSearchTreeShown();
|
bool IsSearchTreeShown();
|
||||||
void FreezeSearchTree();
|
void FreezeLibraryTree();
|
||||||
void ThawSearchTree();
|
void ThawLibraryTree();
|
||||||
|
|
||||||
void OnUpdatePartNumber( wxUpdateUIEvent& event );
|
void OnUpdatePartNumber( wxUpdateUIEvent& event );
|
||||||
|
|
||||||
|
@ -301,6 +301,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void RegenerateLibraryTree();
|
void RegenerateLibraryTree();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redisplay the library tree. Used after changing modified states, descriptions, etc.
|
||||||
|
*/
|
||||||
|
void RefreshLibraryTree();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow the symbol editor to install its preferences panel into the preferences dialog.
|
* Allow the symbol editor to install its preferences panel into the preferences dialog.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1072,9 +1072,9 @@ bool SYMBOL_EDIT_FRAME::saveLibrary( const wxString& aLibrary, bool aNewFile )
|
||||||
|
|
||||||
if( resyncLibTree )
|
if( resyncLibTree )
|
||||||
{
|
{
|
||||||
FreezeSearchTree();
|
FreezeLibraryTree();
|
||||||
SyncLibraries( true, forceRefresh );
|
SyncLibraries( true, forceRefresh );
|
||||||
ThawSearchTree();
|
ThawLibraryTree();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -237,7 +237,17 @@ void SYMBOL_TREE_SYNCHRONIZING_ADAPTER::GetValue( wxVariant& aVariant, wxDataVie
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if( m_frame->GetCurPart() && m_frame->GetCurPart()->GetLibId() == node->m_LibId )
|
if( m_frame->GetCurPart() && m_frame->GetCurPart()->GetLibId() == node->m_LibId )
|
||||||
|
{
|
||||||
node->m_Desc = m_frame->GetCurPart()->GetDescription();
|
node->m_Desc = m_frame->GetCurPart()->GetDescription();
|
||||||
|
}
|
||||||
|
else if( node->m_Type == LIB_TREE_NODE::LIB )
|
||||||
|
{
|
||||||
|
SYMBOL_LIBRARY_MANAGER& libMgr = m_frame->GetLibManager();
|
||||||
|
SYMBOL_LIB_TABLE_ROW* lib = libMgr.GetLibrary( node->m_LibId.GetLibNickname() );
|
||||||
|
|
||||||
|
if( lib )
|
||||||
|
node->m_Desc = lib->GetDescr();
|
||||||
|
}
|
||||||
|
|
||||||
aVariant = node->m_Desc;
|
aVariant = node->m_Desc;
|
||||||
|
|
||||||
|
|
|
@ -1083,7 +1083,10 @@ void InvokePcbLibTableEditor( KIWAY* aKiway, wxWindow* aCaller )
|
||||||
auto editor = (FOOTPRINT_EDIT_FRAME*) aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
auto editor = (FOOTPRINT_EDIT_FRAME*) aKiway->Player( FRAME_FOOTPRINT_EDITOR, false );
|
||||||
|
|
||||||
if( editor )
|
if( editor )
|
||||||
|
{
|
||||||
editor->SyncLibraryTree( true );
|
editor->SyncLibraryTree( true );
|
||||||
|
editor->RefreshLibraryTree();
|
||||||
|
}
|
||||||
|
|
||||||
auto viewer = (FOOTPRINT_VIEWER_FRAME*) aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
auto viewer = (FOOTPRINT_VIEWER_FRAME*) aKiway->Player( FRAME_FOOTPRINT_VIEWER, false );
|
||||||
|
|
||||||
|
|
|
@ -300,6 +300,9 @@ public:
|
||||||
*/
|
*/
|
||||||
void RegenerateLibraryTree();
|
void RegenerateLibraryTree();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redisplay the library tree. Used after changing modified states, descriptions, etc.
|
||||||
|
*/
|
||||||
void RefreshLibraryTree();
|
void RefreshLibraryTree();
|
||||||
|
|
||||||
///< Reload displayed items and sets view.
|
///< Reload displayed items and sets view.
|
||||||
|
|
|
@ -192,7 +192,16 @@ void FP_TREE_SYNCHRONIZING_ADAPTER::GetValue( wxVariant& aVariant, wxDataViewIte
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if( node->m_LibId == m_frame->GetLoadedFPID() && !m_frame->IsCurrentFPFromBoard() )
|
if( node->m_LibId == m_frame->GetLoadedFPID() && !m_frame->IsCurrentFPFromBoard() )
|
||||||
|
{
|
||||||
node->m_Desc = m_frame->GetBoard()->GetFirstFootprint()->GetDescription();
|
node->m_Desc = m_frame->GetBoard()->GetFirstFootprint()->GetDescription();
|
||||||
|
}
|
||||||
|
else if( node->m_Type == LIB_TREE_NODE::LIB )
|
||||||
|
{
|
||||||
|
const FP_LIB_TABLE_ROW* lib = GFootprintTable.FindRow( node->m_LibId.GetLibNickname() );
|
||||||
|
|
||||||
|
if( lib )
|
||||||
|
node->m_Desc = lib->GetDescr();
|
||||||
|
}
|
||||||
|
|
||||||
aVariant = node->m_Desc;
|
aVariant = node->m_Desc;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue