From eb2472650c01f4b086453ba5c75dde8a60232fc9 Mon Sep 17 00:00:00 2001 From: Marek Roszko Date: Wed, 9 Dec 2020 08:01:22 -0500 Subject: [PATCH] Filter appearance control updates on bulk changes --- pcbnew/widgets/appearance_controls.cpp | 40 ++++++++++++++++++++++---- pcbnew/widgets/appearance_controls.h | 4 +++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp index 2d4cdbcfe9..02e1dec102 100644 --- a/pcbnew/widgets/appearance_controls.cpp +++ b/pcbnew/widgets/appearance_controls.cpp @@ -948,22 +948,44 @@ void APPEARANCE_CONTROLS::OnBoardNetSettingsChanged( BOARD& aBoard ) } +bool APPEARANCE_CONTROLS::doesBoardItemNeedRebuild( BOARD_ITEM* aBoardItem ) +{ + return aBoardItem->Type() == PCB_NETINFO_T; +} + + +bool APPEARANCE_CONTROLS::doesBoardItemNeedRebuild( std::vector& aBoardItems ) +{ + bool rebuild = std::any_of( aBoardItems.begin(), aBoardItems.end(), + []( const BOARD_ITEM* a ) + { + return a->Type() == PCB_NETINFO_T; + } ); + + + return rebuild; +} + + void APPEARANCE_CONTROLS::OnBoardItemAdded( BOARD& aBoard, BOARD_ITEM* aBoardItem ) { - if( aBoardItem->Type() == PCB_NETINFO_T ) + if( doesBoardItemNeedRebuild( aBoardItem ) ) handleBoardItemsChanged(); } void APPEARANCE_CONTROLS::OnBoardItemsAdded( BOARD& aBoard, std::vector& aBoardItems ) { - handleBoardItemsChanged(); + if( doesBoardItemNeedRebuild( aBoardItems ) ) + { + handleBoardItemsChanged(); + } } void APPEARANCE_CONTROLS::OnBoardItemRemoved( BOARD& aBoard, BOARD_ITEM* aBoardItem ) { - if( aBoardItem->Type() == PCB_NETINFO_T ) + if( doesBoardItemNeedRebuild( aBoardItem ) ) handleBoardItemsChanged(); } @@ -971,13 +993,16 @@ void APPEARANCE_CONTROLS::OnBoardItemRemoved( BOARD& aBoard, BOARD_ITEM* aBoardI void APPEARANCE_CONTROLS::OnBoardItemsRemoved( BOARD& aBoard, std::vector& aBoardItems ) { - handleBoardItemsChanged(); + if( doesBoardItemNeedRebuild( aBoardItems ) ) + { + handleBoardItemsChanged(); + } } void APPEARANCE_CONTROLS::OnBoardItemChanged( BOARD& aBoard, BOARD_ITEM* aBoardItem ) { - if( aBoardItem->Type() == PCB_NETINFO_T ) + if( doesBoardItemNeedRebuild( aBoardItem ) ) handleBoardItemsChanged(); } @@ -985,7 +1010,10 @@ void APPEARANCE_CONTROLS::OnBoardItemChanged( BOARD& aBoard, BOARD_ITEM* aBoardI void APPEARANCE_CONTROLS::OnBoardItemsChanged( BOARD& aBoard, std::vector& aBoardItems ) { - handleBoardItemsChanged(); + if( doesBoardItemNeedRebuild( aBoardItems ) ) + { + handleBoardItemsChanged(); + } } diff --git a/pcbnew/widgets/appearance_controls.h b/pcbnew/widgets/appearance_controls.h index b06a34c850..3639a24d9b 100644 --- a/pcbnew/widgets/appearance_controls.h +++ b/pcbnew/widgets/appearance_controls.h @@ -463,6 +463,10 @@ private: void idleFocusHandler( wxIdleEvent& aEvent ); void onReadOnlySwatch(); + + bool doesBoardItemNeedRebuild( BOARD_ITEM* aBoardItem ); + + bool doesBoardItemNeedRebuild( std::vector& aBoardItems ); }; #endif