35 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
44 std::vector<LIB_TREE_NODE*> sort_buf;
50 for(
int i = 0; i <= max; ++i )
55 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
56 sort_buf.push_back( child.get() );
58 std::sort( sort_buf.begin(), sort_buf.end(),
61 return StrNumCmp( a->m_Name, b->m_Name, true ) > 0;
64 for(
int i = 0; i < (int) sort_buf.size(); ++i )
73 [&]( std::unique_ptr<LIB_TREE_NODE>& a, std::unique_ptr<LIB_TREE_NODE>& b )
75 return Compare( *a, *b, aUseScores );
78 for( std::unique_ptr<LIB_TREE_NODE>& node:
m_Children )
79 node->SortNodes( aUseScores );
109 else if( aNode2.
m_Name.StartsWith( wxT(
"-- " ) ) )
126 return reinterpret_cast<const void*
>( &aNode1 ) <
reinterpret_cast<const void*
>( &aNode2 );
131 : m_Parent( nullptr ),
133 m_IntrinsicRank( 0 ),
139 m_IsRecentlyUsedGroup( false ),
140 m_IsAlreadyPlacedGroup( false )
146 static void* locale =
nullptr;
147 static wxString namePrefix;
151 if(
Pgm().GetLocale() != locale )
153 namePrefix =
_(
"Unit" );
182 if( aFilter && !(*aFilter)(*
this) )
186 if( !aMatcher && aLib.IsEmpty() && ( !aFilter || (*aFilter)(*
this) ) )
221 m_Children.push_back( std::unique_ptr<LIB_TREE_NODE>( unit ) );
259 if( (
m_Score >= 0 || !aLib.IsEmpty() ) && currentScore > 0 )
266 if( aFilter && !(*aFilter)(*
this) )
270 if( !aMatcher && aLib.IsEmpty() && ( !aFilter || (*aFilter)(*
this) ) )
273 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
274 child->UpdateScore( aMatcher, aLib, aFilter );
279 wxString
const& aDesc )
294 m_Children.push_back( std::unique_ptr<LIB_TREE_NODE>( item ) );
302 int maxChildScore = 0;
307 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
309 child->UpdateScore( aMatcher, aLib, aFilter );
310 maxChildScore = std::max( maxChildScore, child->m_Score );
317 if( !aLib.IsEmpty() &&
m_Name.Lower().Matches( aLib ) )
327 if( maxChildScore <= 0 && ownScore > 0 )
329 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
331 if( !aFilter || (*aFilter)( *
this ) )
332 child->ForceScore( 1 );
334 maxChildScore = std::max( maxChildScore, child->m_Score );
340 if( !
m_Children.empty() && maxChildScore <= 0 )
344 if(
m_Children.empty() && !aMatcher && aLib.IsEmpty() && ( !aFilter || (*aFilter)(*
this) ) )
358 m_Children.push_back( std::unique_ptr<LIB_TREE_NODE>( lib ) );
366 [&]( std::unique_ptr<LIB_TREE_NODE>& aNode )
368 if( aRecentlyUsedGroup && aNode->m_IsRecentlyUsedGroup )
371 if( aAlreadyPlacedGroup && aNode->m_IsAlreadyPlacedGroup )
389 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
390 child->UpdateScore( aMatcher, aLib, aFilter );
int ScoreTerms(std::vector< SEARCH_TERM > &aWeightedTerms)
int SetLibItemName(const UTF8 &aLibItemName)
Override the library item name portion of the LIB_ID to aLibItemName.
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
A mix-in to provide polymorphism between items stored in libraries (symbols, aliases and footprints).
virtual wxString GetUnitReference(int aUnit)
For items with units, return an identifier for unit x.
virtual wxString GetLibNickname() const =0
virtual int GetSubUnitCount() const
For items with units, return the number of units.
virtual std::vector< SEARCH_TERM > GetSearchTerms()
virtual bool HasUnitDisplayName(int aUnit)
For items with units, return true if a display name is set for x.
virtual wxString GetFootprint()
For items with footprint fields.
virtual LIB_ID GetLIB_ID() const =0
virtual wxString GetDesc()=0
virtual bool IsRoot() const
For items having aliases, IsRoot() indicates the principal item.
virtual wxString GetName() const =0
virtual int GetPinCount()
The pin count for symbols or the unique pad count for footprints.
virtual wxString GetUnitDisplayName(int aUnit)
For items with units, return a display name for unit x.
virtual void GetChooserFields(std::map< wxString, wxString > &aColumnMap)
Retrieves a key/value map of the fields on this item that should be exposed to the library browser/ch...
void UpdateScore(EDA_COMBINED_MATCHER *aMatcher, const wxString &aLib, std::function< bool(LIB_TREE_NODE &aNode)> *aFilter) override
Perform the actual search.
LIB_TREE_NODE_ITEM(LIB_TREE_NODE_ITEM const &_)=delete
The addresses of CMP_TREE_NODEs are used as unique IDs for the wxDataViewModel, so don't let them be ...
LIB_TREE_NODE_UNIT & AddUnit(LIB_TREE_ITEM *aItem, int aUnit)
Add a new unit to the component and return it.
void Update(LIB_TREE_ITEM *aItem)
Update the node using data from a LIB_ALIAS object.
LIB_TREE_NODE_LIBRARY(LIB_TREE_NODE_LIBRARY const &_)=delete
The addresses of CMP_TREE_NODEs are used as unique IDs for the wxDataViewModel, so don't let them be ...
LIB_TREE_NODE_ITEM & AddItem(LIB_TREE_ITEM *aItem)
Construct a new alias node, add it to this library, and return it.
void UpdateScore(EDA_COMBINED_MATCHER *aMatcher, const wxString &aLib, std::function< bool(LIB_TREE_NODE &aNode)> *aFilter) override
Update the score for this part.
void RemoveGroup(bool aRecentlyUsedGroup, bool aAlreadyPlacedGroup)
Remove a library node from the root.
LIB_TREE_NODE_LIBRARY & AddLib(wxString const &aName, wxString const &aDesc)
Construct an empty library node, add it to the root, and return it.
void UpdateScore(EDA_COMBINED_MATCHER *aMatcher, const wxString &aLib, std::function< bool(LIB_TREE_NODE &aNode)> *aFilter) override
Update the score for this part.
LIB_TREE_NODE_ROOT()
Construct the root node.
void Clear()
Clear the tree.
Node type: unit of component.
LIB_TREE_NODE_UNIT(LIB_TREE_NODE_UNIT const &_)=delete
The addresses of CMP_TREE_NODEs are used as unique IDs for the wxDataViewModel, so don't let them be ...
void UpdateScore(EDA_COMBINED_MATCHER *aMatcher, const wxString &aLib, std::function< bool(LIB_TREE_NODE &aNode)> *aFilter) override
Update the score for this part.
Model class in the component selector Model-View-Adapter (mediated MVC) architecture.
void SortNodes(bool aUseScores)
Sort child nodes quickly and recursively (IntrinsicRanks must have been set).
static bool Compare(LIB_TREE_NODE const &aNode1, LIB_TREE_NODE const &aNode2, bool aUseScores)
Compare two nodes.
bool m_IsRecentlyUsedGroup
std::vector< SEARCH_TERM > m_SearchTerms
std::map< wxString, wxString > m_Fields
List of weighted search terms.
virtual void ResetScore()
Initialize scores recursively.
int m_IntrinsicRank
The rank of the item before any search terms are applied.
void AssignIntrinsicRanks(bool presorted=false)
Store intrinsic ranks on all children of this node.
virtual wxLocale * GetLocale()
Abstract pattern-matching tool and implementations.
PGM_BASE & Pgm()
The global program "get" accessor.
A structure for storing weighted search terms.