From 5ea68c7694f46b1f5026a4818e91c21f14985c21 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Thu, 8 Apr 2021 18:13:48 +0100 Subject: [PATCH] Copy some bug fixes from DRC dialog across to Footprint Checker. --- pcbnew/dialogs/dialog_drc.cpp | 125 ++-- pcbnew/dialogs/dialog_drc.h | 6 +- pcbnew/dialogs/dialog_footprint_checker.cpp | 224 +++++- pcbnew/dialogs/dialog_footprint_checker.h | 49 +- .../dialogs/dialog_footprint_checker_base.cpp | 60 ++ .../dialogs/dialog_footprint_checker_base.fbp | 680 ++++++++++++++++++ .../dialogs/dialog_footprint_checker_base.h | 16 + 7 files changed, 1054 insertions(+), 106 deletions(-) diff --git a/pcbnew/dialogs/dialog_drc.cpp b/pcbnew/dialogs/dialog_drc.cpp index abcdd63ac7..9c11d623f3 100644 --- a/pcbnew/dialogs/dialog_drc.cpp +++ b/pcbnew/dialogs/dialog_drc.cpp @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -52,7 +51,7 @@ DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) : m_drcRun( false ), m_footprintTestsRun( false ), m_markersProvider( nullptr ), - m_markerTreeModel( nullptr ), + m_markersTreeModel( nullptr ), m_unconnectedItemsProvider( nullptr ), m_unconnectedTreeModel( nullptr ), m_footprintWarningsProvider( nullptr ), @@ -61,18 +60,18 @@ DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) : { SetName( DIALOG_DRC_WINDOW_NAME ); // Set a window name to be able to find it - m_brdEditor = aEditorFrame; - m_currentBoard = m_brdEditor->GetBoard(); + m_frame = aEditorFrame; + m_currentBoard = m_frame->GetBoard(); m_messages->SetImmediateMode(); - m_markerTreeModel = new RC_TREE_MODEL( m_brdEditor, m_markerDataView ); - m_markerDataView->AssociateModel( m_markerTreeModel ); + m_markersTreeModel = new RC_TREE_MODEL( m_frame, m_markerDataView ); + m_markerDataView->AssociateModel( m_markersTreeModel ); - m_unconnectedTreeModel = new RC_TREE_MODEL( m_brdEditor, m_unconnectedDataView ); + m_unconnectedTreeModel = new RC_TREE_MODEL( m_frame, m_unconnectedDataView ); m_unconnectedDataView->AssociateModel( m_unconnectedTreeModel ); - m_footprintWarningsTreeModel = new RC_TREE_MODEL( m_brdEditor, m_footprintsDataView ); + m_footprintWarningsTreeModel = new RC_TREE_MODEL( m_frame, m_footprintsDataView ); m_footprintsDataView->AssociateModel( m_footprintWarningsTreeModel ); if( Kiface().IsSingle() ) @@ -94,9 +93,9 @@ DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) : DIALOG_DRC::~DIALOG_DRC() { - m_brdEditor->FocusOnItem( nullptr ); + m_frame->FocusOnItem( nullptr ); - PCBNEW_SETTINGS* settings = m_brdEditor->GetPcbNewSettings(); + PCBNEW_SETTINGS* settings = m_frame->GetPcbNewSettings(); settings->m_DrcDialog.refill_zones = m_cbRefillZones->GetValue(); settings->m_DrcDialog.test_all_track_errors = m_cbReportAllTrackErrors->GetValue(); @@ -105,20 +104,20 @@ DIALOG_DRC::~DIALOG_DRC() settings->m_DrcDialog.severities = m_severities; - m_markerTreeModel->DecRef(); + m_markersTreeModel->DecRef(); } void DIALOG_DRC::OnActivateDlg( wxActivateEvent& aEvent ) { - if( m_currentBoard != m_brdEditor->GetBoard() ) + if( m_currentBoard != m_frame->GetBoard() ) { // If m_currentBoard is not the current board, (for instance because a new board // was loaded), close the dialog, because many pointers are now invalid in lists SetReturnCode( wxID_CANCEL ); Close(); - DRC_TOOL* drcTool = m_brdEditor->GetToolManager()->GetTool(); + DRC_TOOL* drcTool = m_frame->GetToolManager()->GetTool(); drcTool->DestroyDRCDialog(); } } @@ -130,7 +129,7 @@ void DIALOG_DRC::initValues() m_unconnectedTitleTemplate = m_Notebook->GetPageText( 1 ); m_footprintsTitleTemplate = m_Notebook->GetPageText( 2 ); - auto cfg = m_brdEditor->GetPcbNewSettings(); + auto cfg = m_frame->GetPcbNewSettings(); m_cbRefillZones->SetValue( cfg->m_DrcDialog.refill_zones ); m_cbReportAllTrackErrors->SetValue( cfg->m_DrcDialog.test_all_track_errors ); @@ -140,7 +139,7 @@ void DIALOG_DRC::initValues() m_cbTestFootprints->SetValue( cfg->m_DrcDialog.test_footprints ); m_severities = cfg->m_DrcDialog.severities; - m_markerTreeModel->SetSeverities( m_severities ); + m_markersTreeModel->SetSeverities( m_severities ); m_unconnectedTreeModel->SetSeverities( m_severities ); m_footprintWarningsTreeModel->SetSeverities( m_severities ); @@ -188,13 +187,13 @@ void DIALOG_DRC::syncCheckboxes() void DIALOG_DRC::OnErrorLinkClicked( wxHtmlLinkEvent& event ) { - m_brdEditor->ShowBoardSetupDialog( _( "Rules" ) ); + m_frame->ShowBoardSetupDialog( _( "Rules" ) ); } void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent ) { - DRC_TOOL* drcTool = m_brdEditor->GetToolManager()->GetTool(); + DRC_TOOL* drcTool = m_frame->GetToolManager()->GetTool(); bool refillZones = m_cbRefillZones->GetValue(); bool reportAllTrackErrors = m_cbReportAllTrackErrors->GetValue(); bool testFootprints = m_cbTestFootprints->GetValue(); @@ -203,7 +202,7 @@ void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent ) // and that they at least parse. try { - drcTool->GetDRCEngine()->InitEngine( m_brdEditor->GetDesignRulesPath() ); + drcTool->GetDRCEngine()->InitEngine( m_frame->GetDesignRulesPath() ); } catch( PARSE_ERROR& ) { @@ -227,7 +226,7 @@ void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent ) m_footprintTestsRun = false; m_cancelled = false; - m_brdEditor->RecordDRCExclusions(); + m_frame->RecordDRCExclusions(); deleteAllMarkers( true ); m_unconnectedTreeModel->DeleteItems( false, true, true ); m_footprintWarningsTreeModel->DeleteItems( false, true, true ); @@ -269,14 +268,14 @@ void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent ) KIPLATFORM::UI::ForceFocus( m_markerDataView ); } - refreshBoardEditor(); + refreshEditor(); } void DIALOG_DRC::SetMarkersProvider( RC_ITEMS_PROVIDER* aProvider ) { m_markersProvider = aProvider; - m_markerTreeModel->SetProvider( m_markersProvider ); + m_markersTreeModel->SetProvider( m_markersProvider ); updateDisplayedCounts(); } @@ -299,7 +298,7 @@ void DIALOG_DRC::SetFootprintsProvider( RC_ITEMS_PROVIDER* aProvider ) void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent ) { - BOARD* board = m_brdEditor->GetBoard(); + BOARD* board = m_frame->GetBoard(); RC_TREE_NODE* node = RC_TREE_MODEL::ToNode( aEvent.GetItem() ); const KIID& itemID = node ? RC_TREE_MODEL::ToUUID( aEvent.GetItem() ) : niluuid; BOARD_ITEM* item = board->GetItem( itemID ); @@ -326,7 +325,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent ) } }; - if( item && node ) + if( node && item ) { PCB_LAYER_ID principalLayer = item->GetLayer(); LSET violationLayers; @@ -378,19 +377,19 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent ) else violationLayers.set( principalLayer ); - WINDOW_THAWER thawer( m_brdEditor ); + WINDOW_THAWER thawer( m_frame ); - m_brdEditor->FocusOnItem( item ); - m_brdEditor->GetCanvas()->Refresh(); + m_frame->FocusOnItem( item ); + m_frame->GetCanvas()->Refresh(); if( ( violationLayers & board->GetVisibleLayers() ) == 0 ) { - m_brdEditor->GetAppearancePanel()->SetLayerVisible( principalLayer, true ); - m_brdEditor->GetCanvas()->Refresh(); + m_frame->GetAppearancePanel()->SetLayerVisible( principalLayer, true ); + m_frame->GetCanvas()->Refresh(); } if( board->GetVisibleLayers().test( principalLayer ) ) - m_brdEditor->SetActiveLayer( principalLayer ); + m_frame->SetActiveLayer( principalLayer ); } aEvent.Skip(); @@ -401,7 +400,7 @@ void DIALOG_DRC::OnDRCItemDClick( wxDataViewEvent& aEvent ) { if( aEvent.GetItem().IsOk() ) { - // turn control over to m_brdEditor, hide this DIALOG_DRC window, + // turn control over to m_frame, hide this DIALOG_DRC window, // no destruction so we can preserve listbox cursor if( !IsModal() ) Show( false ); @@ -479,7 +478,7 @@ void DIALOG_DRC::OnDRCItemRClick( wxDataViewEvent& aEvent ) if( marker ) { marker->SetExcluded( false ); - m_brdEditor->GetCanvas()->GetView()->Update( marker ); + m_frame->GetCanvas()->GetView()->Update( marker ); // Update view static_cast( aEvent.GetModel() )->ValueChanged( node ); @@ -495,7 +494,7 @@ void DIALOG_DRC::OnDRCItemRClick( wxDataViewEvent& aEvent ) if( marker ) { marker->SetExcluded( true ); - m_brdEditor->GetCanvas()->GetView()->Update( marker ); + m_frame->GetCanvas()->GetView()->Update( marker ); // Update view if( m_severities & RPT_SEVERITY_EXCLUSION ) @@ -511,10 +510,10 @@ void DIALOG_DRC::OnDRCItemRClick( wxDataViewEvent& aEvent ) case 3: bds().m_DRCSeverities[ rcItem->GetErrorCode() ] = RPT_SEVERITY_ERROR; - for( PCB_MARKER* marker : m_brdEditor->GetBoard()->Markers() ) + for( PCB_MARKER* marker : m_frame->GetBoard()->Markers() ) { if( marker->GetRCItem()->GetErrorCode() == rcItem->GetErrorCode() ) - m_brdEditor->GetCanvas()->GetView()->Update( marker ); + m_frame->GetCanvas()->GetView()->Update( marker ); } // Rebuild model and view @@ -525,10 +524,10 @@ void DIALOG_DRC::OnDRCItemRClick( wxDataViewEvent& aEvent ) case 4: bds().m_DRCSeverities[ rcItem->GetErrorCode() ] = RPT_SEVERITY_WARNING; - for( PCB_MARKER* marker : m_brdEditor->GetBoard()->Markers() ) + for( PCB_MARKER* marker : m_frame->GetBoard()->Markers() ) { if( marker->GetRCItem()->GetErrorCode() == rcItem->GetErrorCode() ) - m_brdEditor->GetCanvas()->GetView()->Update( marker ); + m_frame->GetCanvas()->GetView()->Update( marker ); } // Rebuild model and view @@ -540,13 +539,13 @@ void DIALOG_DRC::OnDRCItemRClick( wxDataViewEvent& aEvent ) { bds().m_DRCSeverities[ rcItem->GetErrorCode() ] = RPT_SEVERITY_IGNORE; - std::vector& markers = m_brdEditor->GetBoard()->Markers(); + std::vector& markers = m_frame->GetBoard()->Markers(); for( unsigned i = 0; i < markers.size(); ) { if( markers[i]->GetRCItem()->GetErrorCode() == rcItem->GetErrorCode() ) { - m_brdEditor->GetCanvas()->GetView()->Remove( markers.at( i ) ); + m_frame->GetCanvas()->GetView()->Remove( markers.at( i ) ); markers.erase( markers.begin() + i ); } else @@ -560,15 +559,15 @@ void DIALOG_DRC::OnDRCItemRClick( wxDataViewEvent& aEvent ) break; case 6: - m_brdEditor->ShowBoardSetupDialog( _( "Violation Severity" ) ); + m_frame->ShowBoardSetupDialog( _( "Violation Severity" ) ); break; } if( modified ) { updateDisplayedCounts(); - refreshBoardEditor(); - m_brdEditor->OnModify(); + refreshEditor(); + m_frame->OnModify(); } } @@ -601,7 +600,7 @@ void DIALOG_DRC::OnSeverity( wxCommandEvent& aEvent ) // It's not clear this is required, but we've had a lot of issues with wxDataView // being cranky on various platforms. - m_markerTreeModel->SetSeverities( m_severities ); + m_markersTreeModel->SetSeverities( m_severities ); m_unconnectedTreeModel->SetSeverities( m_severities ); m_footprintWarningsTreeModel->SetSeverities( m_severities ); @@ -662,13 +661,13 @@ void DIALOG_DRC::OnCancelClick( wxCommandEvent& aEvent ) return; } - m_brdEditor->FocusOnItem( nullptr ); + m_frame->FocusOnItem( nullptr ); SetReturnCode( wxID_CANCEL ); // The dialog can be modal or not modal. // Leave the DRC caller destroy (or not) the dialog - DRC_TOOL* drcTool = m_brdEditor->GetToolManager()->GetTool(); + DRC_TOOL* drcTool = m_frame->GetToolManager()->GetTool(); drcTool->DestroyDRCDialog(); } @@ -685,11 +684,11 @@ void DIALOG_DRC::OnChangingNotebookPage( wxNotebookEvent& aEvent ) } -void DIALOG_DRC::refreshBoardEditor() +void DIALOG_DRC::refreshEditor() { - WINDOW_THAWER thawer( m_brdEditor ); + WINDOW_THAWER thawer( m_frame ); - m_brdEditor->GetCanvas()->Refresh(); + m_frame->GetCanvas()->Refresh(); } @@ -699,7 +698,7 @@ void DIALOG_DRC::PrevMarker() { switch( m_Notebook->GetSelection() ) { - case 0: m_markerTreeModel->PrevMarker(); break; + case 0: m_markersTreeModel->PrevMarker(); break; case 1: m_unconnectedTreeModel->PrevMarker(); break; case 2: m_footprintWarningsTreeModel->PrevMarker(); break; } @@ -713,7 +712,7 @@ void DIALOG_DRC::NextMarker() { switch( m_Notebook->GetSelection() ) { - case 0: m_markerTreeModel->NextMarker(); break; + case 0: m_markersTreeModel->NextMarker(); break; case 1: m_unconnectedTreeModel->NextMarker(); break; case 2: m_footprintWarningsTreeModel->NextMarker(); break; } @@ -732,17 +731,17 @@ void DIALOG_DRC::ExcludeMarker() if( marker && !marker->IsExcluded() ) { marker->SetExcluded( true ); - m_brdEditor->GetCanvas()->GetView()->Update( marker ); + m_frame->GetCanvas()->GetView()->Update( marker ); // Update view if( m_severities & RPT_SEVERITY_EXCLUSION ) - m_markerTreeModel->ValueChanged( node ); + m_markersTreeModel->ValueChanged( node ); else - m_markerTreeModel->DeleteCurrentItem( false ); + m_markersTreeModel->DeleteCurrentItem( false ); updateDisplayedCounts(); - refreshBoardEditor(); - m_brdEditor->OnModify(); + refreshEditor(); + m_frame->OnModify(); } } @@ -750,9 +749,9 @@ void DIALOG_DRC::ExcludeMarker() void DIALOG_DRC::deleteAllMarkers( bool aIncludeExclusions ) { // Clear current selection list to avoid selection of deleted items - m_brdEditor->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); + m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); - m_markerTreeModel->DeleteItems( false, aIncludeExclusions, true ); + m_markersTreeModel->DeleteItems( false, aIncludeExclusions, true ); } @@ -764,13 +763,13 @@ bool DIALOG_DRC::writeReport( const wxString& aFullFileName ) return false; std::map itemMap; - m_brdEditor->GetBoard()->FillItemMap( itemMap ); + m_frame->GetBoard()->FillItemMap( itemMap ); EDA_UNITS units = GetUserUnits(); - BOARD_DESIGN_SETTINGS& bds = m_brdEditor->GetBoard()->GetDesignSettings(); + BOARD_DESIGN_SETTINGS& bds = m_frame->GetBoard()->GetDesignSettings(); int count; - fprintf( fp, "** Drc report for %s **\n", TO_UTF8( m_brdEditor->GetBoard()->GetFileName() ) ); + fprintf( fp, "** Drc report for %s **\n", TO_UTF8( m_frame->GetBoard()->GetFileName() ) ); wxDateTime now = wxDateTime::Now(); @@ -826,12 +825,12 @@ void DIALOG_DRC::OnDeleteOneClick( wxCommandEvent& aEvent ) if( m_Notebook->GetSelection() == 0 ) { // Clear the selection. It may be the selected DRC marker. - m_brdEditor->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); + m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); - m_markerTreeModel->DeleteCurrentItem( true ); + m_markersTreeModel->DeleteCurrentItem( true ); // redraw the pcb - refreshBoardEditor(); + refreshEditor(); } else if( m_Notebook->GetSelection() == 1 ) { @@ -879,7 +878,7 @@ void DIALOG_DRC::OnDeleteAllClick( wxCommandEvent& aEvent ) deleteAllMarkers( s_includeExclusions ); m_drcRun = false; - refreshBoardEditor(); + refreshEditor(); updateDisplayedCounts(); } diff --git a/pcbnew/dialogs/dialog_drc.h b/pcbnew/dialogs/dialog_drc.h index a278acc2f4..729716e888 100644 --- a/pcbnew/dialogs/dialog_drc.h +++ b/pcbnew/dialogs/dialog_drc.h @@ -96,7 +96,7 @@ private: void OnChangingNotebookPage( wxNotebookEvent& aEvent ) override; void deleteAllMarkers( bool aIncludeExclusions ); - void refreshBoardEditor(); + void refreshEditor(); // PROGRESS_REPORTER calls bool updateUI() override; @@ -105,7 +105,7 @@ private: BOARD_DESIGN_SETTINGS& bds() { return m_currentBoard->GetDesignSettings(); } BOARD* m_currentBoard; // the board currently on test - PCB_EDIT_FRAME* m_brdEditor; + PCB_EDIT_FRAME* m_frame; bool m_running; std::atomic m_cancelled; bool m_drcRun; @@ -116,7 +116,7 @@ private: wxString m_footprintsTitleTemplate; RC_ITEMS_PROVIDER* m_markersProvider; - RC_TREE_MODEL* m_markerTreeModel; + RC_TREE_MODEL* m_markersTreeModel; RC_ITEMS_PROVIDER* m_unconnectedItemsProvider; RC_TREE_MODEL* m_unconnectedTreeModel; diff --git a/pcbnew/dialogs/dialog_footprint_checker.cpp b/pcbnew/dialogs/dialog_footprint_checker.cpp index 25b291d33f..42f1b7f62b 100644 --- a/pcbnew/dialogs/dialog_footprint_checker.cpp +++ b/pcbnew/dialogs/dialog_footprint_checker.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -34,7 +35,10 @@ DIALOG_FOOTPRINT_CHECKER::DIALOG_FOOTPRINT_CHECKER( FOOTPRINT_EDIT_FRAME* aParent ) : DIALOG_FOOTPRINT_CHECKER_BASE( aParent ), - m_frame( aParent ) + m_frame( aParent ), + m_checksRun( false ), + m_markersProvider( nullptr ), + m_severities( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ) { m_markersTreeModel = new RC_TREE_MODEL( m_frame, m_markersDataView ); m_markersDataView->AssociateModel( m_markersTreeModel ); @@ -47,9 +51,10 @@ DIALOG_FOOTPRINT_CHECKER::DIALOG_FOOTPRINT_CHECKER( FOOTPRINT_EDIT_FRAME* aParen m_sdbSizerCancel->SetLabel( _( "Close" ) ); m_sdbSizerOK->SetDefault(); - m_sdbSizer->SetSizeHints( this ); - GetSizer()->SetSizeHints(this); - Centre(); + + syncCheckboxes(); + + finishDialogSettings(); } @@ -73,6 +78,19 @@ bool DIALOG_FOOTPRINT_CHECKER::TransferDataFromWindow() } +// Don't globally define this; different facilities use different definitions of "ALL" +static int RPT_SEVERITY_ALL = RPT_SEVERITY_WARNING | RPT_SEVERITY_ERROR | RPT_SEVERITY_EXCLUSION; + + +void DIALOG_FOOTPRINT_CHECKER::syncCheckboxes() +{ + m_showAll->SetValue( m_severities == RPT_SEVERITY_ALL ); + m_showErrors->SetValue( m_severities & RPT_SEVERITY_ERROR ); + m_showWarnings->SetValue( m_severities & RPT_SEVERITY_WARNING ); + m_showExclusions->SetValue( m_severities & RPT_SEVERITY_EXCLUSION ); +} + + void DIALOG_FOOTPRINT_CHECKER::runChecks() { BOARD* board = m_frame->GetBoard(); @@ -102,26 +120,156 @@ void DIALOG_FOOTPRINT_CHECKER::runChecks() footprint->BuildPolyCourtyards( &errorHandler ); + m_checksRun = true; + SetMarkersProvider( new BOARD_DRC_ITEMS_PROVIDER( m_frame->GetBoard() ) ); - WINDOW_THAWER thawer( m_frame ); - - m_frame->GetCanvas()->Refresh(); + refreshEditor(); } void DIALOG_FOOTPRINT_CHECKER::SetMarkersProvider( RC_ITEMS_PROVIDER* aProvider ) { m_markersTreeModel->SetProvider( aProvider ); + updateDisplayedCounts(); } void DIALOG_FOOTPRINT_CHECKER::OnRunChecksClick( wxCommandEvent& aEvent ) { + m_checksRun = false; + runChecks(); } +void DIALOG_FOOTPRINT_CHECKER::OnSelectItem( wxDataViewEvent& aEvent ) +{ + BOARD* board = m_frame->GetBoard(); + RC_TREE_NODE* node = RC_TREE_MODEL::ToNode( aEvent.GetItem() ); + const KIID& itemID = node ? RC_TREE_MODEL::ToUUID( aEvent.GetItem() ) : niluuid; + BOARD_ITEM* item = board->GetItem( itemID ); + + if( node && item ) + { + PCB_LAYER_ID principalLayer = item->GetLayer(); + LSET violationLayers; + std::shared_ptr rc_item = node->m_RcItem; + + if( rc_item->GetErrorCode() == DRCE_MALFORMED_COURTYARD ) + { + BOARD_ITEM* a = board->GetItem( rc_item->GetMainItemID() ); + + if( a && ( a->GetFlags() & MALFORMED_B_COURTYARD ) > 0 + && ( a->GetFlags() & MALFORMED_F_COURTYARD ) == 0 ) + { + principalLayer = B_CrtYd; + } + else + { + principalLayer = F_CrtYd; + } + } + else if (rc_item->GetErrorCode() == DRCE_INVALID_OUTLINE ) + { + principalLayer = Edge_Cuts; + } + else + { + BOARD_ITEM* a = board->GetItem( rc_item->GetMainItemID() ); + BOARD_ITEM* b = board->GetItem( rc_item->GetAuxItemID() ); + BOARD_ITEM* c = board->GetItem( rc_item->GetAuxItem2ID() ); + BOARD_ITEM* d = board->GetItem( rc_item->GetAuxItem3ID() ); + + if( a || b || c || d ) + violationLayers = LSET::AllLayersMask(); + + if( a ) + violationLayers &= a->GetLayerSet(); + + if( b ) + violationLayers &= b->GetLayerSet(); + + if( c ) + violationLayers &= c->GetLayerSet(); + + if( d ) + violationLayers &= d->GetLayerSet(); + } + + if( violationLayers.count() ) + principalLayer = violationLayers.Seq().front(); + else + violationLayers.set( principalLayer ); + + WINDOW_THAWER thawer( m_frame ); + + m_frame->FocusOnItem( item ); + m_frame->GetCanvas()->Refresh(); + + if( ( violationLayers & board->GetVisibleLayers() ) == 0 ) + { + m_frame->GetAppearancePanel()->SetLayerVisible( principalLayer, true ); + m_frame->GetCanvas()->Refresh(); + } + + if( board->GetVisibleLayers().test( principalLayer ) ) + m_frame->SetActiveLayer( principalLayer ); + } + + aEvent.Skip(); +} + + +void DIALOG_FOOTPRINT_CHECKER::OnLeftDClickItem( wxMouseEvent& event ) +{ + if( m_markersDataView->GetCurrentItem().IsOk() ) + { + // turn control over to m_frame, hide this DIALOG_FOOTPRINT_CHECKER window, + // no destruction so we can preserve listbox cursor + if( !IsModal() ) + Show( false ); + } + + // Do not skip aVent here: tihs is not useful, and Pcbnew crashes + // if skipped (at least on Windows) +} + + +void DIALOG_FOOTPRINT_CHECKER::OnSeverity( wxCommandEvent& aEvent ) +{ + int flag = 0; + + if( aEvent.GetEventObject() == m_showAll ) + flag = RPT_SEVERITY_ALL; + else if( aEvent.GetEventObject() == m_showErrors ) + flag = RPT_SEVERITY_ERROR; + else if( aEvent.GetEventObject() == m_showWarnings ) + flag = RPT_SEVERITY_WARNING; + else if( aEvent.GetEventObject() == m_showExclusions ) + flag = RPT_SEVERITY_EXCLUSION; + + if( aEvent.IsChecked() ) + m_severities |= flag; + else if( aEvent.GetEventObject() == m_showAll ) + m_severities = RPT_SEVERITY_ERROR; + else + m_severities &= ~flag; + + syncCheckboxes(); + + // Set the provider's severity levels through the TreeModel so that the old tree + // can be torn down before the severity changes. + // + // It's not clear this is required, but we've had a lot of issues with wxDataView + // being cranky on various platforms. + + m_markersTreeModel->SetSeverities( m_severities ); + + updateDisplayedCounts(); +} + + void DIALOG_FOOTPRINT_CHECKER::OnCancelClick( wxCommandEvent& aEvent ) { m_frame->FocusOnItem( nullptr ); @@ -141,28 +289,25 @@ void DIALOG_FOOTPRINT_CHECKER::OnClose( wxCloseEvent& aEvent ) } -void DIALOG_FOOTPRINT_CHECKER::OnSelectItem( wxDataViewEvent& aEvent ) +void DIALOG_FOOTPRINT_CHECKER::refreshEditor() { - const KIID& itemID = RC_TREE_MODEL::ToUUID( aEvent.GetItem() ); - BOARD_ITEM* item = m_frame->GetBoard()->GetItem( itemID ); WINDOW_THAWER thawer( m_frame ); - m_frame->FocusOnItem( item ); m_frame->GetCanvas()->Refresh(); - - aEvent.Skip(); } -void DIALOG_FOOTPRINT_CHECKER::OnLeftDClickItem( wxMouseEvent& event ) +void DIALOG_FOOTPRINT_CHECKER::OnDeleteOneClick( wxCommandEvent& aEvent ) { - event.Skip(); + // Clear the selection. It may be the selected DRC marker. + m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); - if( m_markersDataView->GetCurrentItem().IsOk() ) - { - if( !IsModal() ) - Show( false ); - } + m_markersTreeModel->DeleteCurrentItem( true ); + + // redraw the pcb + refreshEditor(); + + updateDisplayedCounts(); } @@ -170,9 +315,9 @@ void DIALOG_FOOTPRINT_CHECKER::OnDeleteAllClick( wxCommandEvent& event ) { deleteAllMarkers(); - WINDOW_THAWER thawer( m_frame ); - - m_frame->GetCanvas()->Refresh(); + m_checksRun = false; + refreshEditor(); + updateDisplayedCounts(); } @@ -185,3 +330,36 @@ void DIALOG_FOOTPRINT_CHECKER::deleteAllMarkers() } +void DIALOG_FOOTPRINT_CHECKER::updateDisplayedCounts() +{ + // Collect counts: + + int numErrors = 0; + int numWarnings = 0; + int numExcluded = 0; + + if( m_markersProvider ) + { + numErrors += m_markersProvider->GetCount( RPT_SEVERITY_ERROR ); + numWarnings += m_markersProvider->GetCount( RPT_SEVERITY_WARNING ); + numExcluded += m_markersProvider->GetCount( RPT_SEVERITY_EXCLUSION ); + } + + // Update badges: + + if( !m_checksRun && numErrors == 0 ) + numErrors = -1; + + if( !m_checksRun && numWarnings == 0 ) + numWarnings = -1; + + m_errorsBadge->SetMaximumNumber( numErrors ); + m_errorsBadge->UpdateNumber( numErrors, RPT_SEVERITY_ERROR ); + + m_warningsBadge->SetMaximumNumber( numWarnings ); + m_warningsBadge->UpdateNumber( numWarnings, RPT_SEVERITY_WARNING ); + + m_exclusionsBadge->SetMaximumNumber( numExcluded ); + m_exclusionsBadge->UpdateNumber( numExcluded, RPT_SEVERITY_EXCLUSION ); +} + diff --git a/pcbnew/dialogs/dialog_footprint_checker.h b/pcbnew/dialogs/dialog_footprint_checker.h index 5afff28ea4..e9743fdd56 100644 --- a/pcbnew/dialogs/dialog_footprint_checker.h +++ b/pcbnew/dialogs/dialog_footprint_checker.h @@ -33,28 +33,43 @@ class FOOTPRINT_EDIT_FRAME; class DIALOG_FOOTPRINT_CHECKER: public DIALOG_FOOTPRINT_CHECKER_BASE { - FOOTPRINT_EDIT_FRAME* m_frame; - RC_TREE_MODEL* m_markersTreeModel; - - void runChecks(); - void deleteAllMarkers(); - - void OnRunChecksClick( wxCommandEvent& aEvent ) override; - void OnCancelClick( wxCommandEvent& aEvent ) override; - void OnClose( wxCloseEvent& event ) override; - - void OnSelectItem( wxDataViewEvent& event ) override; - void OnLeftDClickItem( wxMouseEvent& event ) override; - void OnDeleteAllClick( wxCommandEvent& event ) override; - - bool TransferDataToWindow() override; - bool TransferDataFromWindow() override; - public: DIALOG_FOOTPRINT_CHECKER( FOOTPRINT_EDIT_FRAME* aParent ); ~DIALOG_FOOTPRINT_CHECKER(); void SetMarkersProvider( RC_ITEMS_PROVIDER* aProvider ); + +private: + void syncCheckboxes(); + void updateDisplayedCounts(); + + void runChecks(); + + void deleteAllMarkers(); + void refreshEditor(); + + void OnRunChecksClick( wxCommandEvent& aEvent ) override; + void OnCancelClick( wxCommandEvent& aEvent ) override; + void OnClose( wxCloseEvent& event ) override; + + void OnSeverity( wxCommandEvent& aEvent ) override; + + void OnSelectItem( wxDataViewEvent& event ) override; + void OnLeftDClickItem( wxMouseEvent& event ) override; + void OnDeleteOneClick( wxCommandEvent& event ) override; + void OnDeleteAllClick( wxCommandEvent& event ) override; + + bool TransferDataToWindow() override; + bool TransferDataFromWindow() override; + +private: + FOOTPRINT_EDIT_FRAME* m_frame; + bool m_checksRun; + + RC_TREE_MODEL* m_markersTreeModel; + RC_ITEMS_PROVIDER* m_markersProvider; + + int m_severities; }; #endif // DIALOG_FOOTPRINT_CHECKER_H diff --git a/pcbnew/dialogs/dialog_footprint_checker_base.cpp b/pcbnew/dialogs/dialog_footprint_checker_base.cpp index 3fa0b21110..8436622dca 100644 --- a/pcbnew/dialogs/dialog_footprint_checker_base.cpp +++ b/pcbnew/dialogs/dialog_footprint_checker_base.cpp @@ -23,12 +23,62 @@ DIALOG_FOOTPRINT_CHECKER_BASE::DIALOG_FOOTPRINT_CHECKER_BASE( wxWindow* parent, m_markersDataView = new wxDataViewCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_NO_HEADER ); bUpperSizer->Add( m_markersDataView, 1, wxALL|wxEXPAND, 5 ); + wxBoxSizer* bSizer9; + bSizer9 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSeveritySizer; + bSeveritySizer = new wxBoxSizer( wxHORIZONTAL ); + + m_showLabel = new wxStaticText( this, wxID_ANY, _("Show:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_showLabel->Wrap( -1 ); + bSeveritySizer->Add( m_showLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_showAll = new wxCheckBox( this, wxID_ANY, _("All"), wxDefaultPosition, wxDefaultSize, 0 ); + m_showAll->SetValue(true); + bSeveritySizer->Add( m_showAll, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSeveritySizer->Add( 35, 0, 0, wxEXPAND, 5 ); + + m_showErrors = new wxCheckBox( this, wxID_ANY, _("Errors"), wxDefaultPosition, wxDefaultSize, 0 ); + bSeveritySizer->Add( m_showErrors, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_errorsBadge = new NUMBER_BADGE( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + bSeveritySizer->Add( m_errorsBadge, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 25 ); + + m_showWarnings = new wxCheckBox( this, wxID_ANY, _("Warnings"), wxDefaultPosition, wxDefaultSize, 0 ); + bSeveritySizer->Add( m_showWarnings, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_warningsBadge = new NUMBER_BADGE( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + bSeveritySizer->Add( m_warningsBadge, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 25 ); + + m_showExclusions = new wxCheckBox( this, wxID_ANY, _("Exclusions"), wxDefaultPosition, wxDefaultSize, 0 ); + bSeveritySizer->Add( m_showExclusions, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_exclusionsBadge = new NUMBER_BADGE( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + bSeveritySizer->Add( m_exclusionsBadge, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 25 ); + + + bSeveritySizer->Add( 5, 0, 1, wxEXPAND, 5 ); + + + bSizer9->Add( bSeveritySizer, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer9->Add( m_staticline1, 0, wxEXPAND|wxTOP, 8 ); + + + bUpperSizer->Add( bSizer9, 0, wxEXPAND|wxTOP, 3 ); + bSizerMain->Add( bUpperSizer, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 ); wxBoxSizer* bLowerSizer; bLowerSizer = new wxBoxSizer( wxHORIZONTAL ); + m_DeleteCurrentMarkerButton = new wxButton( this, wxID_ANY, _("Delete Marker"), wxDefaultPosition, wxDefaultSize, 0 ); + bLowerSizer->Add( m_DeleteCurrentMarkerButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_DeleteAllMarkersButton = new wxButton( this, wxID_ANY, _("Delete All Markers"), wxDefaultPosition, wxDefaultSize, 0 ); bLowerSizer->Add( m_DeleteAllMarkersButton, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); @@ -55,6 +105,11 @@ DIALOG_FOOTPRINT_CHECKER_BASE::DIALOG_FOOTPRINT_CHECKER_BASE( wxWindow* parent, this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnClose ) ); m_markersDataView->Connect( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSelectItem ), NULL, this ); m_markersDataView->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnLeftDClickItem ), NULL, this ); + m_showAll->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_showErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_showWarnings->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_showExclusions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_DeleteCurrentMarkerButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnDeleteOneClick ), NULL, this ); m_DeleteAllMarkersButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnDeleteAllClick ), NULL, this ); m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnCancelClick ), NULL, this ); m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnRunChecksClick ), NULL, this ); @@ -66,6 +121,11 @@ DIALOG_FOOTPRINT_CHECKER_BASE::~DIALOG_FOOTPRINT_CHECKER_BASE() this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnClose ) ); m_markersDataView->Disconnect( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSelectItem ), NULL, this ); m_markersDataView->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnLeftDClickItem ), NULL, this ); + m_showAll->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_showErrors->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_showWarnings->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_showExclusions->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnSeverity ), NULL, this ); + m_DeleteCurrentMarkerButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnDeleteOneClick ), NULL, this ); m_DeleteAllMarkersButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnDeleteAllClick ), NULL, this ); m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnCancelClick ), NULL, this ); m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_FOOTPRINT_CHECKER_BASE::OnRunChecksClick ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_footprint_checker_base.fbp b/pcbnew/dialogs/dialog_footprint_checker_base.fbp index 5da807adc3..fa1ef961e7 100644 --- a/pcbnew/dialogs/dialog_footprint_checker_base.fbp +++ b/pcbnew/dialogs/dialog_footprint_checker_base.fbp @@ -97,6 +97,613 @@ OnLeftDClickItem + + 3 + wxEXPAND|wxTOP + 0 + + + bSizer9 + wxVERTICAL + none + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + + bSeveritySizer + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Show: + 0 + + 0 + + + 0 + + 1 + m_showLabel + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + All + + 0 + + + 0 + + 1 + m_showAll + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnSeverity + + + + 5 + wxEXPAND + 0 + + 0 + protected + 35 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Errors + + 0 + + + 0 + + 1 + m_showErrors + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnSeverity + + + + 25 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + NUMBER_BADGE + 1 + + + 1 + + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + #include <widgets/number_badge.h> + + 0 + + + 0 + + 1 + m_errorsBadge + 1 + + + protected + 1 + + Resizable + + 1 + + ; ; forward_declare + 0 + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Warnings + + 0 + + + 0 + + 1 + m_showWarnings + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnSeverity + + + + 25 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + NUMBER_BADGE + 1 + + + 1 + + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + #include <widgets/number_badge.h> + + 0 + + + 0 + + 1 + m_warningsBadge + 1 + + + protected + 1 + + Resizable + + 1 + + ; ; forward_declare + 0 + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Exclusions + + 0 + + + 0 + + 1 + m_showExclusions + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnSeverity + + + + 25 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + NUMBER_BADGE + 1 + + + 1 + + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + #include <widgets/number_badge.h> + + 0 + + + 0 + + 1 + m_exclusionsBadge + 1 + + + protected + 1 + + Resizable + + 1 + + ; ; forward_declare + 0 + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 5 + + + + + + 8 + wxEXPAND|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline1 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + ; ; forward_declare + 0 + + + + + + + + @@ -108,6 +715,79 @@ bLowerSizer wxHORIZONTAL none + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 1 + + 1 + + + 0 + 0 + wxID_ANY + Delete Marker + + 0 + + 0 + + + 0 + + 1 + m_DeleteCurrentMarkerButton + 1 + + + protected + 1 + + + + Resizable + 1 + + + ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnDeleteOneClick + + 5 wxALL|wxALIGN_CENTER_VERTICAL diff --git a/pcbnew/dialogs/dialog_footprint_checker_base.h b/pcbnew/dialogs/dialog_footprint_checker_base.h index 8c7acb5f27..5ee936e4b6 100644 --- a/pcbnew/dialogs/dialog_footprint_checker_base.h +++ b/pcbnew/dialogs/dialog_footprint_checker_base.h @@ -17,7 +17,11 @@ #include #include #include +#include +#include +#include #include +#include #include #include #include @@ -36,6 +40,16 @@ class DIALOG_FOOTPRINT_CHECKER_BASE : public DIALOG_SHIM protected: wxDataViewCtrl* m_markersDataView; + wxStaticText* m_showLabel; + wxCheckBox* m_showAll; + wxCheckBox* m_showErrors; + NUMBER_BADGE* m_errorsBadge; + wxCheckBox* m_showWarnings; + NUMBER_BADGE* m_warningsBadge; + wxCheckBox* m_showExclusions; + NUMBER_BADGE* m_exclusionsBadge; + wxStaticLine* m_staticline1; + wxButton* m_DeleteCurrentMarkerButton; wxButton* m_DeleteAllMarkersButton; wxStdDialogButtonSizer* m_sdbSizer; wxButton* m_sdbSizerOK; @@ -45,6 +59,8 @@ class DIALOG_FOOTPRINT_CHECKER_BASE : public DIALOG_SHIM virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } virtual void OnSelectItem( wxDataViewEvent& event ) { event.Skip(); } virtual void OnLeftDClickItem( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSeverity( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeleteOneClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnDeleteAllClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnRunChecksClick( wxCommandEvent& event ) { event.Skip(); }