Symbol Library Editor: update node information on library sync

This commit is contained in:
Maciej Suminski 2018-01-10 12:04:34 +01:00
parent 12041551a1
commit c09cf252c6
4 changed files with 37 additions and 18 deletions

View File

@ -132,8 +132,22 @@ CMP_TREE_NODE_LIB_ID::CMP_TREE_NODE_LIB_ID( CMP_TREE_NODE* aParent, LIB_ALIAS* a
{
wxASSERT( aParent && aAlias );
Type = LIBID;
Parent = aParent;
Type = LIBID;
Parent = aParent;
Update( aAlias );
}
CMP_TREE_NODE_UNIT& CMP_TREE_NODE_LIB_ID::AddUnit( int aUnit )
{
CMP_TREE_NODE_UNIT* unit = new CMP_TREE_NODE_UNIT( this, aUnit );
Children.push_back( std::unique_ptr<CMP_TREE_NODE>( unit ) );
return *unit;
}
void CMP_TREE_NODE_LIB_ID::Update( LIB_ALIAS* aAlias )
{
Name = aAlias->GetName();
Desc = aAlias->GetDescription();
@ -165,24 +179,16 @@ CMP_TREE_NODE_LIB_ID::CMP_TREE_NODE_LIB_ID( CMP_TREE_NODE* aParent, LIB_ALIAS* a
SearchText += footprint.Lower();
}
Children.clear();
if( part && part->IsMulti() )
{
for( int u = 1; u <= part->GetUnitCount(); ++u )
{
AddUnit( u );
}
}
}
CMP_TREE_NODE_UNIT& CMP_TREE_NODE_LIB_ID::AddUnit( int aUnit )
{
CMP_TREE_NODE_UNIT* unit = new CMP_TREE_NODE_UNIT( this, aUnit );
Children.push_back( std::unique_ptr<CMP_TREE_NODE>( unit ) );
return *unit;
}
void CMP_TREE_NODE_LIB_ID::UpdateScore( EDA_COMBINED_MATCHER& aMatcher )
{
if( Score <= 0 )

View File

@ -202,6 +202,10 @@ public:
*/
CMP_TREE_NODE_LIB_ID( CMP_TREE_NODE* aParent, LIB_ALIAS* aAlias );
/**
* Update the node using data from a LIB_ALIAS object.
*/
void Update( LIB_ALIAS* aAlias );
/**
* Perform the actual search.

View File

@ -318,7 +318,11 @@ LIB_PART* LIB_MANAGER::GetBufferedPart( const wxString& aAlias, const wxString&
wxCHECK( alias, nullptr );
bufferedPart = new LIB_PART( *alias->GetPart(), nullptr );
libBuf.CreateBuffer( bufferedPart, new SCH_SCREEN( &m_frame.Kiway() ) );
} catch( IO_ERROR& e ) {}
}
catch( IO_ERROR& e )
{
bufferedPart = nullptr;
}
}
return bufferedPart;
@ -387,6 +391,7 @@ bool LIB_MANAGER::RevertPart( const wxString& aAlias, const wxString& aLibrary )
auto partBuf = it->second.GetBuffer( aAlias );
wxCHECK( partBuf, false );
partBuf->SetPart( new LIB_PART( *partBuf->GetOriginal() ) );
m_frame.SyncLibraries( false );
return true;
}
@ -587,6 +592,7 @@ LIB_MANAGER::LIB_BUFFER& LIB_MANAGER::getLibraryBuffer( const wxString& aLibrary
if( it != m_libs.end() )
return it->second;
// The requested buffer does not exist yet, so create one
auto ret = m_libs.emplace( aLibrary, LIB_BUFFER( aLibrary ) );
LIB_BUFFER& buf = ret.first->second;

View File

@ -113,13 +113,15 @@ int LIB_MANAGER_ADAPTER::GetLibrariesCount() const
void LIB_MANAGER_ADAPTER::updateLibrary( CMP_TREE_NODE_LIB& aLibNode )
{
if( m_libHashes.count( aLibNode.Name ) == 0 )
auto hashIt = m_libHashes.find( aLibNode.Name );
if( hashIt == m_libHashes.end() )
{
// add a new library
for( auto alias : m_libMgr->GetAliases( aLibNode.Name ) )
aLibNode.AddAlias( alias );
}
else
else if( hashIt->second != m_libMgr->GetLibraryHash( aLibNode.Name ) )
{
// update an existing libary
std::list<LIB_ALIAS*> aliases = m_libMgr->GetAliases( aLibNode.Name );
@ -135,7 +137,8 @@ void LIB_MANAGER_ADAPTER::updateLibrary( CMP_TREE_NODE_LIB& aLibNode )
if( aliasIt != aliases.end() )
{
// alias exists both in the component tree and the library manager,
// no need to update
// update only the node data
static_cast<CMP_TREE_NODE_LIB_ID*>( nodeIt->get() )->Update( *aliasIt );
aliases.erase( aliasIt );
++nodeIt;
}
@ -194,7 +197,7 @@ bool LIB_MANAGER_ADAPTER::GetAttr( wxDataViewItem const& aItem, unsigned int aCo
// mark modified libs with bold font
aAttr.SetBold( m_libMgr->IsLibraryModified( node->Name ) );
// mark current library with inverted colors
// mark the current library with inverted colors
if( node->Name == m_libMgr->GetCurrentLib() )
aAttr.SetColour( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) );
@ -207,7 +210,7 @@ bool LIB_MANAGER_ADAPTER::GetAttr( wxDataViewItem const& aItem, unsigned int aCo
// mark aliases with italic font
aAttr.SetItalic( !node->IsRoot );
// mark current library with inverted colors
// mark the current part with inverted colors
if( node->LibId == m_libMgr->GetCurrentLibId() )
aAttr.SetColour( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) );