mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
groups: add search handlers
This commit is contained in:
parent
a64278a12c
commit
8e480445bc
@ -424,6 +424,12 @@ void SCH_GROUP::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_I
|
||||
}
|
||||
|
||||
|
||||
bool SCH_GROUP::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const
|
||||
{
|
||||
return EDA_ITEM::Matches( UnescapeString( GetName() ), aSearchData );
|
||||
}
|
||||
|
||||
|
||||
void SCH_GROUP::RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode )
|
||||
{
|
||||
try
|
||||
|
@ -160,6 +160,9 @@ public:
|
||||
/// @copydoc EDA_ITEM::GetMsgPanelInfo
|
||||
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
|
||||
|
||||
/// @copydoc EDA_ITEM::Matches
|
||||
bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
|
||||
|
||||
///< @copydoc SCH_ITEM::RunOnChildren
|
||||
void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
|
||||
|
||||
|
@ -50,6 +50,7 @@ SCH_SEARCH_PANE::SCH_SEARCH_PANE( SCH_EDIT_FRAME* aFrame ) :
|
||||
AddSearcher( new POWER_SEARCH_HANDLER( aFrame ) );
|
||||
AddSearcher( new TEXT_SEARCH_HANDLER( aFrame ) );
|
||||
AddSearcher( new LABEL_SEARCH_HANDLER( aFrame ) );
|
||||
AddSearcher( new GROUP_SEARCH_HANDLER( aFrame ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <sch_edit_frame.h>
|
||||
#include <sch_painter.h>
|
||||
#include <sch_symbol.h>
|
||||
#include <sch_group.h>
|
||||
#include <sch_label.h>
|
||||
#include <sch_text.h>
|
||||
#include <sch_textbox.h>
|
||||
@ -489,3 +490,68 @@ wxString LABEL_SEARCH_HANDLER::getResultCell( const SCH_SEARCH_HIT& aHit, int aC
|
||||
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
||||
|
||||
GROUP_SEARCH_HANDLER::GROUP_SEARCH_HANDLER( SCH_EDIT_FRAME* aFrame ) :
|
||||
SCH_SEARCH_HANDLER( _HKI( "Groups" ), aFrame )
|
||||
{
|
||||
m_columns.emplace_back( _HKI( "Name" ), 6, wxLIST_FORMAT_LEFT );
|
||||
m_columns.emplace_back( _HKI( "Page" ), 2, wxLIST_FORMAT_CENTER );
|
||||
m_columns.emplace_back( wxT( "X" ), 3, wxLIST_FORMAT_CENTER );
|
||||
m_columns.emplace_back( wxT( "Y" ), 3, wxLIST_FORMAT_CENTER);
|
||||
}
|
||||
|
||||
|
||||
int GROUP_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
{
|
||||
m_hitlist.clear();
|
||||
|
||||
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
|
||||
SCH_SEARCH_DATA frp;
|
||||
|
||||
frp.searchAllFields = settings.search_hidden_fields;
|
||||
frp.searchMetadata = settings.search_metadata;
|
||||
frp.findString = aQuery;
|
||||
|
||||
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
|
||||
frp.matchMode = EDA_SEARCH_MATCH_MODE::PERMISSIVE;
|
||||
frp.searchCurrentSheetOnly = false;
|
||||
|
||||
auto search =
|
||||
[&frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
|
||||
{
|
||||
if( item->IsType( { SCH_GROUP_T } ) )
|
||||
{
|
||||
SCH_GROUP* group = static_cast<SCH_GROUP*>( item );
|
||||
|
||||
if( frp.findString.IsEmpty() || group->Matches( frp, sheet ) )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
FindAll( search );
|
||||
|
||||
return (int) m_hitlist.size();
|
||||
}
|
||||
|
||||
|
||||
wxString GROUP_SEARCH_HANDLER::getResultCell( const SCH_SEARCH_HIT& aHit, int aCol )
|
||||
{
|
||||
SCH_GROUP* group = dynamic_cast<SCH_GROUP*>( aHit.item );
|
||||
|
||||
if( !group )
|
||||
return wxEmptyString;
|
||||
|
||||
if( aCol == 0 )
|
||||
return group->GetName();
|
||||
else if( aCol == 1 )
|
||||
return aHit.sheetPath->GetPageNumber();
|
||||
else if( aCol == 2 )
|
||||
return m_frame->MessageTextFromValue( group->GetPosition().x );
|
||||
else if( aCol == 3 )
|
||||
return m_frame->MessageTextFromValue( group->GetPosition().y );
|
||||
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
@ -115,4 +115,15 @@ protected:
|
||||
wxString getResultCell( const SCH_SEARCH_HIT& hit, int aCol ) override;
|
||||
};
|
||||
|
||||
class GROUP_SEARCH_HANDLER : public SCH_SEARCH_HANDLER
|
||||
{
|
||||
public:
|
||||
GROUP_SEARCH_HANDLER( SCH_EDIT_FRAME* aFrame );
|
||||
|
||||
int Search( const wxString& aQuery ) override;
|
||||
|
||||
protected:
|
||||
wxString getResultCell( const SCH_SEARCH_HIT& hit, int aCol ) override;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -440,6 +440,12 @@ void PCB_GROUP::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_I
|
||||
}
|
||||
|
||||
|
||||
bool PCB_GROUP::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const
|
||||
{
|
||||
return EDA_ITEM::Matches( UnescapeString( GetName() ), aSearchData );
|
||||
}
|
||||
|
||||
|
||||
void PCB_GROUP::RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const
|
||||
{
|
||||
try
|
||||
|
@ -190,6 +190,9 @@ public:
|
||||
/// @copydoc EDA_ITEM::GetMsgPanelInfo
|
||||
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
|
||||
|
||||
/// @copydoc EDA_ITEM::Matches
|
||||
bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
|
||||
|
||||
///< @copydoc BOARD_ITEM::RunOnChildren
|
||||
void RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const override;
|
||||
|
||||
|
@ -46,6 +46,7 @@ PCB_SEARCH_PANE::PCB_SEARCH_PANE( PCB_EDIT_FRAME* aFrame ) :
|
||||
AddSearcher( new NETS_SEARCH_HANDLER( aFrame ) );
|
||||
AddSearcher( new RATSNEST_SEARCH_HANDLER( aFrame ) );
|
||||
AddSearcher( new TEXT_SEARCH_HANDLER( aFrame ) );
|
||||
AddSearcher( new GROUP_SEARCH_HANDLER( aFrame ) );
|
||||
}
|
||||
|
||||
|
||||
@ -158,4 +159,4 @@ void PCB_SEARCH_PANE::OnBoardCompositeUpdate( BOARD& aBoard, std::vector<BOARD_I
|
||||
return;
|
||||
|
||||
RefreshSearch();
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <pcb_edit_frame.h>
|
||||
#include <pcb_marker.h>
|
||||
#include <pcb_painter.h>
|
||||
#include <pcb_group.h>
|
||||
#include <pcb_textbox.h>
|
||||
#include <pcb_text.h>
|
||||
#include <pcb_dimension.h>
|
||||
@ -336,6 +337,61 @@ wxString TEXT_SEARCH_HANDLER::getResultCell( BOARD_ITEM* aItem, int aCol )
|
||||
}
|
||||
|
||||
|
||||
GROUP_SEARCH_HANDLER::GROUP_SEARCH_HANDLER( PCB_EDIT_FRAME* aFrame ) :
|
||||
PCB_SEARCH_HANDLER( _HKI( "Groups" ), aFrame )
|
||||
{
|
||||
m_columns.emplace_back( _HKI( "Type" ), 2, wxLIST_FORMAT_LEFT );
|
||||
m_columns.emplace_back( _HKI( "Name" ), 6, wxLIST_FORMAT_LEFT );
|
||||
m_columns.emplace_back( wxT( "X" ), 3, wxLIST_FORMAT_CENTER );
|
||||
m_columns.emplace_back( wxT( "Y" ), 3, wxLIST_FORMAT_CENTER );
|
||||
}
|
||||
|
||||
|
||||
int GROUP_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
{
|
||||
m_hitlist.clear();
|
||||
BOARD* board = m_frame->GetBoard();
|
||||
|
||||
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
|
||||
EDA_SEARCH_DATA frp;
|
||||
|
||||
frp.searchAllFields = settings.search_hidden_fields;
|
||||
frp.searchMetadata = settings.search_metadata;
|
||||
frp.findString = aQuery;
|
||||
|
||||
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
|
||||
frp.matchMode = EDA_SEARCH_MATCH_MODE::PERMISSIVE;
|
||||
|
||||
for( BOARD_ITEM* item : board->Groups() )
|
||||
{
|
||||
if( frp.findString.IsEmpty() || item->Matches( frp, nullptr ) )
|
||||
m_hitlist.push_back( item );
|
||||
}
|
||||
|
||||
return (int) m_hitlist.size();
|
||||
}
|
||||
|
||||
|
||||
wxString GROUP_SEARCH_HANDLER::getResultCell( BOARD_ITEM* aItem, int aCol )
|
||||
{
|
||||
if( aCol == 0 )
|
||||
{
|
||||
if( aItem->Type() == PCB_GROUP_T )
|
||||
return _( "Group" );
|
||||
else if( aItem->Type() == PCB_GENERATOR_T )
|
||||
return _( "Generator" );
|
||||
}
|
||||
else if( aCol == 1 )
|
||||
return static_cast<PCB_GROUP*>( aItem )->GetName();
|
||||
else if( aCol == 2 )
|
||||
return m_frame->MessageTextFromCoord( aItem->GetX(), ORIGIN_TRANSFORMS::ABS_X_COORD );
|
||||
else if( aCol == 3 )
|
||||
return m_frame->MessageTextFromCoord( aItem->GetY(), ORIGIN_TRANSFORMS::ABS_Y_COORD );
|
||||
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
||||
|
||||
NETS_SEARCH_HANDLER::NETS_SEARCH_HANDLER( PCB_EDIT_FRAME* aFrame ) :
|
||||
PCB_SEARCH_HANDLER( _HKI( "Nets" ), aFrame )
|
||||
{
|
||||
|
@ -100,6 +100,18 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class GROUP_SEARCH_HANDLER : public PCB_SEARCH_HANDLER
|
||||
{
|
||||
public:
|
||||
GROUP_SEARCH_HANDLER( PCB_EDIT_FRAME* aFrame );
|
||||
|
||||
int Search( const wxString& aQuery ) override;
|
||||
|
||||
private:
|
||||
wxString getResultCell( BOARD_ITEM* aItem, int aCol ) override;
|
||||
};
|
||||
|
||||
|
||||
class NETS_SEARCH_HANDLER : public PCB_SEARCH_HANDLER
|
||||
{
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user