KiCad PCB EDA Suite
LIB_TREE_NODE_LIB Class Reference

Node type: library. More...

#include <lib_tree_model.h>

Inheritance diagram for LIB_TREE_NODE_LIB:
LIB_TREE_NODE

Public Types

enum  TYPE {
  ROOT, LIB, LIBID, UNIT,
  INVALID
}
 
typedef std::vector< std::unique_ptr< LIB_TREE_NODE > > PTR_VECTOR
 

Public Member Functions

 LIB_TREE_NODE_LIB (LIB_TREE_NODE_LIB const &_)=delete
 The addresses of CMP_TREE_NODEs are used as unique IDs for the wxDataViewModel, so don't let them be copied around. More...
 
void operator= (LIB_TREE_NODE_LIB const &_)=delete
 
 LIB_TREE_NODE_LIB (LIB_TREE_NODE *aParent, wxString const &aName, wxString const &aDesc)
 Construct an empty library node. More...
 
LIB_TREE_NODE_LIB_IDAddItem (LIB_TREE_ITEM *aItem)
 Construct a new alias node, add it to this library, and return it. More...
 
virtual void UpdateScore (EDA_COMBINED_MATCHER &aMatcher) override
 Update the score for this part. More...
 
void ResetScore ()
 Initialize score to kLowestDefaultScore, recursively. More...
 
void AssignIntrinsicRanks (bool presorted=false)
 Store intrinsic ranks on all children of this node. More...
 
void SortNodes ()
 Sort child nodes quickly and recursively (IntrinsicRanks must have been set). More...
 

Static Public Member Functions

static int Compare (LIB_TREE_NODE const &aNode1, LIB_TREE_NODE const &aNode2)
 Compare two nodes. More...
 

Public Attributes

LIB_TREE_NODEParent
 Parent node or null. More...
 
PTR_VECTOR Children
 List of child nodes. More...
 
enum TYPE Type
 Node type. More...
 
int IntrinsicRank
 The rank of the item before any search terms are applied. More...
 
int Score
 The score of an item resulting from the search algorithm. More...
 
wxString Name
 Actual name of the part. More...
 
wxString Desc
 Description to be displayed. More...
 
wxString MatchName
 Normalized name for matching. More...
 
wxString SearchText
 Descriptive text to search. More...
 
bool Normalized
 Support for lazy normalization. More...
 
LIB_ID LibId
 LIB_ID determined by the parent library nickname and alias name. More...
 
int Unit
 Actual unit, or zero. More...
 
bool IsRoot
 Indicates if the symbol is a root symbol instead of an alias. More...
 
int VisLen
 Length of the string as shown on screen. More...
 

Detailed Description

Node type: library.

Definition at line 230 of file lib_tree_model.h.

Member Typedef Documentation

◆ PTR_VECTOR

typedef std::vector<std::unique_ptr<LIB_TREE_NODE> > LIB_TREE_NODE::PTR_VECTOR
inherited

Definition at line 81 of file lib_tree_model.h.

Member Enumeration Documentation

◆ TYPE

enum LIB_TREE_NODE::TYPE
inherited
Enumerator
ROOT 
LIB 
LIBID 
UNIT 
INVALID 

Definition at line 77 of file lib_tree_model.h.

Constructor & Destructor Documentation

◆ LIB_TREE_NODE_LIB() [1/2]

LIB_TREE_NODE_LIB::LIB_TREE_NODE_LIB ( LIB_TREE_NODE_LIB const &  _)
delete

The addresses of CMP_TREE_NODEs are used as unique IDs for the wxDataViewModel, so don't let them be copied around.

◆ LIB_TREE_NODE_LIB() [2/2]

LIB_TREE_NODE_LIB::LIB_TREE_NODE_LIB ( LIB_TREE_NODE aParent,
wxString const &  aName,
wxString const &  aDesc 
)

Construct an empty library node.

Parameters
aParentparent node, should be a CMP_TREE_NODE_ROOT
aNamedisplay name of the library
aDesca description of the library

Definition at line 260 of file lib_tree_model.cpp.

262 {
263  Type = LIB;
264  Name = aName;
265  MatchName = aName.Lower();
266  Desc = aDesc;
267  Parent = aParent;
268  LibId.SetLibNickname( aName );
269 }
enum TYPE Type
Node type.
LIB_TREE_NODE * Parent
Parent node or null.
wxString MatchName
Normalized name for matching.
LIB_ID LibId
LIB_ID determined by the parent library nickname and alias name.
wxString Desc
Description to be displayed.
int SetLibNickname(const UTF8 &aNickname)
Override the logical library name portion of the LIB_ID to aNickname.
Definition: lib_id.cpp:193
wxString Name
Actual name of the part.

References LIB_TREE_NODE::Desc, LIB_TREE_NODE::LIB, LIB_TREE_NODE::LibId, LIB_TREE_NODE::MatchName, LIB_TREE_NODE::Name, LIB_TREE_NODE::Parent, LIB_ID::SetLibNickname(), and LIB_TREE_NODE::Type.

Member Function Documentation

◆ AddItem()

