mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-13 17:53:11 +02:00
ADDED: metadata searching.
Symbol and footprint search panels can now optionally search library links, descriptions and keywords. Fixes https://gitlab.com/kicad/code/kicad/-/issues/10602
This commit is contained in:
parent
ec6bc85a29
commit
98ec2d7ba2
@ -196,6 +196,9 @@ APP_SETTINGS_BASE::APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaV
|
||||
m_params.emplace_back( new PARAM<bool>( "search_pane.search_hidden_fields",
|
||||
&m_SearchPane.search_hidden_fields, true ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "search_pane.search_metadata",
|
||||
&m_SearchPane.search_metadata, false ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "system.first_run_shown",
|
||||
&m_System.first_run_shown, false ) ); //@todo RFB remove? - not used
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
#define ID_TOGGLE_ZOOM_TO_SELECTION 14000
|
||||
#define ID_TOGGLE_PAN_TO_SELECTION 14001
|
||||
#define ID_TOGGLE_SEARCH_HIDDEN_FIELDS 14002
|
||||
#define ID_TOGGLE_SEARCH_METADATA 14003
|
||||
|
||||
|
||||
class SEARCH_PANE_MENU : public ACTION_MENU
|
||||
@ -50,6 +51,8 @@ public:
|
||||
AppendSeparator();
|
||||
Add( _( "Search Hidden Fields" ), wxEmptyString,
|
||||
ID_TOGGLE_SEARCH_HIDDEN_FIELDS, BITMAPS::invisible_text, true );
|
||||
Add( _( "Search Metadata" ), _( "Search library links, descriptions and keywords" ),
|
||||
ID_TOGGLE_SEARCH_METADATA, BITMAPS::library, true );
|
||||
|
||||
updateZoomPanCheckboxes();
|
||||
}
|
||||
@ -79,6 +82,12 @@ public:
|
||||
updateZoomPanCheckboxes();
|
||||
m_searchPane->RefreshSearch();
|
||||
break;
|
||||
|
||||
case ID_TOGGLE_SEARCH_METADATA:
|
||||
settings.search_metadata = item->IsChecked();
|
||||
updateZoomPanCheckboxes();
|
||||
m_searchPane->RefreshSearch();
|
||||
break;
|
||||
}
|
||||
|
||||
return OPT_TOOL_EVENT();
|
||||
@ -92,10 +101,12 @@ private:
|
||||
wxMenuItem* zoomCb = FindItem( ID_TOGGLE_ZOOM_TO_SELECTION );
|
||||
wxMenuItem* panCb = FindItem( ID_TOGGLE_PAN_TO_SELECTION );
|
||||
wxMenuItem* hiddenFieldsCb = FindItem( ID_TOGGLE_SEARCH_HIDDEN_FIELDS );
|
||||
wxMenuItem* metadataCb = FindItem( ID_TOGGLE_SEARCH_METADATA );
|
||||
|
||||
zoomCb->Check( settings.selection_zoom == APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::ZOOM );
|
||||
panCb->Check( settings.selection_zoom == APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::PAN );
|
||||
hiddenFieldsCb->Check( settings.search_hidden_fields );
|
||||
metadataCb->Check( settings.search_metadata );
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -264,6 +264,7 @@ void SCH_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
|
||||
{
|
||||
searchData->replaceReferences = cfg->m_FindReplaceExtra.replace_references;
|
||||
searchData->searchAllFields = cfg->m_FindReplaceExtra.search_all_fields;
|
||||
searchData->searchMetadata = cfg->m_FindReplaceExtra.search_metadata;
|
||||
searchData->searchAllPins = cfg->m_FindReplaceExtra.search_all_pins;
|
||||
searchData->searchCurrentSheetOnly = cfg->m_FindReplaceExtra.search_current_sheet_only;
|
||||
searchData->searchSelectedOnly = cfg->m_FindReplaceExtra.search_selected_only;
|
||||
@ -300,6 +301,7 @@ void SCH_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
|
||||
{
|
||||
cfg->m_FindReplaceExtra.replace_references = searchData->replaceReferences;
|
||||
cfg->m_FindReplaceExtra.search_all_fields = searchData->searchAllFields;
|
||||
cfg->m_FindReplaceExtra.search_metadata = searchData->searchMetadata;
|
||||
cfg->m_FindReplaceExtra.search_all_pins = searchData->searchAllPins;
|
||||
cfg->m_FindReplaceExtra.search_current_sheet_only =
|
||||
searchData->searchCurrentSheetOnly;
|
||||
|
@ -317,6 +317,7 @@ public:
|
||||
struct FIND_REPLACE_EXTRA
|
||||
{
|
||||
bool search_all_fields;
|
||||
bool search_metadata;
|
||||
bool search_all_pins;
|
||||
bool search_current_sheet_only;
|
||||
bool search_selected_only;
|
||||
|
@ -640,16 +640,15 @@ GR_TEXT_V_ALIGN_T SCH_FIELD::GetEffectiveVertJustify() const
|
||||
|
||||
bool SCH_FIELD::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const
|
||||
{
|
||||
bool searchHiddenFields = false;
|
||||
bool searchAndReplace = false;
|
||||
bool searchHiddenFields = aSearchData.searchAllFields;
|
||||
bool searchMetadata = aSearchData.searchMetadata;
|
||||
bool searchAndReplace = aSearchData.searchAndReplace;
|
||||
bool replaceReferences = false;
|
||||
|
||||
try
|
||||
{
|
||||
// downcast
|
||||
const SCH_SEARCH_DATA& schSearchData = dynamic_cast<const SCH_SEARCH_DATA&>( aSearchData );
|
||||
searchHiddenFields = schSearchData.searchAllFields;
|
||||
searchAndReplace = schSearchData.searchAndReplace;
|
||||
replaceReferences = schSearchData.replaceReferences;
|
||||
}
|
||||
catch( const std::bad_cast& )
|
||||
@ -673,6 +672,9 @@ bool SCH_FIELD::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) co
|
||||
if( !parentSymbol )
|
||||
return false;
|
||||
|
||||
if( parentSymbol->Matches( aSearchData, aAuxData ) )
|
||||
return true;
|
||||
|
||||
wxASSERT( aAuxData );
|
||||
|
||||
// Take sheet path into account which effects the reference field and the unit for
|
||||
|
@ -2083,6 +2083,18 @@ void SCH_SYMBOL::Rotate( const VECTOR2I& aCenter, bool aRotateCCW )
|
||||
|
||||
bool SCH_SYMBOL::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const
|
||||
{
|
||||
if( aSearchData.searchMetadata )
|
||||
{
|
||||
if( EDA_ITEM::Matches( GetSchSymbolLibraryName(), aSearchData ) )
|
||||
return true;
|
||||
|
||||
if( EDA_ITEM::Matches( GetDescription(), aSearchData ) )
|
||||
return true;
|
||||
|
||||
if( EDA_ITEM::Matches( GetKeyWords(), aSearchData ) )
|
||||
return true;
|
||||
}
|
||||
|
||||
for( SCH_ITEM& drawItem : GetLibSymbolRef()->GetDrawItems() )
|
||||
{
|
||||
if( drawItem.Matches( aSearchData, aAuxData ) )
|
||||
|
@ -179,6 +179,7 @@ int SYMBOL_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -267,6 +268,7 @@ int POWER_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -341,6 +343,7 @@ int TEXT_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -428,6 +431,7 @@ int LABEL_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
|
@ -47,6 +47,7 @@ struct EDA_SEARCH_DATA
|
||||
|
||||
bool searchAndReplace;
|
||||
bool searchAllFields;
|
||||
bool searchMetadata;
|
||||
|
||||
bool matchCase;
|
||||
bool markersOnly;
|
||||
@ -57,6 +58,7 @@ struct EDA_SEARCH_DATA
|
||||
replaceString(),
|
||||
searchAndReplace( false ),
|
||||
searchAllFields( false ),
|
||||
searchMetadata( false ),
|
||||
matchCase( false ),
|
||||
markersOnly( false ),
|
||||
matchMode( EDA_SEARCH_MATCH_MODE::PLAIN )
|
||||
@ -70,6 +72,7 @@ struct EDA_SEARCH_DATA
|
||||
regex_string( other.regex_string ),
|
||||
searchAndReplace( other.searchAndReplace ),
|
||||
searchAllFields( other.searchAllFields ),
|
||||
searchMetadata( other.searchMetadata ),
|
||||
matchCase( other.matchCase ),
|
||||
markersOnly( other.markersOnly ),
|
||||
matchMode( other.matchMode )
|
||||
|
@ -115,6 +115,7 @@ public:
|
||||
|
||||
SELECTION_ZOOM selection_zoom;
|
||||
bool search_hidden_fields;
|
||||
bool search_metadata;
|
||||
};
|
||||
|
||||
struct GRAPHICS
|
||||
|
@ -2070,6 +2070,24 @@ void FOOTPRINT::Add3DModel( FP_3DMODEL* a3DModel )
|
||||
}
|
||||
|
||||
|
||||
bool FOOTPRINT::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const
|
||||
{
|
||||
if( aSearchData.searchMetadata )
|
||||
{
|
||||
if( EDA_ITEM::Matches( GetFPIDAsString(), aSearchData ) )
|
||||
return true;
|
||||
|
||||
if( EDA_ITEM::Matches( GetLibDescription(), aSearchData ) )
|
||||
return true;
|
||||
|
||||
if( EDA_ITEM::Matches( GetKeywords(), aSearchData ) )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// see footprint.h
|
||||
INSPECT_RESULT FOOTPRINT::Visit( INSPECTOR inspector, void* testData,
|
||||
const std::vector<KICAD_T>& aScanTypes )
|
||||
|
@ -588,6 +588,8 @@ public:
|
||||
|
||||
bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
|
||||
|
||||
bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
|
||||
|
||||
/**
|
||||
* Test if a point is inside the bounding polygon of the footprint.
|
||||
*
|
||||
|
@ -137,6 +137,7 @@ int FOOTPRINT_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -144,20 +145,28 @@ int FOOTPRINT_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
|
||||
for( FOOTPRINT* fp : board->Footprints() )
|
||||
{
|
||||
if( frp.findString.IsEmpty() )
|
||||
{
|
||||
m_hitlist.push_back( fp );
|
||||
continue;
|
||||
}
|
||||
bool found = false;
|
||||
|
||||
for( PCB_FIELD* field : fp->GetFields() )
|
||||
if( frp.findString.IsEmpty() )
|
||||
found = true;
|
||||
|
||||
if( !found && fp->Matches( frp, nullptr ) )
|
||||
found = true;
|
||||
|
||||
if( !found )
|
||||
{
|
||||
if( field->Matches( frp, nullptr ) )
|
||||
for( PCB_FIELD* field : fp->GetFields() )
|
||||
{
|
||||
m_hitlist.push_back( fp );
|
||||
break;
|
||||
if( field->Matches( frp, nullptr ) )
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( found )
|
||||
m_hitlist.push_back( fp );
|
||||
}
|
||||
|
||||
return (int) m_hitlist.size();
|
||||
@ -208,6 +217,7 @@ int ZONE_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -273,6 +283,7 @@ int TEXT_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -341,6 +352,7 @@ int NETS_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
@ -423,6 +435,7 @@ int RATSNEST_SEARCH_HANDLER::Search( const wxString& aQuery )
|
||||
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.)
|
||||
|
Loading…
x
Reference in New Issue
Block a user