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_frame( aFrame ), m_symbolTable( aFrame.Prj().SchSymbolLibTable() )
|
||||||
{
|
{
|
||||||
m_adapter = LIB_MANAGER_ADAPTER::Create( this );
|
m_adapter = LIB_MANAGER_ADAPTER::Create( this );
|
||||||
m_adapter->ShowUnits( true );
|
m_adapter->ShowUnits( false );
|
||||||
Sync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ void LIB_MANAGER_ADAPTER::AddLibrary( const wxString& aLibNickname )
|
||||||
auto& lib_node = m_tree.AddLib( aLibNickname );
|
auto& lib_node = m_tree.AddLib( aLibNickname );
|
||||||
ItemAdded( wxDataViewItem( nullptr ), ToItem( &lib_node ) );
|
ItemAdded( wxDataViewItem( nullptr ), ToItem( &lib_node ) );
|
||||||
updateLibrary( lib_node );
|
updateLibrary( lib_node );
|
||||||
|
finishUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@ void LIB_MANAGER_ADAPTER::UpdateLibrary( const wxString& aLibraryName )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
updateLibrary( *(CMP_TREE_NODE_LIB*) node );
|
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 )
|
void LIB_MANAGER_ADAPTER::Sync( bool aForce )
|
||||||
{
|
{
|
||||||
|
wxBusyCursor cursor;
|
||||||
int libMgrHash = m_libMgr->GetHash();
|
int libMgrHash = m_libMgr->GetHash();
|
||||||
|
|
||||||
if( !aForce && m_lastSyncHash == libMgrHash )
|
if( !aForce && m_lastSyncHash == libMgrHash )
|
||||||
|
@ -113,8 +115,7 @@ void LIB_MANAGER_ADAPTER::Sync( bool aForce )
|
||||||
AddLibrary( libName );
|
AddLibrary( libName );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tree.AssignIntrinsicRanks();
|
finishUpdate();
|
||||||
Resort();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,12 +124,17 @@ void LIB_MANAGER_ADAPTER::updateLibrary( CMP_TREE_NODE_LIB& aLibNode )
|
||||||
if( m_libHashes.count( aLibNode.Name ) == 0 )
|
if( m_libHashes.count( aLibNode.Name ) == 0 )
|
||||||
{
|
{
|
||||||
// add a new library
|
// 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
|
else
|
||||||
{
|
{
|
||||||
// update an existing libary
|
// update an existing libary
|
||||||
#if 1
|
|
||||||
std::list<LIB_ALIAS*> aliases = m_libMgr->GetAliases( aLibNode.Name );
|
std::list<LIB_ALIAS*> aliases = m_libMgr->GetAliases( aLibNode.Name );
|
||||||
wxDataViewItem parent = ToItem( &aLibNode );
|
wxDataViewItem parent = ToItem( &aLibNode );
|
||||||
|
|
||||||
|
@ -162,16 +168,6 @@ void LIB_MANAGER_ADAPTER::updateLibrary( CMP_TREE_NODE_LIB& aLibNode )
|
||||||
auto& aliasNode = aLibNode.AddAlias( alias );
|
auto& aliasNode = aLibNode.AddAlias( alias );
|
||||||
ItemAdded( parent, ToItem( &aliasNode ) );
|
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();
|
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 )
|
void LIB_MANAGER_ADAPTER::addAliases( CMP_TREE_NODE_LIB& aLibNode )
|
||||||
{
|
{
|
||||||
wxDataViewItem parent = ToItem( &aLibNode );
|
}
|
||||||
|
|
||||||
for( auto alias : m_libMgr->GetAliases( aLibNode.Name ) )
|
|
||||||
{
|
void LIB_MANAGER_ADAPTER::finishUpdate()
|
||||||
auto& aliasNode = aLibNode.AddAlias( alias );
|
{
|
||||||
ItemAdded( parent, ToItem( &aliasNode ) );
|
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 addAliases( CMP_TREE_NODE_LIB& aLibNode );
|
||||||
|
|
||||||
|
void finishUpdate();
|
||||||
|
|
||||||
CMP_TREE_NODE* findLibrary( const wxString& aLibNickName );
|
CMP_TREE_NODE* findLibrary( const wxString& aLibNickName );
|
||||||
|
|
||||||
bool GetAttr( wxDataViewItem const& aItem, unsigned int aCol,
|
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
|
// Create widgets
|
||||||
wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
|
wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_libMgr->Sync();
|
||||||
m_tree = new COMPONENT_TREE( this, &SYMBOL_LIB_TABLE::GetGlobalLibTable(),
|
m_tree = new COMPONENT_TREE( this, &SYMBOL_LIB_TABLE::GetGlobalLibTable(),
|
||||||
m_libMgr->GetAdapter(), COMPONENT_TREE::SEARCH );
|
m_libMgr->GetAdapter(), COMPONENT_TREE::SEARCH );
|
||||||
|
|
||||||
boxSizer->Add( m_tree, 1, wxEXPAND | wxALL, 5 );
|
boxSizer->Add( m_tree, 1, wxEXPAND | wxALL, 5 );
|
||||||
|
|
||||||
SetSizer( boxSizer );
|
SetSizer( boxSizer );
|
||||||
|
|
Loading…
Reference in New Issue