KiCad PCB EDA Suite
CMP_TREE_NODE Class Referenceabstract

Model class in the component selector Model-View-Adapter (mediated MVC) architecture. More...

#include <cmp_tree_model.h>

Inheritance diagram for CMP_TREE_NODE:
CMP_TREE_NODE_ALIAS CMP_TREE_NODE_LIB CMP_TREE_NODE_ROOT CMP_TREE_NODE_UNIT

Public Types

enum  TYPE {
  ROOT, LIB, ALIAS, UNIT,
  INVALID
}
 

Public Member Functions

virtual void UpdateScore (EDA_COMBINED_MATCHER &aMatcher)=0
 Update the score for this part. More...
 
void ResetScore ()
 Initialize score to kLowestDefaultScore, recursively. More...
 
void AssignIntrinsicRanks ()
 Store intrinsic ranks on all children of this node. More...
 
void SortNodes ()
 Sort child nodes quickly and recursively (IntrinsicRanks must have been set). More...
 
 CMP_TREE_NODE ()
 
virtual ~CMP_TREE_NODE ()
 

Static Public Member Functions

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

Public Attributes

CMP_TREE_NODEParent
 Parent node or null. More...
 
std::vector< std::unique_ptr< CMP_TREE_NODE > > 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...
 
LIB_ALIASAlias
 Actual LIB_ALIAS*, or null. More...
 
int Unit
 Actual unit, or zero. More...
 

Detailed Description

Model class in the component selector Model-View-Adapter (mediated MVC) architecture.

The other pieces are in:

This model is populated from LIB_ALIASes; helper methods in the adapter can accept entire libraries.

Quick summary of methods used to populate this class:

Quick summary of methods used to drive this class:

The data in the model is meant to be accessed directly. Quick summary of data members:

  • Parent - parent node, or nullptr if root
  • Children - vector of unique_ptrs to children
  • Type - ROOT, LIB, ALIAS, or UNIT
  • IntrinsicRank - cached initial sort order
  • Score - score taking into account search terms. Zero means irrelevant and should be hidden.
  • Name - name of the library/alias/unit, to be displayed
  • Desc - description of the alias, to be displayed
  • MatchName - Name, normalized to lowercase for matching
  • SearchText - normalized composite of keywords and description
  • Alias - the LIB_ALIAS* this alias or unit is from, or nullptr
  • Unit - the unit number, or zero for non-units

Definition at line 76 of file cmp_tree_model.h.

Member Enumeration Documentation

Enumerator
ROOT 
LIB 
ALIAS 
UNIT 
INVALID 

Definition at line 78 of file cmp_tree_model.h.

Constructor & Destructor Documentation

CMP_TREE_NODE::CMP_TREE_NODE ( )

Definition at line 105 of file cmp_tree_model.cpp.

106  : Parent( nullptr ),
107  Type( INVALID ),
108  IntrinsicRank( 0 ),
110  Alias( nullptr ),
111  Unit( 0 )
112 {}
enum TYPE Type
Node type.
CMP_TREE_NODE * Parent
Parent node or null.
int IntrinsicRank
The rank of the item before any search terms are applied.
static const unsigned kLowestDefaultScore
int Unit
Actual unit, or zero.
LIB_ALIAS * Alias
Actual LIB_ALIAS*, or null.
int Score
The score of an item resulting from the search algorithm.
virtual CMP_TREE_NODE::~CMP_TREE_NODE ( )
inlinevirtual

Definition at line 137 of file cmp_tree_model.h.

137 {}

Member Function Documentation

void CMP_TREE_NODE::AssignIntrinsicRanks ( )

Store intrinsic ranks on all children of this node.

See IntrinsicRank member doc for more information.

Definition at line 61 of file cmp_tree_model.cpp.

References Children, IntrinsicRank, and MatchName.

Referenced by CMP_TREE_MODEL_ADAPTER::AddAliasList(), and CMP_TREE_MODEL_ADAPTER::AddLibrary().

