From 7890d788017be6ec08144925147cd6c259b27640 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sat, 30 Apr 2022 11:07:07 +0200 Subject: [PATCH] Cvpcb: fix not working icon "select previous symbol" From Master branch Fixes #11509 https://gitlab.com/kicad/code/kicad/issues/11509 --- cvpcb/tools/cvpcb_control.cpp | 41 ++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/cvpcb/tools/cvpcb_control.cpp b/cvpcb/tools/cvpcb_control.cpp index 5b10941781..762fc82172 100644 --- a/cvpcb/tools/cvpcb_control.cpp +++ b/cvpcb/tools/cvpcb_control.cpp @@ -231,8 +231,9 @@ int CVPCB_CONTROL::ToNA( const TOOL_EVENT& aEvent ) return 0; // Extract the current selection - unsigned int curSel = -1; - unsigned int newSel = -1; + bool changeSel = false; + unsigned int newSel = UINT_MAX; + switch( dir ) { case CVPCB_MAINFRAME::ITEM_NEXT: @@ -240,11 +241,12 @@ int CVPCB_CONTROL::ToNA( const TOOL_EVENT& aEvent ) newSel = tempSel.front(); // Find the next index in the component list - for( unsigned int i : naComp ) + for( unsigned int idx : naComp ) { - if( i > newSel ) + if( idx > newSel ) { - newSel = i; + changeSel = true; + newSel = idx; break; } } @@ -255,7 +257,19 @@ int CVPCB_CONTROL::ToNA( const TOOL_EVENT& aEvent ) if( !tempSel.empty() ) { newSel = tempSel.front(); - curSel = newSel - 1; // Break one before the current selection + + // Find the previous index in the component list + for( int jj = naComp.size()-1; jj >= 0; jj-- ) + { + unsigned idx = naComp[jj]; + + if( idx < newSel ) + { + changeSel = true; + newSel = idx; + break; + } + } } break; @@ -264,18 +278,9 @@ int CVPCB_CONTROL::ToNA( const TOOL_EVENT& aEvent ) wxASSERT_MSG( false, wxT( "Invalid direction" ) ); } - // Find the next index in the component list - for( unsigned int i : naComp ) - { - if( i >= curSel ) - { - newSel = i; - break; - } - } - - // Set the component selection - m_frame->SetSelectedComponent( newSel ); + // Set the new component selection + if( changeSel ) + m_frame->SetSelectedComponent( newSel ); return 0; }