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
This commit is contained in:
Jonathan Haas 2021-04-09 11:17:36 +02:00 committed by Jon Evans
parent dc0cf3b802
commit 846e4aed42
2 changed files with 25 additions and 21 deletions

View File

@ -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<EDA_TEXT*>( aItem );
SCH_TEXT* sch_text = dynamic_cast<SCH_TEXT*>( aItem );
SCH_LINE* lineItem = dynamic_cast<SCH_LINE*>( 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<SCH_SHEET*>( 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 );
}
}
}

View File

@ -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<EDA_TEXT*>( 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 );
}
}
}