From 61493b84895faac6857b3e99c6ff1b0a1c507be0 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sat, 10 Jun 2023 23:05:01 +0100 Subject: [PATCH] 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 --- eeschema/files-io.cpp | 18 +++++ eeschema/sch_edit_frame.cpp | 35 +++++----- eeschema/widgets/search_handlers.cpp | 98 +++++++++++----------------- 3 files changed, 72 insertions(+), 79 deletions(-) diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp index 848170ff67..6cf6c0b972 100644 --- a/eeschema/files-io.cpp +++ b/eeschema/files-io.cpp @@ -517,6 +517,24 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector& 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( listener ); + + if( win ) + win->HandleWindowEvent( e ); + else + listener->SafelyProcessEvent( e ); + } + updateTitle(); m_toolManager->GetTool()->ResetHistory(); diff --git a/eeschema/sch_edit_frame.cpp b/eeschema/sch_edit_frame.cpp index 29127648b5..0cfa70dc46 100644 --- a/eeschema/sch_edit_frame.cpp +++ b/eeschema/sch_edit_frame.cpp @@ -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( 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( listener ); + + if( win ) + win->HandleWindowEvent( e ); + else + listener->SafelyProcessEvent( e ); + } + FocusOnItem( nullptr ); GetCanvas()->DisplaySheet( GetCurrentSheet().LastScreen() ); diff --git a/eeschema/widgets/search_handlers.cpp b/eeschema/widgets/search_handlers.cpp index 4e3a197adb..258a25f2ef 100644 --- a/eeschema/widgets/search_handlers.cpp +++ b/eeschema/widgets/search_handlers.cpp @@ -129,31 +129,25 @@ 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 ) - { - if( item->Type() == SCH_SYMBOL_T ) - { - SCH_SYMBOL* sym = dynamic_cast( item ); - if( sym->IsPower() ) - return false; - - bool hit = false; - for( SCH_FIELD& field : sym->GetFields() ) + auto search = + [frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet ) { - if( field.Matches( frp, sheet ) ) + if( item->Type() == SCH_SYMBOL_T ) { - hit = true; + SCH_SYMBOL* sym = dynamic_cast( item ); + + if( sym->IsPower() ) + return false; + + for( SCH_FIELD& field : sym->GetFields() ) + { + if( frp.findString.IsEmpty() || field.Matches( frp, sheet ) ) + return true; + } } - } - if( hit ) - { - return true; - } - } - - return false; - }; + return false; + }; FindAll( search ); @@ -209,33 +203,17 @@ 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 ) - { - if( item->Type() == SCH_TEXT_T ) - { - SCH_TEXT* text = dynamic_cast( item ); - - wxCHECK( text, false ); - - if( text->Matches( frp, sheet ) ) + auto search = + [frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet ) { - return true; - } - } - else if( item->Type() == SCH_TEXTBOX_T ) - { - SCH_TEXTBOX* text = dynamic_cast( item ); + if( item->Type() == SCH_TEXT_T || item->Type() == SCH_TEXTBOX_T ) + { + if( frp.findString.IsEmpty() || item->Matches( frp, sheet ) ) + return true; + } - wxCHECK( text, false ); - - if( text->Matches( frp, sheet ) ) - { - return true; - } - } - - return false; - }; + return false; + }; FindAll( search ); @@ -311,23 +289,21 @@ 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 ) - { - if( item->Type() == SCH_LABEL_T || item->Type() == SCH_GLOBAL_LABEL_T - || item->Type() == SCH_HIER_LABEL_T ) - { - SCH_LABEL_BASE* lbl = dynamic_cast( item ); - - wxCHECK( lbl, false ); - - if( lbl->Matches( frp, sheet ) ) + auto search = + [frp]( SCH_ITEM* item, SCH_SHEET_PATH* sheet ) { - return true; - } - } + if( item->IsType( { SCH_LABEL_LOCATE_ANY_T } ) ) + { + SCH_LABEL_BASE* lbl = dynamic_cast( item ); - return false; - }; + wxCHECK( lbl, false ); + + if( frp.findString.IsEmpty() || lbl->Matches( frp, sheet ) ) + return true; + } + + return false; + }; FindAll( search );