From 846e4aed426cb33eb1c306d4849e5e0f8b865bad Mon Sep 17 00:00:00 2001 From: Jonathan Haas Date: Fri, 9 Apr 2021 11:17:36 +0200 Subject: [PATCH] Fix selection filter in Edit Text and Graphics dialog Fixes https://gitlab.com/kicad/code/kicad/issues/7966 Fixes https://gitlab.com/kicad/code/kicad/issues/8149 --- .../dialog_global_edit_text_and_graphics.cpp | 26 ++++++++++--------- .../dialog_global_edit_text_and_graphics.cpp | 20 +++++++------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp b/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp index b65c07c3e8..7bacaa2be2 100644 --- a/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp +++ b/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp @@ -94,7 +94,7 @@ protected: bool TransferDataFromWindow() override; void visitItem( const SCH_SHEET_PATH& aSheetPath, SCH_ITEM* aItem ); - void processItem( const SCH_SHEET_PATH& aSheetPath, SCH_ITEM* aItem ); + void processItem( const SCH_SHEET_PATH& aSheetPath, SCH_ITEM* aItem, SCH_ITEM* aParentItem ); }; @@ -224,8 +224,15 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::OnUpdateUI( wxUpdateUIEvent& ) void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem( const SCH_SHEET_PATH& aSheetPath, - SCH_ITEM* aItem ) + SCH_ITEM* aItem, + SCH_ITEM* aParentItem = nullptr ) { + if( m_selectedFilterOpt->GetValue() && !m_selection.Contains( aItem ) + && ( aParentItem == nullptr || !m_selection.Contains( aParentItem ) ) ) + { + return; + } + EDA_TEXT* eda_text = dynamic_cast( aItem ); SCH_TEXT* sch_text = dynamic_cast( aItem ); SCH_LINE* lineItem = dynamic_cast( aItem ); @@ -310,11 +317,6 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem( const SCH_SHEET_PATH& aS void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( const SCH_SHEET_PATH& aSheetPath, SCH_ITEM* aItem ) { - if( m_selectedFilterOpt->GetValue() && !m_selection.Contains( aItem ) ) - { - return; - } - if( m_netFilterOpt->GetValue() && !m_netFilter->GetValue().IsEmpty() ) { SCH_CONNECTION* connection = aItem->Connection( &aSheetPath ); @@ -368,10 +370,10 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( const SCH_SHEET_PATH& aShe SCH_COMPONENT* component = (SCH_COMPONENT*) aItem; if( m_references->GetValue() ) - processItem( aSheetPath, component->GetField( REFERENCE_FIELD ) ); + processItem( aSheetPath, component->GetField( REFERENCE_FIELD ), aItem ); if( m_values->GetValue() ) - processItem( aSheetPath, component->GetField( VALUE_FIELD ) ); + processItem( aSheetPath, component->GetField( VALUE_FIELD ), aItem ); if( m_otherFields->GetValue() ) { @@ -383,7 +385,7 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( const SCH_SHEET_PATH& aShe if( !m_fieldnameFilterOpt->GetValue() || m_fieldnameFilter->GetValue().IsEmpty() || WildCompareString( m_fieldnameFilter->GetValue(), fieldName, false ) ) { - processItem( aSheetPath, &field ); + processItem( aSheetPath, &field, aItem ); } } } @@ -393,7 +395,7 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( const SCH_SHEET_PATH& aShe SCH_SHEET* sheet = static_cast( aItem ); if( m_sheetTitles->GetValue() ) - processItem( aSheetPath, &sheet->GetFields()[ SHEETNAME ] ); + processItem( aSheetPath, &sheet->GetFields()[SHEETNAME], aItem ); if( m_sheetFields->GetValue() ) { @@ -407,7 +409,7 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( const SCH_SHEET_PATH& aShe if( !m_fieldnameFilterOpt->GetValue() || m_fieldnameFilter->GetValue().IsEmpty() || WildCompareString( m_fieldnameFilter->GetValue(), fieldName, false ) ) { - processItem( aSheetPath, &field ); + processItem( aSheetPath, &field, aItem ); } } } diff --git a/pcbnew/dialogs/dialog_global_edit_text_and_graphics.cpp b/pcbnew/dialogs/dialog_global_edit_text_and_graphics.cpp index 6075ffb8d9..20d1e0d347 100644 --- a/pcbnew/dialogs/dialog_global_edit_text_and_graphics.cpp +++ b/pcbnew/dialogs/dialog_global_edit_text_and_graphics.cpp @@ -111,7 +111,7 @@ protected: bool TransferDataToWindow() override; bool TransferDataFromWindow() override; - void visitItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem ); + void visitItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem, FOOTPRINT* aParentItem ); void processItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem ); }; @@ -348,9 +348,11 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem( BOARD_COMMIT& aCommit, B } -void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem ) +void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem, + FOOTPRINT* aParentItem = nullptr ) { - if( m_selectedItemsFilter->GetValue() && !m_selection.Contains( aItem ) ) + if( m_selectedItemsFilter->GetValue() && !m_selection.Contains( aItem ) + && ( aParentItem == nullptr || !m_selection.Contains( aParentItem ) ) ) return; if( m_layerFilterOpt->GetValue() && m_layerFilter->GetLayerSelection() != UNDEFINED_LAYER ) @@ -399,10 +401,10 @@ bool DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataFromWindow() for( FOOTPRINT* fp : m_parent->GetBoard()->Footprints() ) { if( m_references->GetValue() ) - visitItem( commit, &fp->Reference() ); + visitItem( commit, &fp->Reference(), fp ); if( m_values->GetValue() ) - visitItem( commit, &fp->Value() ); + visitItem( commit, &fp->Value(), fp ); // Go through all other footprint items for( BOARD_ITEM* boardItem : fp->GraphicalItems() ) @@ -414,16 +416,16 @@ bool DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataFromWindow() const wxString text = dynamic_cast( boardItem )->GetText(); if( m_references->GetValue() && text == wxT( "${REFERENCE}" ) ) - visitItem( commit, boardItem ); + visitItem( commit, boardItem, fp ); else if( m_values->GetValue() && text == wxT( "${VALUE}" ) ) - visitItem( commit, boardItem ); + visitItem( commit, boardItem, fp ); else if( m_otherFields->GetValue() ) - visitItem( commit, boardItem ); + visitItem( commit, boardItem, fp ); } else if( boardItem->Type() == PCB_FP_SHAPE_T ) { if( m_footprintGraphics->GetValue() ) - visitItem( commit, boardItem ); + visitItem( commit, boardItem, fp ); } } }