35 std::vector<LIB_TREE_NODE*> sort_buf;
41 for(
int i = 0; i <= max; ++i )
46 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
47 sort_buf.push_back( child.get() );
49 std::sort( sort_buf.begin(), sort_buf.end(),
52 return StrNumCmp( a->m_Name, b->m_Name, true ) > 0;
55 for(
int i = 0; i < (int) sort_buf.size(); ++i )
64 [&]( std::unique_ptr<LIB_TREE_NODE>& a, std::unique_ptr<LIB_TREE_NODE>& b )
66 return Compare( *a, *b, aUseScores );
69 for( std::unique_ptr<LIB_TREE_NODE>& node:
m_Children )
70 node->SortNodes( aUseScores );
100 else if( aNode2.
m_Name.StartsWith( wxT(
"-- " ) ) )
117 return reinterpret_cast<const void*
>( &aNode1 ) <
reinterpret_cast<const void*
>( &aNode2 );
122 : m_Parent( nullptr ),
124 m_IntrinsicRank( 0 ),
130 m_IsRecentlyUsedGroup( false ),
131 m_IsAlreadyPlacedGroup( false )
137 static void* locale =
nullptr;
138 static wxString namePrefix;
142 if(
Pgm().GetLocale() != locale )
144 namePrefix =
_(
"Unit" );
171 if( !aMatchers.empty() )
174 if( aFilter && !(*aFilter)(*
this) )
209 m_Children.push_back( std::unique_ptr<LIB_TREE_NODE>( unit ) );
239 for(
const std::unique_ptr<EDA_COMBINED_MATCHER>& matcher : aMatchers )
252 if( aFilter && !(*aFilter)(*
this) )
255 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
256 child->UpdateScore( aMatchers, aFilter );
261 wxString
const& aDesc )
276 m_Children.push_back( std::unique_ptr<LIB_TREE_NODE>( item ) );
288 for(
const std::unique_ptr<EDA_COMBINED_MATCHER>& matcher : aMatchers )
305 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
307 child->UpdateScore( aMatchers, aFilter );
323 m_Children.push_back( std::unique_ptr<LIB_TREE_NODE>( lib ) );
331 [&]( std::unique_ptr<LIB_TREE_NODE>& aNode )
333 if( aRecentlyUsedGroup && aNode->m_IsRecentlyUsedGroup )
336 if( aAlreadyPlacedGroup && aNode->m_IsAlreadyPlacedGroup )
354 for( std::unique_ptr<LIB_TREE_NODE>& child:
m_Children )
355 child->UpdateScore( aMatchers, aFilter );
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(const std::vector< std::unique_ptr< EDA_COMBINED_MATCHER > > &aMatchers, 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 ...
void UpdateScore(const std::vector< std::unique_ptr< EDA_COMBINED_MATCHER > > &aMatchers, std::function< bool(LIB_TREE_NODE &aNode)> *aFilter) override
Update the score for this part.
LIB_TREE_NODE_ITEM & AddItem(LIB_TREE_ITEM *aItem)
Construct a new alias node, add it to this library, and return it.
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.
LIB_TREE_NODE_ROOT()
Construct the root node.
void UpdateScore(const std::vector< std::unique_ptr< EDA_COMBINED_MATCHER > > &aMatchers, std::function< bool(LIB_TREE_NODE &aNode)> *aFilter) override
Update the score for this part.
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(const std::vector< std::unique_ptr< EDA_COMBINED_MATCHER > > &aMatchers, 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.
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.