LIB_TREE_NODE_LIB_ID & LIB_TREE_NODE_LIB::AddItem ( LIB_TREE_ITEM aItem)

Construct a new alias node, add it to this library, and return it.

Parameters
aItemLIB_COMPONENT to provide data

Definition at line 272 of file lib_tree_model.cpp.

273 {
274  LIB_TREE_NODE_LIB_ID* item = new LIB_TREE_NODE_LIB_ID( this, aItem );
275  Children.push_back( std::unique_ptr<LIB_TREE_NODE>( item ) );
276  return *item;
277 }
PTR_VECTOR Children
List of child nodes.
Node type: LIB_ID.

References LIB_TREE_NODE::Children.

Referenced by LIB_TREE_MODEL_ADAPTER::DoAddLibrary(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::updateLibrary(), and FP_TREE_SYNCHRONIZING_ADAPTER::updateLibrary().

◆ AssignIntrinsicRanks()

void LIB_TREE_NODE::AssignIntrinsicRanks ( bool  presorted = false)
inherited

Store intrinsic ranks on all children of this node.

See IntrinsicRank member doc for more information.

Definition at line 61 of file lib_tree_model.cpp.

62 {
63  std::vector<LIB_TREE_NODE*> sort_buf;
64 
65  if( presorted )
66  {
67  int max = Children.size() - 1;
68 
69  for( int i = 0; i <= max; ++i )
71  }
72  else
73  {
74  for( auto const& node: Children )
75  sort_buf.push_back( &*node );
76 
77  std::sort( sort_buf.begin(), sort_buf.end(),
78  []( LIB_TREE_NODE* a, LIB_TREE_NODE* b ) -> bool
79  { return StrNumCmp( a->Name, b->Name, true ) > 0; } );
80 
81  for( int i = 0; i < (int) sort_buf.size(); ++i )
82  sort_buf[i]->IntrinsicRank = i;
83  }
84 }
int StrNumCmp(const wxString &aString1, const wxString &aString2, bool aIgnoreCase)
Compare two strings with alphanumerical content.
Definition: string.cpp:354
PTR_VECTOR Children
List of child nodes.
Model class in the component selector Model-View-Adapter (mediated MVC) architecture.
wxString Name
Actual name of the part.
#define max(a, b)
Definition: auxiliary.h:86
size_t i
Definition: json11.cpp:649
int IntrinsicRank
The rank of the item before any search terms are applied.

References LIB_TREE_NODE::Children, i, LIB_TREE_NODE::IntrinsicRank, max, LIB_TREE_NODE::Name, and StrNumCmp().

Referenced by FP_TREE_MODEL_ADAPTER::AddLibraries(), SYMBOL_TREE_MODEL_ADAPTER::AddLibraries(), LIB_TREE_MODEL_ADAPTER::AssignIntrinsicRanks(), LIB_TREE_MODEL_ADAPTER::DoAddLibrary(), FP_TREE_SYNCHRONIZING_ADAPTER::Sync(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::updateLibrary(), and FP_TREE_SYNCHRONIZING_ADAPTER::updateLibrary().

◆ Compare()

int LIB_TREE_NODE::Compare ( LIB_TREE_NODE const &  aNode1,
LIB_TREE_NODE const &  aNode2 
)
staticinherited

Compare two nodes.

Returns negative if aNode1 < aNode2, zero if aNode1 == aNode2, or positive if aNode1 > aNode2.

Definition at line 100 of file lib_tree_model.cpp.

101 {
102  if( aNode1.Type != aNode2.Type )
103  return 0;
104 
105  if( aNode1.Score != aNode2.Score )
106  return aNode1.Score - aNode2.Score;
107 
108  if( aNode1.Parent != aNode2.Parent )
109  return 0;
110 
111  return aNode1.IntrinsicRank - aNode2.IntrinsicRank;
112 }

References LIB_TREE_NODE::IntrinsicRank, LIB_TREE_NODE::Parent, LIB_TREE_NODE::Score, and LIB_TREE_NODE::Type.

Referenced by LIB_TREE_NODE::SortNodes().

◆ operator=()

void LIB_TREE_NODE_LIB::operator= ( LIB_TREE_NODE_LIB const &  _)
delete

◆ ResetScore()

void LIB_TREE_NODE::ResetScore ( )
inherited

Initialize score to kLowestDefaultScore, recursively.

Definition at line 52 of file lib_tree_model.cpp.

53 {
54  for( auto& child: Children )
55  child->ResetScore();
56 
58 }
PTR_VECTOR Children
List of child nodes.
int Score
The score of an item resulting from the search algorithm.
static const unsigned kLowestDefaultScore

References LIB_TREE_NODE::Children, kLowestDefaultScore, and LIB_TREE_NODE::Score.

Referenced by LIB_TREE_MODEL_ADAPTER::UpdateSearchString().

◆ SortNodes()

void LIB_TREE_NODE::SortNodes ( )
inherited

Sort child nodes quickly and recursively (IntrinsicRanks must have been set).

Definition at line 87 of file lib_tree_model.cpp.

88 {
89  std::sort( Children.begin(), Children.end(),
90  []( std::unique_ptr<LIB_TREE_NODE>& a, std::unique_ptr<LIB_TREE_NODE>& b )
91  {
92  return Compare( *a, *b ) > 0;
93  } );
94 
95  for( std::unique_ptr<LIB_TREE_NODE>& node: Children )
96  node->SortNodes();
97 }
PTR_VECTOR Children
List of child nodes.
static int Compare(LIB_TREE_NODE const &aNode1, LIB_TREE_NODE const &aNode2)
Compare two nodes.

References LIB_TREE_NODE::Children, and LIB_TREE_NODE::Compare().

Referenced by LIB_TREE_MODEL_ADAPTER::UpdateSearchString().

◆ UpdateScore()

void LIB_TREE_NODE_LIB::UpdateScore ( EDA_COMBINED_MATCHER aMatcher)
overridevirtual

Update the score for this part.

This is accumulative - it will be called once per search term.

Parameters
aMatcheran EDA_COMBINED_MATCHER initialized with the search term

Implements LIB_TREE_NODE.

Definition at line 280 of file lib_tree_model.cpp.

281 {
282  Score = 0;
283 
284  // We need to score leaf nodes, which are usually (but not always) children.
285 
286  if( Children.size() )
287  {
288  for( auto& child: Children )
289  {
290  child->UpdateScore( aMatcher );
291  Score = std::max( Score, child->Score );
292  }
293  }
294  else
295  {
296  // No children; we are a leaf.
297  int found_pos = EDA_PATTERN_NOT_FOUND;
298  int matchers_fired = 0;
299 
300  if( aMatcher.GetPattern() == MatchName )
301  {
302  Score += 1000; // exact match. High score :)
303  }
304  else if( aMatcher.Find( MatchName, matchers_fired, found_pos ) )
305  {
306  // Substring match. The earlier in the string the better.
307  Score += matchPosScore( found_pos, 20 ) + 20;
308  }
309 
310  // More matchers = better match
311  Score += 2 * matchers_fired;
312  }
313 }
PTR_VECTOR Children
List of child nodes.
static int matchPosScore(int aPosition, int aMaximum)
wxString const & GetPattern() const
int Score
The score of an item resulting from the search algorithm.
wxString MatchName
Normalized name for matching.
bool Find(const wxString &aTerm, int &aMatchersTriggered, int &aPosition)
static const int EDA_PATTERN_NOT_FOUND
#define max(a, b)
Definition: auxiliary.h:86

References LIB_TREE_NODE::Children, EDA_PATTERN_NOT_FOUND, EDA_COMBINED_MATCHER::Find(), EDA_COMBINED_MATCHER::GetPattern(), LIB_TREE_NODE::MatchName, matchPosScore(), max, and LIB_TREE_NODE::Score.

Member Data Documentation

◆ Children

◆ Desc

wxString LIB_TREE_NODE::Desc
inherited

◆ IntrinsicRank

int LIB_TREE_NODE::IntrinsicRank
inherited

The rank of the item before any search terms are applied.

This is a fairly expensive sort (involving string compares) so it helps to store the result of that sort.

Definition at line 92 of file lib_tree_model.h.

Referenced by LIB_TREE_NODE::AssignIntrinsicRanks(), LIB_TREE_NODE::Compare(), and LIB_TREE_NODE_UNIT::LIB_TREE_NODE_UNIT().

◆ IsRoot

bool LIB_TREE_NODE::IsRoot
inherited

Indicates if the symbol is a root symbol instead of an alias.

Definition at line 106 of file lib_tree_model.h.

Referenced by LIB_TREE_NODE_LIB_ID::LIB_TREE_NODE_LIB_ID(), and LIB_TREE_NODE_LIB_ID::Update().

◆ LibId

◆ MatchName

wxString LIB_TREE_NODE::MatchName
inherited

◆ Name

◆ Normalized

bool LIB_TREE_NODE::Normalized
inherited

Support for lazy normalization.

Definition at line 101 of file lib_tree_model.h.

Referenced by LIB_TREE_NODE_LIB_ID::LIB_TREE_NODE_LIB_ID(), LIB_TREE_NODE_LIB_ID::Update(), and LIB_TREE_NODE_LIB_ID::UpdateScore().

◆ Parent

◆ Score

int LIB_TREE_NODE::Score
inherited

The score of an item resulting from the search algorithm.

Definition at line 95 of file lib_tree_model.h.

Referenced by LIB_TREE_NODE::Compare(), LIB_TREE_NODE::ResetScore(), LIB_TREE_MODEL_ADAPTER::ShowResults(), LIB_TREE_NODE_LIB_ID::UpdateScore(), and UpdateScore().

◆ SearchText

wxString LIB_TREE_NODE::SearchText
inherited

◆ Type

◆ Unit

int LIB_TREE_NODE::Unit
inherited

◆ VisLen

int LIB_TREE_NODE::VisLen
inherited

Length of the string as shown on screen.

Definition at line 107 of file lib_tree_model.h.


The documentation for this class was generated from the following files: