42 std::vector<long> item = { aItemRow };
51 std::vector<BOARD_ITEM*> selection;
53 for(
long i = 0; i < (long)
m_hitlist.size(); ++i )
59 int col = std::max( 0, aCol );
68 return StrNumCmp( getResultCell( a, col ), getResultCell( b, col ), true ) < 0;
70 return StrNumCmp( getResultCell( b, col ), getResultCell( a, col ), true ) < 0;
76 for(
long i = 0; i < (long)
m_hitlist.size(); ++i )
79 aSelection->push_back( i );
87 std::vector<EDA_ITEM*> selectedItems;
89 for(
long row : aItemRows )
91 if( row >= 0 && row < (
long)
m_hitlist.size() )
92 selectedItems.push_back(
m_hitlist[row] );
97 if( selectedItems.size() )
114 m_frame->GetCanvas()->Refresh(
false );
121 m_columns.emplace_back(
_HKI(
"Reference" ), 2, wxLIST_FORMAT_LEFT );
122 m_columns.emplace_back(
_HKI(
"Value" ), 6, wxLIST_FORMAT_LEFT );
123 m_columns.emplace_back(
_HKI(
"Layer" ), 2, wxLIST_FORMAT_CENTER );
124 m_columns.emplace_back( wxT(
"X" ), 3, wxLIST_FORMAT_CENTER );
125 m_columns.emplace_back( wxT(
"Y" ), 3, wxLIST_FORMAT_CENTER );
126 m_columns.emplace_back(
_HKI(
"Library Link" ), 8, wxLIST_FORMAT_LEFT );
127 m_columns.emplace_back(
_HKI(
"Library Description" ), 10, wxLIST_FORMAT_LEFT );
136 if( board ==
nullptr )
156 if( !found && fp->Matches( frp,
nullptr ) )
161 for(
PCB_FIELD* field : fp->GetFields() )
163 if( field->Matches( frp,
nullptr ) )
198 return wxEmptyString;
205 m_columns.emplace_back(
_HKI(
"Name" ), 6, wxLIST_FORMAT_LEFT );
206 m_columns.emplace_back(
_HKI(
"Net" ), 6, wxLIST_FORMAT_LEFT);
207 m_columns.emplace_back(
_HKI(
"Layer" ), 3, wxLIST_FORMAT_CENTER );
208 m_columns.emplace_back(
_HKI(
"Priority" ), 2, wxLIST_FORMAT_CENTER );
209 m_columns.emplace_back( wxT(
"X" ), 3, wxLIST_FORMAT_CENTER );
210 m_columns.emplace_back( wxT(
"Y" ), 3, wxLIST_FORMAT_CENTER );
211 m_columns.emplace_back(
_HKI(
"Area" ), 3, wxLIST_FORMAT_RIGHT );
232 if( frp.
findString.IsEmpty() || item->Matches( frp,
nullptr ) )
242 ZONE* zone =
static_cast<ZONE*
>( aItem );
250 wxArrayString layers;
256 return wxJoin( layers,
',' );
271 return wxEmptyString;
278 m_columns.emplace_back(
_HKI(
"Type" ), 2, wxLIST_FORMAT_LEFT );
279 m_columns.emplace_back(
_HKI(
"Text" ), 12, wxLIST_FORMAT_LEFT );
280 m_columns.emplace_back(
_HKI(
"Layer" ), 3, wxLIST_FORMAT_CENTER );
281 m_columns.emplace_back( wxT(
"X" ), 3, wxLIST_FORMAT_CENTER );
282 m_columns.emplace_back( wxT(
"Y" ), 3, wxLIST_FORMAT_CENTER );
308 if( frp.
findString.IsEmpty() || item->Matches( frp,
nullptr ) )
324 return _(
"Textbox" );
326 return _(
"Dimension" );
344 return wxEmptyString;
351 m_columns.emplace_back(
_HKI(
"Type" ), 2, wxLIST_FORMAT_LEFT );
352 m_columns.emplace_back(
_HKI(
"Name" ), 6, wxLIST_FORMAT_LEFT );
353 m_columns.emplace_back( wxT(
"X" ), 3, wxLIST_FORMAT_CENTER );
354 m_columns.emplace_back( wxT(
"Y" ), 3, wxLIST_FORMAT_CENTER );
379 if( frp.
findString.IsEmpty() || item->Matches( frp,
nullptr ) )
394 return _(
"Generator" );
403 return wxEmptyString;
410 m_columns.emplace_back(
_HKI(
"Name" ), 6, wxLIST_FORMAT_LEFT );
411 m_columns.emplace_back(
_HKI(
"Class" ), 6, wxLIST_FORMAT_LEFT );
433 if( net && ( aQuery.IsEmpty() || net->Matches( frp,
nullptr ) ) )
448 return _(
"No Net" );
458 return wxEmptyString;
467 std::vector<NETINFO_ITEM*> selectedItems;
469 for(
long row : aItemRows )
471 if( row >= 0 && row < (
long)
m_hitlist.size() )
479 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
480 m_frame->GetCanvas()->Refresh();
486 m_frame->ShowBoardSetupDialog(
_(
"Net Classes" ) );
493 m_columns.emplace_back(
_HKI(
"Name" ), 6, wxLIST_FORMAT_LEFT );
494 m_columns.emplace_back(
_HKI(
"Class" ), 6, wxLIST_FORMAT_LEFT );
516 if( net ==
nullptr || !net->Matches( frp,
nullptr ) )
536 return _(
"No Net" );
546 return wxEmptyString;
555 std::vector<NETINFO_ITEM*> selectedItems;
557 for(
long row : aItemRows )
559 if( row >= 0 && row < (
long)
m_hitlist.size() )
567 m_frame->GetCanvas()->GetView()->UpdateAllLayersColor();
568 m_frame->GetCanvas()->Refresh();
574 m_frame->ShowBoardSetupDialog(
_(
"Net Classes" ) );
582 m_columns.emplace_back(
_HKI(
"Count" ), 2, wxLIST_FORMAT_RIGHT );
583 m_columns.emplace_back(
_HKI(
"Shape" ), 3, wxLIST_FORMAT_LEFT );
584 m_columns.emplace_back(
_HKI(
"X Size" ), 3, wxLIST_FORMAT_CENTER );
585 m_columns.emplace_back(
_HKI(
"Y Size" ), 3, wxLIST_FORMAT_CENTER );
586 m_columns.emplace_back(
_HKI(
"Plated" ), 2, wxLIST_FORMAT_CENTER );
587 m_columns.emplace_back(
_HKI(
"Via/Pad" ), 2, wxLIST_FORMAT_CENTER );
588 m_columns.emplace_back(
_HKI(
"Start Layer" ), 4, wxLIST_FORMAT_CENTER );
589 m_columns.emplace_back(
_HKI(
"Stop Layer" ), 4, wxLIST_FORMAT_CENTER );
612 DRILL_ROW g = { .entry = d, .item = rep, };
621 for(
PAD*
pad : fp->Pads() )
623 if( !
pad->HasHole() )
626 int xs =
pad->GetDrillSize().x;
627 int ys =
pad->GetDrillSize().y;
628 if( xs <= 0 || ys <= 0 )
633 if(
pad->GetLayerSet().CuStack().empty() )
640 top =
pad->GetLayerSet().CuStack().front();
641 bottom =
pad->GetLayerSet().CuStack().back();
648 addEntryOrIncrement( d,
pad );
659 int dmm =
via->GetDrillValue();
664 false,
via->TopLayer(),
via->BottomLayer() );
665 addEntryOrIncrement( d,
via );
671 DRILL_LINE_ITEM::COMPARE cmp( DRILL_LINE_ITEM::COL_COUNT, false );
672 return cmp( a.entry, b.entry );
676 for(
size_t i = 0; i <
m_drills.size(); ++i )
694 return wxEmptyString;
696 const auto& e =
m_drills[it->second].entry;
705 std::vector<BOARD_ITEM*> selPtrs;
709 for(
long row : *aSelection )
711 if( row >= 0 && row < (
long)
m_hitlist.size() )
721 int col = aCol < 0 ? 0 : aCol;
734 for(
long row = 0; row < (long)
m_hitlist.size(); ++row )
737 aSelection->push_back( row );
746 std::vector<EDA_ITEM*> selectedItems;
750 for(
long row : aItemRows )
752 if( row < 0 || row >= (
long)
m_hitlist.size() )
761 const auto* target = &
m_drills[it->second].entry;
766 for(
PAD*
pad : fp->Pads() )
768 if( !
pad->HasHole() )
771 int xs =
pad->GetDrillSize().x;
772 int ys =
pad->GetDrillSize().y;
775 if(
pad->GetLayerSet().CuStack().empty() )
782 top =
pad->GetLayerSet().CuStack().front();
783 bottom =
pad->GetLayerSet().CuStack().back();
790 selectedItems.push_back(
pad );
802 false,
via->TopLayer(),
via->BottomLayer() );
805 selectedItems.push_back(
via );
812 if( selectedItems.size() )
829 m_frame->GetCanvas()->Refresh(
false );
840 return wxString::Format(
"%d", e.
m_Qty );
850 return e.
isPad ?
_(
"Pad" ) :
_(
"Via" );
856 return wxEmptyString;
863 if( aQuery.IsEmpty() )
866 for(
int col = 0; col < 8; ++col )
868 if(
cellText( e, col ).Lower().Contains( aQuery ) )
static TOOL_ACTION zoomFitSelection
static TOOL_ACTION centerSelection
static TOOL_ACTION selectionClear
Clear the current selection.
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
wxString GetNetname() const
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
Information pertinent to a Pcbnew printed circuit board.
const NETINFO_LIST & GetNetInfo() const
const ZONES & Zones() const
const GROUPS & Groups() const
The groups must maintain the following invariants.
const FOOTPRINTS & Footprints() const
const TRACKS & Tracks() const
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
const DRAWINGS & Drawings() const
RN_NET * GetRatsnestForNet(int aNet)
Function GetRatsnestForNet() Returns the ratsnest, expressed as a set of graph edges for a given net.
wxString cellText(const DRILL_LINE_ITEM &e, int col) const
std::unordered_map< BOARD_ITEM *, int > m_ptrToDrill
void SelectItems(std::vector< long > &aItemRows) override
int Search(const wxString &aQuery) override
bool rowMatchesQuery(const DRILL_LINE_ITEM &e, const wxString &aQuery) const
DRILL_SEARCH_HANDLER(PCB_EDIT_FRAME *aFrame)
void Sort(int aCol, bool aAscending, std::vector< long > *aSelection) override
std::vector< DRILL_ROW > m_drills
wxString getResultCell(BOARD_ITEM *aItem, int aCol) override
virtual APP_SETTINGS_BASE * config() const
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
KICAD_T Type() const
Returns the type of object.
wxString getResultCell(const SCH_SEARCH_HIT &hit, int aCol) override
int Search(const wxString &aQuery) override
GROUP_SEARCH_HANDLER(SCH_EDIT_FRAME *aFrame)
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
void SetHighlight(bool aEnabled, int aNetcode=-1, bool aMulti=false)
Turns on/off highlighting.
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
const wxString GetName() const
Gets the name of this (maybe aggregate) netclass in a format for internal usage or for export to exte...
Handle the data for a net.
const wxString & GetNetname() const
void ActivateItem(long aItemRow) override
int Search(const wxString &aQuery) override
NETS_SEARCH_HANDLER(PCB_EDIT_FRAME *aFrame)
wxString getResultCell(BOARD_ITEM *aItem, int aCol) override
void SelectItems(std::vector< long > &aItemRows) override
static TOOL_ACTION properties
Activation of the edit tool.
The main frame for Pcbnew.
A set of BOARD_ITEMs (i.e., without duplicates).
void ActivateItem(long aItemRow) override
PCB_SEARCH_HANDLER(const wxString &aName, PCB_EDIT_FRAME *aFrame)
void Sort(int aCol, bool aAscending, std::vector< long > *aSelection) override
void SelectItems(std::vector< long > &aItemRows) override
std::vector< BOARD_ITEM * > m_hitlist
static bool ClassOf(const EDA_ITEM *aItem)
static bool ClassOf(const EDA_ITEM *aItem)
wxString getResultCell(BOARD_ITEM *aItem, int aCol) override
RATSNEST_SEARCH_HANDLER(PCB_EDIT_FRAME *aFrame)
int Search(const wxString &aQuery) override
void SelectItems(std::vector< long > &aItemRows) override
void ActivateItem(long aItemRow) override
Describe ratsnest for a single net.
const std::vector< CN_EDGE > & GetEdges() const
std::vector< SCH_SEARCH_HIT > m_hitlist
std::vector< std::tuple< wxString, int, wxListColumnFormat > > m_columns
TEXT_SEARCH_HANDLER(SCH_EDIT_FRAME *aFrame)
int Search(const wxString &aQuery) override
wxString getResultCell(const SCH_SEARCH_HIT &hit, int aCol) override
ZONE_SEARCH_HANDLER(PCB_EDIT_FRAME *aFrame)
wxString getResultCell(BOARD_ITEM *aItem, int aCol) override
int Search(const wxString &aQuery) override
Handle a list of polygons defining a copper zone.
double GetOutlineArea()
This area is cached from the most recent call to CalculateOutlineArea().
bool GetIsRuleArea() const
Accessors to parameters used in Rule Area zones:
double GetFilledArea()
This area is cached from the most recent call to CalculateFilledArea().
const wxString & GetZoneName() const
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
unsigned GetAssignedPriority() const
PCB_LAYER_ID
A quick note on layer IDs:
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
@ NPTH
like PAD_PTH, but not plated mechanical use only, no connection allowed
Class to handle a set of BOARD_ITEMs.
Class that computes missing connections on a PCB.
wxString UnescapeString(const wxString &aSource)
SELECTION_ZOOM selection_zoom
bool search_hidden_fields
EDA_SEARCH_MATCH_MODE matchMode
constexpr KICAD_T BaseType(const KICAD_T aType)
Return the underlying type of the given type.
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_TABLECELL_T
class PCB_TABLECELL, PCB_TEXTBOX for use in tables
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type