Library Editor: Windows fixes

This commit is contained in:
Maciej Suminski 2017-11-15 11:13:58 +01:00
parent 07c104af63
commit 891cf783fb
4 changed files with 28 additions and 23 deletions

View File

@ -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 );
}

View File

@ -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();
}

View File

@ -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,

View File

@ -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 );