From 34c2bd58d17fffc3eadc9a196e77e49a82e3d873 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 17 Sep 2021 22:21:05 +0100 Subject: [PATCH] Disable ungroup where there are no groups in the selection. Fixes https://gitlab.com/kicad/code/kicad/issues/9182 --- pcbnew/footprint_edit_frame.cpp | 14 +++++++++++++- pcbnew/pcb_edit_frame.cpp | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/pcbnew/footprint_edit_frame.cpp b/pcbnew/footprint_edit_frame.cpp index 618d86f0be..2051388afb 100644 --- a/pcbnew/footprint_edit_frame.cpp +++ b/pcbnew/footprint_edit_frame.cpp @@ -1024,11 +1024,23 @@ void FOOTPRINT_EDIT_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::duplicate, ENABLE( cond.HasItems() ) ); mgr->SetConditions( ACTIONS::selectAll, ENABLE( cond.HasItems() ) ); + auto haveAtLeastOneGroupCond = + []( const SELECTION& aSel ) + { + for( EDA_ITEM* item : aSel ) + { + if( item->Type() == PCB_GROUP_T ) + return true; + } + + return false; + }; + mgr->SetConditions( PCB_ACTIONS::rotateCw, ENABLE( cond.HasItems() ) ); mgr->SetConditions( PCB_ACTIONS::rotateCcw, ENABLE( cond.HasItems() ) ); mgr->SetConditions( PCB_ACTIONS::mirror, ENABLE( cond.HasItems() ) ); mgr->SetConditions( PCB_ACTIONS::group, ENABLE( SELECTION_CONDITIONS::MoreThan( 1 ) ) ); - mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( cond.HasItems() ) ); + mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( haveAtLeastOneGroupCond ) ); mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::textOutlines, CHECK( !cond.TextFillDisplay() ) ); diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 928f0529c6..edb98eff26 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -532,10 +532,22 @@ void PCB_EDIT_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::doDelete, ENABLE( cond.HasItems() ) ); mgr->SetConditions( ACTIONS::duplicate, ENABLE( cond.HasItems() ) ); + auto haveAtLeastOneGroupCond = + []( const SELECTION& aSel ) + { + for( EDA_ITEM* item : aSel ) + { + if( item->Type() == PCB_GROUP_T ) + return true; + } + + return false; + }; + mgr->SetConditions( PCB_ACTIONS::rotateCw, ENABLE( cond.HasItems() ) ); mgr->SetConditions( PCB_ACTIONS::rotateCcw, ENABLE( cond.HasItems() ) ); mgr->SetConditions( PCB_ACTIONS::group, ENABLE( SELECTION_CONDITIONS::MoreThan( 1 ) ) ); - mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( cond.HasItems() ) ); + mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( haveAtLeastOneGroupCond ) ); mgr->SetConditions( PCB_ACTIONS::lock, ENABLE( cond.HasItems() ) ); mgr->SetConditions( PCB_ACTIONS::unlock, ENABLE( cond.HasItems() ) );