Fix lib tree searches to handle searching on library names.
Fixes https://gitlab.com/kicad/code/kicad/issues/9981
This commit is contained in:
parent
e5d6ec836f
commit
724182abe4
|
@ -206,7 +206,7 @@ void LIB_TREE_NODE_LIB_ID::Update( LIB_TREE_ITEM* aItem )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LIB_TREE_NODE_LIB_ID::UpdateScore( EDA_COMBINED_MATCHER& aMatcher )
|
void LIB_TREE_NODE_LIB_ID::UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib )
|
||||||
{
|
{
|
||||||
if( m_Score <= 0 )
|
if( m_Score <= 0 )
|
||||||
return; // Leaf nodes without scores are out of the game.
|
return; // Leaf nodes without scores are out of the game.
|
||||||
|
@ -218,6 +218,12 @@ void LIB_TREE_NODE_LIB_ID::UpdateScore( EDA_COMBINED_MATCHER& aMatcher )
|
||||||
m_Normalized = true;
|
m_Normalized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !aLib.IsEmpty() && m_Parent->m_MatchName != aLib )
|
||||||
|
{
|
||||||
|
m_Score = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Keywords and description we only count if the match string is at
|
// Keywords and description we only count if the match string is at
|
||||||
// least two characters long. That avoids spurious, low quality
|
// least two characters long. That avoids spurious, low quality
|
||||||
// matches. Most abbreviations are at three characters long.
|
// matches. Most abbreviations are at three characters long.
|
||||||
|
@ -281,7 +287,7 @@ LIB_TREE_NODE_LIB_ID& LIB_TREE_NODE_LIB::AddItem( LIB_TREE_ITEM* aItem )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LIB_TREE_NODE_LIB::UpdateScore( EDA_COMBINED_MATCHER& aMatcher )
|
void LIB_TREE_NODE_LIB::UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib )
|
||||||
{
|
{
|
||||||
m_Score = 0;
|
m_Score = 0;
|
||||||
|
|
||||||
|
@ -291,13 +297,20 @@ void LIB_TREE_NODE_LIB::UpdateScore( EDA_COMBINED_MATCHER& aMatcher )
|
||||||
{
|
{
|
||||||
for( std::unique_ptr<LIB_TREE_NODE>& child: m_Children )
|
for( std::unique_ptr<LIB_TREE_NODE>& child: m_Children )
|
||||||
{
|
{
|
||||||
child->UpdateScore( aMatcher );
|
child->UpdateScore( aMatcher, aLib );
|
||||||
m_Score = std::max( m_Score, child->m_Score );
|
m_Score = std::max( m_Score, child->m_Score );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// No children; we are a leaf.
|
// No children; we are a leaf.
|
||||||
|
|
||||||
|
if( !aLib.IsEmpty() )
|
||||||
|
{
|
||||||
|
m_Score = m_MatchName == aLib ? 1000 : 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int found_pos = EDA_PATTERN_NOT_FOUND;
|
int found_pos = EDA_PATTERN_NOT_FOUND;
|
||||||
int matchers_fired = 0;
|
int matchers_fired = 0;
|
||||||
|
|
||||||
|
@ -331,9 +344,9 @@ LIB_TREE_NODE_LIB& LIB_TREE_NODE_ROOT::AddLib( wxString const& aName, wxString c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LIB_TREE_NODE_ROOT::UpdateScore( EDA_COMBINED_MATCHER& aMatcher )
|
void LIB_TREE_NODE_ROOT::UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib )
|
||||||
{
|
{
|
||||||
for( std::unique_ptr<LIB_TREE_NODE>& child: m_Children )
|
for( std::unique_ptr<LIB_TREE_NODE>& child: m_Children )
|
||||||
child->UpdateScore( aMatcher );
|
child->UpdateScore( aMatcher, aLib );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -224,10 +224,18 @@ void LIB_TREE_MODEL_ADAPTER::UpdateSearchString( const wxString& aSearch, bool a
|
||||||
|
|
||||||
while( tokenizer.HasMoreTokens() )
|
while( tokenizer.HasMoreTokens() )
|
||||||
{
|
{
|
||||||
const wxString term = tokenizer.GetNextToken().Lower();
|
wxString lib;
|
||||||
|
wxString term = tokenizer.GetNextToken().Lower();
|
||||||
|
|
||||||
|
if( term.Contains( ":" ) )
|
||||||
|
{
|
||||||
|
lib = term.BeforeFirst( ':' );
|
||||||
|
term = term.AfterFirst( ':' );
|
||||||
|
}
|
||||||
|
|
||||||
EDA_COMBINED_MATCHER matcher( term );
|
EDA_COMBINED_MATCHER matcher( term );
|
||||||
|
|
||||||
m_tree.UpdateScore( matcher );
|
m_tree.UpdateScore( matcher, lib );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tree.SortNodes();
|
m_tree.SortNodes();
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
*
|
*
|
||||||
* @param aMatcher an EDA_COMBINED_MATCHER initialized with the search term
|
* @param aMatcher an EDA_COMBINED_MATCHER initialized with the search term
|
||||||
*/
|
*/
|
||||||
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher ) = 0;
|
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib ) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize score to kLowestDefaultScore, recursively.
|
* Initialize score to kLowestDefaultScore, recursively.
|
||||||
|
@ -170,7 +170,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Do nothing, units just take the parent's score
|
* Do nothing, units just take the parent's score
|
||||||
*/
|
*/
|
||||||
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher ) override {}
|
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib ) override {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Perform the actual search.
|
* Perform the actual search.
|
||||||
*/
|
*/
|
||||||
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher ) override;
|
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib ) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@ -250,7 +250,7 @@ public:
|
||||||
*/
|
*/
|
||||||
LIB_TREE_NODE_LIB_ID& AddItem( LIB_TREE_ITEM* aItem );
|
LIB_TREE_NODE_LIB_ID& AddItem( LIB_TREE_ITEM* aItem );
|
||||||
|
|
||||||
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher ) override;
|
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib ) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ public:
|
||||||
*/
|
*/
|
||||||
LIB_TREE_NODE_LIB& AddLib( wxString const& aName, wxString const& aDesc );
|
LIB_TREE_NODE_LIB& AddLib( wxString const& aName, wxString const& aDesc );
|
||||||
|
|
||||||
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher ) override;
|
virtual void UpdateScore( EDA_COMBINED_MATCHER& aMatcher, const wxString& aLib ) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue