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