Eeschema: Select component connections in drag
Dragging a full line that is connected to a component now drags the component as part of the block, maintaining connections. Fixes: lp:1167714 * https://bugs.launchpad.net/kicad/+bug/1167714
This commit is contained in:
parent
76d08c8bd2
commit
faadbea10e
|
@ -720,6 +720,14 @@ void SCH_SCREEN::GetHierarchicalItems( EDA_ITEMS& aItems )
|
||||||
|
|
||||||
void SCH_SCREEN::SelectBlockItems()
|
void SCH_SCREEN::SelectBlockItems()
|
||||||
{
|
{
|
||||||
|
auto addConnections = [ this ]( SCH_ITEM* item ) -> void
|
||||||
|
{
|
||||||
|
std::vector< wxPoint > connections;
|
||||||
|
item->GetConnectionPoints( connections );
|
||||||
|
for( auto conn : connections )
|
||||||
|
addConnectedItemsToBlock( conn );
|
||||||
|
};
|
||||||
|
|
||||||
PICKED_ITEMS_LIST* pickedlist = &m_BlockLocate.GetItems();
|
PICKED_ITEMS_LIST* pickedlist = &m_BlockLocate.GetItems();
|
||||||
|
|
||||||
if( pickedlist->GetCount() == 0 )
|
if( pickedlist->GetCount() == 0 )
|
||||||
|
@ -757,23 +765,27 @@ void SCH_SCREEN::SelectBlockItems()
|
||||||
// so we must keep it selected and select items connected to it
|
// so we must keep it selected and select items connected to it
|
||||||
// Note: an other option could be: remove it from drag list
|
// Note: an other option could be: remove it from drag list
|
||||||
item->SetFlags( SELECTED | SKIP_STRUCT );
|
item->SetFlags( SELECTED | SKIP_STRUCT );
|
||||||
std::vector< wxPoint > connections;
|
addConnections( item );
|
||||||
item->GetConnectionPoints( connections );
|
|
||||||
|
|
||||||
for( size_t i = 0; i < connections.size(); i++ )
|
|
||||||
addConnectedItemsToBlock( connections[i] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pickedlist->SetPickerFlags( item->GetFlags(), ii );
|
pickedlist->SetPickerFlags( item->GetFlags(), ii );
|
||||||
}
|
}
|
||||||
else if( item->IsConnectable() )
|
else if( item->IsConnectable() )
|
||||||
{
|
{
|
||||||
std::vector< wxPoint > connections;
|
addConnections( item );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
item->GetConnectionPoints( connections );
|
// Select the items that are connected to a component that was added
|
||||||
|
// to our selection list in the last step.
|
||||||
|
for( unsigned ii = last_select_id; ii < pickedlist->GetCount(); ii++ )
|
||||||
|
{
|
||||||
|
SCH_ITEM* item = (SCH_ITEM*)pickedlist->GetPickedItem( ii );
|
||||||
|
|
||||||
for( size_t jj = 0; jj < connections.size(); jj++ )
|
if( item->Type() == SCH_COMPONENT_T )
|
||||||
addConnectedItemsToBlock( connections[jj] );
|
{
|
||||||
|
item->SetFlags( IS_DRAGGED );
|
||||||
|
addConnections( item );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue