Library Editor: fixed dynamic updates

Duplicate entries were caused by multiple model assignment done by
CMP_TREE_MODEL_ADAPTER_BASE::AttachTo().
This commit is contained in:
Maciej Suminski 2017-11-17 11:44:16 +01:00
parent 891cf783fb
commit db4bd0c2db
2 changed files with 4 additions and 9 deletions

View File

@ -158,7 +158,6 @@ void CMP_TREE_MODEL_ADAPTER_BASE::UpdateSearchString( wxString const& aSearch )
m_tree.SortNodes(); m_tree.SortNodes();
Cleared(); Cleared();
AttachTo( m_widget );
ShowResults() || ShowPreselect() || ShowSingleLibrary(); ShowResults() || ShowPreselect() || ShowSingleLibrary();
} }
@ -289,7 +288,8 @@ unsigned int CMP_TREE_MODEL_ADAPTER_BASE::GetChildren(
{ {
auto node = ( aItem.IsOk() ? ToNode( aItem ) : &m_tree ); auto node = ( aItem.IsOk() ? ToNode( aItem ) : &m_tree );
if( node->Type != CMP_TREE_NODE::TYPE::LIBID || m_show_units ) if( node->Type != CMP_TREE_NODE::TYPE::LIBID
|| ( m_show_units && node->Type == CMP_TREE_NODE::TYPE::UNIT ) )
return IntoArray( *node, aChildren ); return IntoArray( *node, aChildren );
else else
return 0; return 0;

View File

@ -76,7 +76,7 @@ void LIB_MANAGER_ADAPTER::AddAliasList( const wxString& aNodeName,
bool LIB_MANAGER_ADAPTER::IsContainer( const wxDataViewItem& aItem ) const bool LIB_MANAGER_ADAPTER::IsContainer( const wxDataViewItem& aItem ) const
{ {
const CMP_TREE_NODE* node = ToNode( aItem ); const CMP_TREE_NODE* node = ToNode( aItem );
return node && node->Type == CMP_TREE_NODE::LIB; return node ? node->Type == CMP_TREE_NODE::LIB : true;
} }
@ -194,12 +194,7 @@ void LIB_MANAGER_ADAPTER::addAliases( CMP_TREE_NODE_LIB& aLibNode )
void LIB_MANAGER_ADAPTER::finishUpdate() void LIB_MANAGER_ADAPTER::finishUpdate()
{ {
m_tree.AssignIntrinsicRanks(); m_tree.AssignIntrinsicRanks();
#ifdef __WINDOWS__ m_tree.SortNodes();
// 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(); Resort();
} }