62 {
63  std::vector<CMP_TREE_NODE*> sort_buf;
64 
65  for( auto const& node: Children )
66  sort_buf.push_back( &*node );
67 
68  std::sort( sort_buf.begin(), sort_buf.end(),
69  []( CMP_TREE_NODE* a, CMP_TREE_NODE* b ) -> bool
70  { return a->MatchName > b->MatchName; } );
71 
72  for( int i = 0; i < (int) sort_buf.size(); ++i )
73  sort_buf[i]->IntrinsicRank = i;
74 }
wxString MatchName
Normalized name for matching.
Model class in the component selector Model-View-Adapter (mediated MVC) architecture.
int IntrinsicRank
The rank of the item before any search terms are applied.
std::vector< std::unique_ptr< CMP_TREE_NODE > > Children
List of child nodes.
int CMP_TREE_NODE::Compare ( CMP_TREE_NODE const &  aNode1,
CMP_TREE_NODE const &  aNode2 
)
static

Compare two nodes.

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

Definition at line 90 of file cmp_tree_model.cpp.

References IntrinsicRank, Parent, Score, and Type.

Referenced by SortNodes().

91 {
92  if( aNode1.Type != aNode2.Type )
93  return 0;
94 
95  if( aNode1.Score != aNode2.Score )
96  return aNode1.Score - aNode2.Score;
97 
98  if( aNode1.Parent != aNode2.Parent )
99  return 0;
100 
101  return aNode1.IntrinsicRank - aNode2.IntrinsicRank;
102 }
void CMP_TREE_NODE::ResetScore ( )

Initialize score to kLowestDefaultScore, recursively.

Definition at line 52 of file cmp_tree_model.cpp.

References Children, kLowestDefaultScore, and Score.

Referenced by CMP_TREE_MODEL_ADAPTER::UpdateSearchString().

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

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

Definition at line 77 of file cmp_tree_model.cpp.

References Children, and Compare().

Referenced by CMP_TREE_MODEL_ADAPTER::UpdateSearchString().

78 {
79  std::sort( Children.begin(), Children.end(),
80  []( std::unique_ptr<CMP_TREE_NODE> const& a, std::unique_ptr<CMP_TREE_NODE> const& b )
81  { return Compare( *a, *b ) > 0; } );
82 
83  for( auto& node: Children )
84  {
85  node->SortNodes();
86  }
87 }
static int Compare(CMP_TREE_NODE const &aNode1, CMP_TREE_NODE const &aNode2)
Compare two nodes.
std::vector< std::unique_ptr< CMP_TREE_NODE > > Children
List of child nodes.
virtual void CMP_TREE_NODE::UpdateScore ( EDA_COMBINED_MATCHER aMatcher)
pure virtual

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

Implemented in CMP_TREE_NODE_ROOT, CMP_TREE_NODE_LIB, CMP_TREE_NODE_ALIAS, and CMP_TREE_NODE_UNIT.

Member Data Documentation

LIB_ALIAS* CMP_TREE_NODE::Alias

Actual LIB_ALIAS*, or null.

Definition at line 101 of file cmp_tree_model.h.

Referenced by CMP_TREE_NODE_ALIAS::CMP_TREE_NODE_ALIAS(), and CMP_TREE_NODE_UNIT::CMP_TREE_NODE_UNIT().

wxString CMP_TREE_NODE::Desc
int CMP_TREE_NODE::IntrinsicRank

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 91 of file cmp_tree_model.h.

Referenced by AssignIntrinsicRanks(), CMP_TREE_NODE_UNIT::CMP_TREE_NODE_UNIT(), and Compare().

int CMP_TREE_NODE::Score

The score of an item resulting from the search algorithm.

Definition at line 94 of file cmp_tree_model.h.

Referenced by CMP_TREE_MODEL_ADAPTER::ColWidth(), Compare(), ResetScore(), CMP_TREE_MODEL_ADAPTER::ShowResults(), CMP_TREE_NODE_ALIAS::UpdateScore(), and CMP_TREE_NODE_LIB::UpdateScore().

wxString CMP_TREE_NODE::SearchText

Descriptive text to search.

Definition at line 99 of file cmp_tree_model.h.

Referenced by CMP_TREE_NODE_ALIAS::CMP_TREE_NODE_ALIAS(), and CMP_TREE_NODE_ALIAS::UpdateScore().

int CMP_TREE_NODE::Unit

Actual unit, or zero.

Definition at line 102 of file cmp_tree_model.h.

Referenced by CMP_TREE_NODE_UNIT::CMP_TREE_NODE_UNIT(), and CMP_TREE_MODEL_ADAPTER::ShowPreselect().


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