From 0b102fc0858e63b78e6ee966d14a3411f98096f7 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 8 Sep 2025 13:33:35 +0100 Subject: [PATCH] Use WX_GRID::ClearRows() to avoid assertions. Fixes KICAD-VM1. --- common/dialogs/panel_embedded_files.cpp | 4 +--- include/widgets/wx_grid.h | 6 +++--- kicad/dialogs/panel_jobset.cpp | 4 +--- kicad/pcm/dialogs/dialog_manage_repositories.cpp | 3 +-- kicad/pcm/dialogs/panel_packages_view.cpp | 9 ++------- pcbnew/dialogs/panel_setup_tracks_and_vias.cpp | 6 +++--- 6 files changed, 11 insertions(+), 21 deletions(-) diff --git a/common/dialogs/panel_embedded_files.cpp b/common/dialogs/panel_embedded_files.cpp index 14dd5039fc..794fb65a6d 100644 --- a/common/dialogs/panel_embedded_files.cpp +++ b/common/dialogs/panel_embedded_files.cpp @@ -167,9 +167,7 @@ void PANEL_EMBEDDED_FILES::resizeGrid() bool PANEL_EMBEDDED_FILES::TransferDataToWindow() { m_files_grid->ClearGrid(); - - if( m_files_grid->GetNumberRows() > 0 ) - m_files_grid->DeleteRows( 0, m_files_grid->GetNumberRows() ); + m_files_grid->ClearRows(); int ii = 0; diff --git a/include/widgets/wx_grid.h b/include/widgets/wx_grid.h index 465e938609..acc151d45c 100644 --- a/include/widgets/wx_grid.h +++ b/include/widgets/wx_grid.h @@ -244,10 +244,10 @@ public: * to the number of rows (even if the delete count is 0). Needless to say, this makes using * DeleteRows for clearing a lot more cumbersome so we add a helper here. */ - void ClearRows() + void ClearRows( bool aUpdateLabels = true ) { - if( GetNumberRows() ) - DeleteRows( 0, GetNumberRows() ); + if( GetNumberRows() > 0 ) + DeleteRows( 0, GetNumberRows(), aUpdateLabels ); } /** diff --git a/kicad/dialogs/panel_jobset.cpp b/kicad/dialogs/panel_jobset.cpp index 53749fe3b6..dc894096d1 100644 --- a/kicad/dialogs/panel_jobset.cpp +++ b/kicad/dialogs/panel_jobset.cpp @@ -518,9 +518,7 @@ void PANEL_JOBSET::RemoveDestination( PANEL_DESTINATION* aPanel ) void PANEL_JOBSET::rebuildJobList() { - if( m_jobsGrid->GetNumberRows() ) - m_jobsGrid->DeleteRows( 0, m_jobsGrid->GetNumberRows() ); - + m_jobsGrid->ClearRows(); m_jobsGrid->AppendRows( (int) m_jobsFile->GetJobs().size() ); int num = 1; diff --git a/kicad/pcm/dialogs/dialog_manage_repositories.cpp b/kicad/pcm/dialogs/dialog_manage_repositories.cpp index 59e3b01c63..732dd384dc 100644 --- a/kicad/pcm/dialogs/dialog_manage_repositories.cpp +++ b/kicad/pcm/dialogs/dialog_manage_repositories.cpp @@ -206,8 +206,7 @@ void DIALOG_MANAGE_REPOSITORIES::selectRow( int aRow ) void DIALOG_MANAGE_REPOSITORIES::SetData( const std::vector>& aData ) { m_grid->Freeze(); - - m_grid->DeleteRows( 0, m_grid->GetNumberRows() ); + m_grid->ClearRows(); m_grid->AppendRows( aData.size() ); for( size_t i = 0; i < aData.size(); i++ ) diff --git a/kicad/pcm/dialogs/panel_packages_view.cpp b/kicad/pcm/dialogs/panel_packages_view.cpp index e465e20bd1..18a20863de 100644 --- a/kicad/pcm/dialogs/panel_packages_view.cpp +++ b/kicad/pcm/dialogs/panel_packages_view.cpp @@ -302,9 +302,7 @@ void PANEL_PACKAGES_VIEW::setPackageDetails( const PACKAGE_VIEW_DATA& aPackageDa // Versions table m_gridVersions->Freeze(); - - if( m_gridVersions->GetNumberRows() != 0 ) - m_gridVersions->DeleteRows( 0, m_gridVersions->GetNumberRows() ); + m_gridVersions->ClearRows(); int row = 0; wxString current_version; @@ -395,10 +393,7 @@ void PANEL_PACKAGES_VIEW::unsetPackageDetails() // Clean up grid just so we don't keep stale info around (it's already been hidden). m_gridVersions->Freeze(); - - if( m_gridVersions->GetNumberRows() > 0 ) - m_gridVersions->DeleteRows( 0, m_gridVersions->GetNumberRows() ); - + m_gridVersions->ClearRows(); m_gridVersions->Thaw(); } diff --git a/pcbnew/dialogs/panel_setup_tracks_and_vias.cpp b/pcbnew/dialogs/panel_setup_tracks_and_vias.cpp index 6dcfacdda7..c455a17bd5 100644 --- a/pcbnew/dialogs/panel_setup_tracks_and_vias.cpp +++ b/pcbnew/dialogs/panel_setup_tracks_and_vias.cpp @@ -155,7 +155,7 @@ void PANEL_SETUP_TRACKS_AND_VIAS::OnSortTrackWidthsClick( wxCommandEvent& aEvent } std::sort( trackWidths.begin(), trackWidths.end() ); - m_trackWidthsGrid->DeleteRows( 0, m_trackWidthsGrid->GetNumberRows(), false ); + m_trackWidthsGrid->ClearRows( false ); for( int width : trackWidths ) AppendTrackWidth( width ); @@ -194,7 +194,7 @@ void PANEL_SETUP_TRACKS_AND_VIAS::OnSortViaSizesClick( wxCommandEvent& aEvent ) } std::sort( vias.begin(), vias.end() ); - m_viaSizesGrid->DeleteRows( 0, m_viaSizesGrid->GetNumberRows(), false ); + m_viaSizesGrid->ClearRows( false ); for( const VIA_DIMENSION& via : vias ) AppendViaSize( via.m_Diameter, via.m_Drill ); @@ -236,7 +236,7 @@ void PANEL_SETUP_TRACKS_AND_VIAS::OnSortDiffPairsClick( wxCommandEvent& aEvent ) } std::sort( diffPairs.begin(), diffPairs.end() ); - m_diffPairsGrid->DeleteRows( 0, m_diffPairsGrid->GetNumberRows(), false ); + m_diffPairsGrid->ClearRows( false ); for( const DIFF_PAIR_DIMENSION& dp : diffPairs ) AppendDiffPairs( dp.m_Width, dp.m_Gap, dp.m_ViaGap );