From e7aa9630111a89351dbcb64599cbbc4fe2dbbff6 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Fri, 6 Jun 2014 14:59:55 +0200 Subject: [PATCH] Fixed layers switching in GAL. --- pcbnew/tools/pcbnew_control.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/pcbnew/tools/pcbnew_control.cpp b/pcbnew/tools/pcbnew_control.cpp index 47dea8cf04..a01ec83802 100644 --- a/pcbnew/tools/pcbnew_control.cpp +++ b/pcbnew/tools/pcbnew_control.cpp @@ -301,8 +301,19 @@ int PCBNEW_CONTROL::LayerNext( TOOL_EVENT& aEvent ) { PCB_EDIT_FRAME* editFrame = getEditFrame(); LAYER_NUM layer = editFrame->GetActiveLayer(); - layer = ( layer + 1 ) % ( LAST_COPPER_LAYER + 1 ); - assert( IsCopperLayer( layer ) ); + + if( ( layer < FIRST_COPPER_LAYER ) || ( layer >= LAST_COPPER_LAYER ) ) + { + setTransitions(); + return 0; + } + + if( getModel()->GetCopperLayerCount() < 2 ) // Single layer + layer = LAYER_N_BACK; + else if( layer >= getModel()->GetCopperLayerCount() - 2 ) + layer = LAYER_N_FRONT; + else + ++layer; editFrame->SwitchLayer( NULL, layer ); editFrame->GetGalCanvas()->SetFocus(); @@ -317,8 +328,18 @@ int PCBNEW_CONTROL::LayerPrev( TOOL_EVENT& aEvent ) PCB_EDIT_FRAME* editFrame = getEditFrame(); LAYER_NUM layer = editFrame->GetActiveLayer(); - if( --layer < 0 ) - layer = LAST_COPPER_LAYER; + if( ( layer <= FIRST_COPPER_LAYER ) || ( layer > LAST_COPPER_LAYER ) ) + { + setTransitions(); + return 0; + } + + if( getModel()->GetCopperLayerCount() < 2 ) // Single layer + layer = LAYER_N_BACK; + else if( layer == LAYER_N_FRONT ) + layer = std::max( LAYER_N_BACK, FIRST_COPPER_LAYER + getModel()->GetCopperLayerCount() - 2 ); + else + --layer; assert( IsCopperLayer( layer ) ); editFrame->SwitchLayer( NULL, layer );