Filter appearance control updates on bulk changes

This commit is contained in:
Marek Roszko 2020-12-09 08:01:22 -05:00
parent ad02156aea
commit eb2472650c
2 changed files with 38 additions and 6 deletions

View File

@ -948,45 +948,73 @@ 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<BOARD_ITEM*>& 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<BOARD_ITEM*>& aBoardItems )
{
if( doesBoardItemNeedRebuild( aBoardItems ) )
{
handleBoardItemsChanged();
}
}
void APPEARANCE_CONTROLS::OnBoardItemRemoved( BOARD& aBoard, BOARD_ITEM* aBoardItem )
{
if( aBoardItem->Type() == PCB_NETINFO_T )
if( doesBoardItemNeedRebuild( aBoardItem ) )
handleBoardItemsChanged();
}
void APPEARANCE_CONTROLS::OnBoardItemsRemoved(
BOARD& aBoard, std::vector<BOARD_ITEM*>& aBoardItems )
{
if( doesBoardItemNeedRebuild( aBoardItems ) )
{
handleBoardItemsChanged();
}
}
void APPEARANCE_CONTROLS::OnBoardItemChanged( BOARD& aBoard, BOARD_ITEM* aBoardItem )
{
if( aBoardItem->Type() == PCB_NETINFO_T )
if( doesBoardItemNeedRebuild( aBoardItem ) )
handleBoardItemsChanged();
}
void APPEARANCE_CONTROLS::OnBoardItemsChanged(
BOARD& aBoard, std::vector<BOARD_ITEM*>& aBoardItems )
{
if( doesBoardItemNeedRebuild( aBoardItems ) )
{
handleBoardItemsChanged();
}
}
void APPEARANCE_CONTROLS::handleBoardItemsChanged()

View File

@ -463,6 +463,10 @@ private:
void idleFocusHandler( wxIdleEvent& aEvent );
void onReadOnlySwatch();
bool doesBoardItemNeedRebuild( BOARD_ITEM* aBoardItem );
bool doesBoardItemNeedRebuild( std::vector<BOARD_ITEM*>& aBoardItems );
};
#endif