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 )
|
void SCH_GROUP::RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -160,6 +160,9 @@ public:
|
|||||||
/// @copydoc EDA_ITEM::GetMsgPanelInfo
|
/// @copydoc EDA_ITEM::GetMsgPanelInfo
|
||||||
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
|
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
|
///< @copydoc SCH_ITEM::RunOnChildren
|
||||||
void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
|
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 POWER_SEARCH_HANDLER( aFrame ) );
|
||||||
AddSearcher( new TEXT_SEARCH_HANDLER( aFrame ) );
|
AddSearcher( new TEXT_SEARCH_HANDLER( aFrame ) );
|
||||||
AddSearcher( new LABEL_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_edit_frame.h>
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
#include <sch_symbol.h>
|
#include <sch_symbol.h>
|
||||||
|
#include <sch_group.h>
|
||||||
#include <sch_label.h>
|
#include <sch_label.h>
|
||||||
#include <sch_text.h>
|
#include <sch_text.h>
|
||||||
#include <sch_textbox.h>
|
#include <sch_textbox.h>
|
||||||
@ -489,3 +490,68 @@ wxString LABEL_SEARCH_HANDLER::getResultCell( const SCH_SEARCH_HIT& aHit, int aC
|
|||||||
|
|
||||||
return wxEmptyString;
|
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;
|
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
|
#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
|
void PCB_GROUP::RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -190,6 +190,9 @@ public:
|
|||||||
/// @copydoc EDA_ITEM::GetMsgPanelInfo
|
/// @copydoc EDA_ITEM::GetMsgPanelInfo
|
||||||
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
|
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
|
///< @copydoc BOARD_ITEM::RunOnChildren
|
||||||
void RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const override;
|
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 NETS_SEARCH_HANDLER( aFrame ) );
|
||||||
AddSearcher( new RATSNEST_SEARCH_HANDLER( aFrame ) );
|
AddSearcher( new RATSNEST_SEARCH_HANDLER( aFrame ) );
|
||||||
AddSearcher( new TEXT_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;
|
return;
|
||||||
|
|
||||||
RefreshSearch();
|
RefreshSearch();
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <pcb_edit_frame.h>
|
#include <pcb_edit_frame.h>
|
||||||
#include <pcb_marker.h>
|
#include <pcb_marker.h>
|
||||||
#include <pcb_painter.h>
|
#include <pcb_painter.h>
|
||||||
|
#include <pcb_group.h>
|
||||||
#include <pcb_textbox.h>
|
#include <pcb_textbox.h>
|
||||||
#include <pcb_text.h>
|
#include <pcb_text.h>
|
||||||
#include <pcb_dimension.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 ) :
|
NETS_SEARCH_HANDLER::NETS_SEARCH_HANDLER( PCB_EDIT_FRAME* aFrame ) :
|
||||||
PCB_SEARCH_HANDLER( _HKI( "Nets" ), 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
|
class NETS_SEARCH_HANDLER : public PCB_SEARCH_HANDLER
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user