forked from KiCad/kicad-source-mirror
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfootprint_filter.h
148 lines (124 loc) · 4.14 KB
/
footprint_filter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017-2021 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef FOOTPRINT_FILTER_H
#define FOOTPRINT_FILTER_H
#include <boost/iterator/iterator_facade.hpp>
#include <eda_pattern_match.h>
#include <footprint_info.h>
/**
* Footprint display filter. Takes a list of footprints and filtering settings,
* and provides an iterable view of the filtered data.
*/
class FOOTPRINT_FILTER
{
public:
/**
* Construct a filter.
*
* @param aList - unfiltered list of footprints
*/
FOOTPRINT_FILTER( FOOTPRINT_LIST& aList );
/**
* Construct a filter without assigning a footprint list. The filter MUST NOT
* be iterated over until SetList() is called.
*/
FOOTPRINT_FILTER();
/**
* Set the list to filter.
*/
void SetList( FOOTPRINT_LIST& aList );
/**
* Clear all filter criteria.
*/
void ClearFilters();
/**
* Add library name to filter criteria.
*/
void FilterByLibrary( const wxString& aLibName );
/**
* Set a pin count to filter by.
*/
void FilterByPinCount( int aPinCount );
/**
* Set a list of footprint filters to filter by.
*/
void FilterByFootprintFilters( const wxArrayString& aFilters );
/**
* Add a pattern to filter by name, including wildcards and optionally a colon-delimited
* library name.
*/
void FilterByTextPattern( const wxString& aPattern );
/**
* Inner iterator class returned by begin() and end().
*/
class ITERATOR
: public boost::iterator_facade<ITERATOR, FOOTPRINT_INFO, boost::forward_traversal_tag>
{
public:
ITERATOR();
ITERATOR( const ITERATOR& aOther );
ITERATOR( FOOTPRINT_FILTER& aFilter );
private:
friend class boost::iterator_core_access;
friend class FOOTPRINT_FILTER;
void increment();
bool equal( const ITERATOR& aOther ) const;
FOOTPRINT_INFO& dereference() const;
size_t m_pos;
FOOTPRINT_FILTER* m_filter;
/**
* Check if the stored component matches an item by footprint filter.
*/
bool FootprintFilterMatch( FOOTPRINT_INFO& aItem );
/**
* Check if the stored component matches an item by pin count.
*/
bool PinCountMatch( FOOTPRINT_INFO& aItem );
};
/**
* Get an iterator to the beginning of the filtered view.
*/
ITERATOR begin();
/**
* Get an iterator to the end of the filtered view. The end iterator is
* invalid and may not be dereferenced, only compared against.
*/
ITERATOR end();
private:
/**
* Filter setting constants. The filter type is a bitwise OR of these flags,
* and only footprints matching all selected filter types are shown.
*/
enum FP_FILTER_T : int
{
UNFILTERED_FP_LIST = 0,
FILTERING_BY_COMPONENT_FP_FILTER = 0x0001,
FILTERING_BY_PIN_COUNT = 0x0002,
FILTERING_BY_LIBRARY = 0x0004,
FILTERING_BY_TEXT_PATTERN = 0x0008
};
FOOTPRINT_LIST* m_list;
wxString m_lib_name;
wxString m_filter_pattern;
int m_pin_count;
int m_filter_type;
std::vector<std::unique_ptr<EDA_COMBINED_MATCHER>> m_pattern_filters;
std::vector<std::unique_ptr<EDA_PATTERN_MATCH>> m_footprint_filters;
};
#endif // FOOTPRINT_FILTER_H