Return all results with an empty search pane filter.

Also moves the EDA_EVT_SCHEMATIC_CHANGED event so it fires after the
schematic has been loaded.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/14871
This commit is contained in:
Jeff Young 2023-06-10 23:05:01 +01:00
parent 3f758711fd
commit 61493b8489
3 changed files with 72 additions and 79 deletions

View File

@ -517,6 +517,24 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
TestDanglingEnds();
UpdateHierarchyNavigator();
wxCommandEvent e( EDA_EVT_SCHEMATIC_CHANGED );
ProcessEventLocally( e );
for( wxEvtHandler* listener : m_schematicChangeListeners )
{
wxCHECK2( listener, continue );
// Use the windows variant when handling event messages in case there is any special
// event handler pre and/or post processing specific to windows.
wxWindow* win = dynamic_cast<wxWindow*>( listener );
if( win )
win->HandleWindowEvent( e );
else
listener->SafelyProcessEvent( e );
}
updateTitle();
m_toolManager->GetTool<SCH_NAVIGATE_TOOL>()->ResetHistory();

View File

@ -788,24 +788,6 @@ void SCH_EDIT_FRAME::CreateScreens()
SCH_SCREEN* screen = new SCH_SCREEN( m_schematic );
SetScreen( screen );
}
wxCommandEvent e( EDA_EVT_SCHEMATIC_CHANGED );
ProcessEventLocally( e );
for( wxEvtHandler* listener : m_schematicChangeListeners )
{
wxCHECK2( listener, continue );
// Use the windows variant when handling event messages in case there is any special
// event handler pre and/or post processing specific to windows.
wxWindow* win = dynamic_cast<wxWindow*>( listener );
if( win )
win->HandleWindowEvent( e );
else
listener->SafelyProcessEvent( e );
}
}
@ -843,6 +825,23 @@ void SCH_EDIT_FRAME::HardRedraw()
if( Schematic().Settings().m_IntersheetRefsShow )
RecomputeIntersheetRefs();
wxCommandEvent e( EDA_EVT_SCHEMATIC_CHANGED );
ProcessEventLocally( e );
for( wxEvtHandler* listener : m_schematicChangeListeners )
{
wxCHECK2( listener, continue );
// Use the windows variant when handling event messages in case there is any special
// event handler pre and/or post processing specific to windows.
wxWindow* win = dynamic_cast<wxWindow*>( listener );
if( win )
win->HandleWindowEvent( e );
else
listener->SafelyProcessEvent( e );
}
FocusOnItem( nullptr );
GetCanvas()->DisplaySheet( GetCurrentSheet().LastScreen() );

View File

@ -129,25 +129,19 @@ int SYMBOL_SEARCH_HANDLER::Search( const wxString& aQuery )
frp.matchMode = EDA_SEARCH_MATCH_MODE::PERMISSIVE;
frp.searchCurrentSheetOnly = false;
auto search = [frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
auto search =
[frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
{
if( item->Type() == SCH_SYMBOL_T )
{
SCH_SYMBOL* sym = dynamic_cast<SCH_SYMBOL*>( item );
if( sym->IsPower() )
return false;
bool hit = false;
for( SCH_FIELD& field : sym->GetFields() )
{
if( field.Matches( frp, sheet ) )
{
hit = true;
}
}
if( hit )
{
if( frp.findString.IsEmpty() || field.Matches( frp, sheet ) )
return true;
}
}
@ -209,30 +203,14 @@ int TEXT_SEARCH_HANDLER::Search( const wxString& aQuery )
frp.matchMode = EDA_SEARCH_MATCH_MODE::PERMISSIVE;
frp.searchCurrentSheetOnly = false;
auto search = [frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
auto search =
[frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
{
if( item->Type() == SCH_TEXT_T )
{
SCH_TEXT* text = dynamic_cast<SCH_TEXT*>( item );
wxCHECK( text, false );
if( text->Matches( frp, sheet ) )
if( item->Type() == SCH_TEXT_T || item->Type() == SCH_TEXTBOX_T )
{
if( frp.findString.IsEmpty() || item->Matches( frp, sheet ) )
return true;
}
}
else if( item->Type() == SCH_TEXTBOX_T )
{
SCH_TEXTBOX* text = dynamic_cast<SCH_TEXTBOX*>( item );
wxCHECK( text, false );
if( text->Matches( frp, sheet ) )
{
return true;
}
}
return false;
};
@ -311,20 +289,18 @@ int LABEL_SEARCH_HANDLER::Search( const wxString& aQuery )
frp.matchMode = EDA_SEARCH_MATCH_MODE::PERMISSIVE;
frp.searchCurrentSheetOnly = false;
auto search = [frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
auto search =
[frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet )
{
if( item->Type() == SCH_LABEL_T || item->Type() == SCH_GLOBAL_LABEL_T
|| item->Type() == SCH_HIER_LABEL_T )
if( item->IsType( { SCH_LABEL_LOCATE_ANY_T } ) )
{
SCH_LABEL_BASE* lbl = dynamic_cast<SCH_LABEL_BASE*>( item );
wxCHECK( lbl, false );
if( lbl->Matches( frp, sheet ) )
{
if( frp.findString.IsEmpty() || lbl->Matches( frp, sheet ) )
return true;
}
}
return false;
};