Don't show commands that cancel routing when routing is in progress

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8363
This commit is contained in:
Jon Evans 2021-05-08 14:55:02 -04:00
parent 6e017b475d
commit 1a45d9474b
2 changed files with 25 additions and 9 deletions

View File

@ -711,6 +711,7 @@ int BOARD_STACKUP::GetLayerDistance( PCB_LAYER_ID aFirstLayer, PCB_LAYER_ID aSec
std::swap( aFirstLayer, aSecondLayer );
int total = 0;
bool start = false;
for( BOARD_STACKUP_ITEM* item : m_list )
{
@ -719,10 +720,19 @@ int BOARD_STACKUP::GetLayerDistance( PCB_LAYER_ID aFirstLayer, PCB_LAYER_ID aSec
if( layer != UNDEFINED_LAYER && !IsCopperLayer( layer ) )
continue; // Silk/mask layer
else if( layer != UNDEFINED_LAYER && layer <= aFirstLayer )
continue; // Copper layer before first
else if( layer != UNDEFINED_LAYER && layer >= aSecondLayer )
break; // Copper layer after last: we're done
// Reached the start copper layer? Start counting the next dielectric after it
if( !start && ( layer != UNDEFINED_LAYER && layer >= aFirstLayer ) )
{
start = true;
continue;
}
else if( !start )
continue;
// Reached the stop copper layer? we're done
if( start && ( layer != UNDEFINED_LAYER && layer >= aSecondLayer ) )
break;
for( int sublayer = 0; sublayer < item->GetSublayersCount(); sublayer++ )
total += item->GetThickness( sublayer );

View File

@ -434,18 +434,24 @@ bool ROUTER_TOOL::Init()
m_diffPairMenu->SetTool( this );
m_menu.AddSubMenu( m_diffPairMenu );
auto notRoutingCond =
[this]( const SELECTION& )
{
return !m_router->RoutingInProgress();
};
menu.AddItem( ACTIONS::cancelInteractive, SELECTION_CONDITIONS::ShowAlways );
menu.AddSeparator();
menu.AddItem( PCB_ACTIONS::routeSingleTrack, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( PCB_ACTIONS::routeDiffPair, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( PCB_ACTIONS::routeSingleTrack, notRoutingCond );
menu.AddItem( PCB_ACTIONS::routeDiffPair, notRoutingCond );
menu.AddItem( ACT_EndTrack, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( ACT_UndoLastSegment, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( PCB_ACTIONS::breakTrack, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( PCB_ACTIONS::breakTrack, notRoutingCond );
menu.AddItem( PCB_ACTIONS::drag45Degree, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( PCB_ACTIONS::dragFreeAngle, SELECTION_CONDITIONS::ShowAlways );
menu.AddItem( PCB_ACTIONS::drag45Degree, notRoutingCond );
menu.AddItem( PCB_ACTIONS::dragFreeAngle, notRoutingCond );
// Add( ACT_AutoEndRoute ); // fixme: not implemented yet. Sorry.
menu.AddItem( ACT_PlaceThroughVia, SELECTION_CONDITIONS::ShowAlways );