Fix some issues in PCB_SELECTION_TOOL::selectAllItemsOnSheet():

especially a typo that prevent working on root sheet.
Clearly, commit 6b2bb4d8 was very poorly designed and (or not even) tested.
This commit is contained in:
jean-pierre charras 2022-08-20 12:59:37 +02:00
parent f92d25e00b
commit 962df45b65
1 changed files with 14 additions and 3 deletions

View File

@ -1378,6 +1378,7 @@ int PCB_SELECTION_TOOL::selectNet( const TOOL_EVENT& aEvent )
void PCB_SELECTION_TOOL::selectAllItemsOnSheet( wxString& aSheetPath )
{
std::list<FOOTPRINT*> footprintList;
bool isRootSheet = aSheetPath == wxT( "/" );
// store all footprints that are on that sheet path
for( FOOTPRINT* footprint : board()->Footprints() )
@ -1387,11 +1388,21 @@ void PCB_SELECTION_TOOL::selectAllItemsOnSheet( wxString& aSheetPath )
wxString footprint_path = footprint->GetPath().AsString().BeforeLast('/');
if( aSheetPath.IsEmpty() )
aSheetPath += '/';
if( footprint_path.IsEmpty() )
footprint_path += '/';
if( footprint_path.StartsWith( aSheetPath ) )
if( isRootSheet )
{
// We are in the root sheet, so it makes no sense to select all footprints
// on board. So we select only footprints leaving in the root sheet
if( footprint_path == aSheetPath )
footprintList.push_back( footprint );
}
else if( footprint_path.StartsWith( aSheetPath ) )
{
// We are in a subsheet, select all footprints in this sheet and its subsheets
footprintList.push_back( footprint );
}
}
// Generate a list of all pads, and of all nets they belong to.