Pcbnew: Do not change visibility objects when changing Visibility layers

Fixes #13836
https://gitlab.com/kicad/code/kicad/issues/13836
This commit is contained in:
jean-pierre charras 2023-02-16 12:39:15 +01:00
parent 2529918d5f
commit 8467e2d376
1 changed files with 21 additions and 10 deletions

View File

@ -1153,7 +1153,7 @@ void APPEARANCE_CONTROLS::OnDarkModeToggle()
m_layerPanelColour = m_panelLayers->GetBackgroundColour().ChangeLightness( 110 ); m_layerPanelColour = m_panelLayers->GetBackgroundColour().ChangeLightness( 110 );
m_windowLayers->SetBackgroundColour( m_layerPanelColour ); m_windowLayers->SetBackgroundColour( m_layerPanelColour );
for( wxSizerItem* child : m_layersOuterSizer->GetChildren() ) for( wxSizerItem* child : m_layersOuterSizer->GetChildren() )
{ {
if( child && child->GetWindow() ) if( child && child->GetWindow() )
@ -1829,14 +1829,20 @@ void APPEARANCE_CONTROLS::OnLayerContextMenu( wxCommandEvent& aEvent )
PCB_LAYER_ID current = m_frame->GetActiveLayer(); PCB_LAYER_ID current = m_frame->GetActiveLayer();
// The new preset. We keep the visibility state of objects:
LAYER_PRESET preset;
preset.renderLayers = getVisibleObjects();
switch( aEvent.GetId() ) switch( aEvent.GetId() )
{ {
case ID_PRESET_NO_LAYERS: case ID_PRESET_NO_LAYERS:
ApplyLayerPreset( presetNoLayers ); preset.layers = presetNoLayers.layers;
ApplyLayerPreset( preset );
return; return;
case ID_PRESET_ALL_LAYERS: case ID_PRESET_ALL_LAYERS:
ApplyLayerPreset( presetAllLayers ); preset.layers &presetAllLayers.layers;
ApplyLayerPreset( preset );
return; return;
case ID_SHOW_ALL_COPPER_LAYERS: case ID_SHOW_ALL_COPPER_LAYERS:
@ -1845,8 +1851,8 @@ void APPEARANCE_CONTROLS::OnLayerContextMenu( wxCommandEvent& aEvent )
break; break;
case ID_HIDE_ALL_BUT_ACTIVE: case ID_HIDE_ALL_BUT_ACTIVE:
ApplyLayerPreset( presetNoLayers ); preset.layers = presetNoLayers.layers | LSET( current );
SetLayerVisible( current, true ); ApplyLayerPreset( preset );
break; break;
case ID_HIDE_ALL_COPPER_LAYERS: case ID_HIDE_ALL_COPPER_LAYERS:
@ -1874,23 +1880,28 @@ void APPEARANCE_CONTROLS::OnLayerContextMenu( wxCommandEvent& aEvent )
break; break;
case ID_PRESET_FRONT_ASSEMBLY: case ID_PRESET_FRONT_ASSEMBLY:
ApplyLayerPreset( presetFrontAssembly ); preset.layers = presetFrontAssembly.layers;
ApplyLayerPreset( preset );
return; return;
case ID_PRESET_FRONT: case ID_PRESET_FRONT:
ApplyLayerPreset( presetFront ); preset.layers = presetFront.layers;
ApplyLayerPreset( preset );
return; return;
case ID_PRESET_INNER_COPPER: case ID_PRESET_INNER_COPPER:
ApplyLayerPreset( presetInnerCopper ); preset.layers = presetInnerCopper.layers;
ApplyLayerPreset( preset );
return; return;
case ID_PRESET_BACK: case ID_PRESET_BACK:
ApplyLayerPreset( presetBack ); preset.layers = presetBack.layers;
ApplyLayerPreset( preset );
return; return;
case ID_PRESET_BACK_ASSEMBLY: case ID_PRESET_BACK_ASSEMBLY:
ApplyLayerPreset( presetBackAssembly ); preset.layers = presetBackAssembly.layers;
ApplyLayerPreset( preset );
return; return;
} }