Library Editor: Windows fixes
This commit is contained in:
parent
07c104af63
commit
891cf783fb
|
@ -38,8 +38,7 @@ LIB_MANAGER::LIB_MANAGER( LIB_EDIT_FRAME& aFrame )
|
|||
: m_frame( aFrame ), m_symbolTable( aFrame.Prj().SchSymbolLibTable() )
|
||||
{
|
||||
m_adapter = LIB_MANAGER_ADAPTER::Create( this );
|
||||
m_adapter->ShowUnits( true );
|
||||
Sync();
|
||||
m_adapter->ShowUnits( false );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ void LIB_MANAGER_ADAPTER::AddLibrary( const wxString& aLibNickname )
|
|||
auto& lib_node = m_tree.AddLib( aLibNickname );
|
||||
ItemAdded( wxDataViewItem( nullptr ), ToItem( &lib_node ) );
|
||||
updateLibrary( lib_node );
|
||||
finishUpdate();
|
||||
}
|
||||
|
||||
|
||||
|
@ -61,7 +62,7 @@ void LIB_MANAGER_ADAPTER::UpdateLibrary( const wxString& aLibraryName )
|
|||
return;
|
||||
|
||||
updateLibrary( *(CMP_TREE_NODE_LIB*) node );
|
||||
Resort();
|
||||
finishUpdate();
|
||||
}
|
||||
|
||||
|
||||
|
@ -81,6 +82,7 @@ bool LIB_MANAGER_ADAPTER::IsContainer( const wxDataViewItem& aItem ) const
|
|||
|
||||
void LIB_MANAGER_ADAPTER::Sync( bool aForce )
|
||||
{
|
||||
wxBusyCursor cursor;
|
||||
int libMgrHash = m_libMgr->GetHash();
|
||||
|
||||
if( !aForce && m_lastSyncHash == libMgrHash )
|
||||
|
@ -113,8 +115,7 @@ void LIB_MANAGER_ADAPTER::Sync( bool aForce )
|
|||
AddLibrary( libName );
|
||||
}
|
||||
|
||||
m_tree.AssignIntrinsicRanks();
|
||||
Resort();
|
||||
finishUpdate();
|
||||
}
|
||||
|
||||
|
||||
|
@ -123,12 +124,17 @@ void LIB_MANAGER_ADAPTER::updateLibrary( CMP_TREE_NODE_LIB& aLibNode )
|
|||
if( m_libHashes.count( aLibNode.Name ) == 0 )
|
||||
{
|
||||
// add a new library
|
||||
addAliases( aLibNode );
|
||||
wxDataViewItem parent = ToItem( &aLibNode );
|
||||
|
||||
for( auto alias : m_libMgr->GetAliases( aLibNode.Name ) )
|
||||
{
|
||||
auto& aliasNode = aLibNode.AddAlias( alias );
|
||||
ItemAdded( parent, ToItem( &aliasNode ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// update an existing libary
|
||||
#if 1
|
||||
std::list<LIB_ALIAS*> aliases = m_libMgr->GetAliases( aLibNode.Name );
|
||||
wxDataViewItem parent = ToItem( &aLibNode );
|
||||
|
||||
|
@ -162,16 +168,6 @@ void LIB_MANAGER_ADAPTER::updateLibrary( CMP_TREE_NODE_LIB& aLibNode )
|
|||
auto& aliasNode = aLibNode.AddAlias( alias );
|
||||
ItemAdded( parent, ToItem( &aliasNode ) );
|
||||
}
|
||||
#else
|
||||
// Bruteforce approach - remove everything and rebuild the branch
|
||||
wxDataViewItem parent = ToItem( &aLibNode );
|
||||
|
||||
for( const auto& node : aLibNode.Children )
|
||||
ItemDeleted( parent, ToItem( node.get() ) );
|
||||
|
||||
aLibNode.Children.clear();
|
||||
addAliases( aLibNode );
|
||||
#endif
|
||||
}
|
||||
|
||||
aLibNode.AssignIntrinsicRanks();
|
||||
|
@ -192,13 +188,19 @@ CMP_TREE_NODE::PTR_VECTOR::iterator LIB_MANAGER_ADAPTER::deleteLibrary(
|
|||
|
||||
void LIB_MANAGER_ADAPTER::addAliases( CMP_TREE_NODE_LIB& aLibNode )
|
||||
{
|
||||
wxDataViewItem parent = ToItem( &aLibNode );
|
||||
|
||||
for( auto alias : m_libMgr->GetAliases( aLibNode.Name ) )
|
||||
{
|
||||
auto& aliasNode = aLibNode.AddAlias( alias );
|
||||
ItemAdded( parent, ToItem( &aliasNode ) );
|
||||
}
|
||||
|
||||
|
||||
void LIB_MANAGER_ADAPTER::finishUpdate()
|
||||
{
|
||||
m_tree.AssignIntrinsicRanks();
|
||||
#ifdef __WINDOWS__
|
||||
// Normally one would call Item{Added,Changed,Deleted}() to notify the view
|
||||
// about changes, but ItemAdded() causes duplicate entries on Windows.
|
||||
// The only sensible way is to call Cleared() that rebuilds the model.
|
||||
Cleared();
|
||||
#endif /* __WINDOWS__ */
|
||||
Resort();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -55,6 +55,8 @@ protected:
|
|||
|
||||
void addAliases( CMP_TREE_NODE_LIB& aLibNode );
|
||||
|
||||
void finishUpdate();
|
||||
|
||||
CMP_TREE_NODE* findLibrary( const wxString& aLibNickName );
|
||||
|
||||
bool GetAttr( wxDataViewItem const& aItem, unsigned int aCol,
|
||||
|
|
|
@ -38,8 +38,10 @@ CMP_TREE_PANE::CMP_TREE_PANE( LIB_EDIT_FRAME* aParent, LIB_MANAGER* aLibMgr )
|
|||
// Create widgets
|
||||
wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_libMgr->Sync();
|
||||
m_tree = new COMPONENT_TREE( this, &SYMBOL_LIB_TABLE::GetGlobalLibTable(),
|
||||
m_libMgr->GetAdapter(), COMPONENT_TREE::SEARCH );
|
||||
|
||||
boxSizer->Add( m_tree, 1, wxEXPAND | wxALL, 5 );
|
||||
|
||||
SetSizer( boxSizer );
|
||||
|
|
Loading…
Reference in New Issue