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:
parent
6e017b475d
commit
1a45d9474b
|
@ -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 );
|
||||
|
|
|
@ -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 );
|
||||
|
|
Loading…
Reference in New Issue