From 6e316d9faa93dd79815d9592d6ea1bf7aa86ef65 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Wed, 10 Sep 2025 14:07:04 +0100 Subject: [PATCH] ADDED: menu items to control cross-probing from ERC dialog. Fixes https://gitlab.com/kicad/code/kicad/-/issues/17916 --- eeschema/dialogs/dialog_erc.cpp | 150 ++++++++++++------- eeschema/dialogs/dialog_erc.h | 11 +- eeschema/dialogs/dialog_erc_base.cpp | 21 +++ eeschema/dialogs/dialog_erc_base.fbp | 97 +++++++++++- eeschema/dialogs/dialog_erc_base.h | 15 +- eeschema/eeschema_settings.cpp | 9 +- eeschema/eeschema_settings.h | 52 +++---- eeschema/sch_edit_frame.cpp | 4 +- eeschema/sch_edit_frame.h | 2 +- eeschema/symbol_editor/symbol_edit_frame.cpp | 4 +- eeschema/symbol_editor/symbol_edit_frame.h | 2 +- include/eda_draw_frame.h | 2 +- include/pcb_base_frame.h | 2 +- pcbnew/dialogs/dialog_drc_base.cpp | 4 +- pcbnew/dialogs/dialog_drc_base.fbp | 4 +- pcbnew/pcb_base_frame.cpp | 4 +- 16 files changed, 275 insertions(+), 108 deletions(-) diff --git a/eeschema/dialogs/dialog_erc.cpp b/eeschema/dialogs/dialog_erc.cpp index f577593529..5ecfa3535a 100644 --- a/eeschema/dialogs/dialog_erc.cpp +++ b/eeschema/dialogs/dialog_erc.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -76,15 +77,15 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) : m_running( false ), m_ercRun( false ), m_centerMarkerOnIdle( nullptr ), - m_severities( 0 ) + m_crossprobe( true ), + m_scroll_on_crossprobe( true ) { m_currentSchematic = &parent->Schematic(); SetName( DIALOG_ERC_WINDOW_NAME ); // Set a window name to be able to find it KIPLATFORM::UI::SetFloatLevel( this ); - if( EESCHEMA_SETTINGS* cfg = GetAppSettings( "eeschema" ) ) - m_severities = cfg->m_Appearance.erc_severities; + m_bMenu->SetBitmap( KiBitmapBundle( BITMAPS::config ) ); m_messages->SetImmediateMode(); @@ -92,7 +93,7 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) : m_markerTreeModel = new ERC_TREE_MODEL( parent, m_markerDataView ); m_markerDataView->AssociateModel( m_markerTreeModel ); - m_markerTreeModel->Update( m_markerProvider, m_severities ); + m_markerTreeModel->Update( m_markerProvider, getSeverities() ); m_ignoredList->InsertColumn( 0, wxEmptyString, wxLIST_FORMAT_LEFT, DEFAULT_SINGLE_COL_WIDTH ); @@ -129,8 +130,11 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) : SetFocus(); - syncCheckboxes(); - updateDisplayedCounts(); + if( EESCHEMA_SETTINGS* cfg = GetAppSettings( "eeschema" ) ) + { + m_crossprobe = cfg->m_ERCDialog.crossprobe; + m_scroll_on_crossprobe = cfg->m_ERCDialog.scroll_on_crossprobe; + } // Now all widgets have the size fixed, call FinishDialogSettings finishDialogSettings(); @@ -148,7 +152,10 @@ DIALOG_ERC::~DIALOG_ERC() g_lastERCIgnored.push_back( { m_ignoredList->GetItemText( ii ), m_ignoredList->GetItemData( ii ) } ); if( EESCHEMA_SETTINGS* cfg = GetAppSettings( "eeschema" ) ) - cfg->m_Appearance.erc_severities = m_severities; + { + cfg->m_ERCDialog.crossprobe = m_crossprobe; + cfg->m_ERCDialog.scroll_on_crossprobe = m_scroll_on_crossprobe; + } m_markerTreeModel->DecRef(); } @@ -189,6 +196,59 @@ void DIALOG_ERC::UpdateAnnotationWarning() } +int DIALOG_ERC::getSeverities() +{ + int severities = 0; + + if( m_showErrors->GetValue() ) + severities |= RPT_SEVERITY_ERROR; + + if( m_showWarnings->GetValue() ) + severities |= RPT_SEVERITY_WARNING; + + if( m_showExclusions->GetValue() ) + severities |= RPT_SEVERITY_EXCLUSION; + + return severities; +} + + +void DIALOG_ERC::OnMenu( wxCommandEvent& event ) +{ + // Build a pop menu: + wxMenu menu; + + menu.Append( 4206, _( "Cross-probe Selected Items" ), + _( "Highlight corresponding items on canvas when selected in the ERC list" ), + wxITEM_CHECK ); + menu.Check( 4206, m_crossprobe ); + + menu.Append( 4207, _( "Center on Cross-probe" ), + _( "When cross-probing, scroll the canvas so that the item is visible" ), + wxITEM_CHECK ); + menu.Check( 4207, m_scroll_on_crossprobe ); + + // menu_id is the selected submenu id from the popup menu or wxID_NONE + int menu_id = m_bMenu->GetPopupMenuSelectionFromUser( menu ); + + if( menu_id == 0 || menu_id == 4206 ) + { + m_crossprobe = !m_crossprobe; + } + else if( menu_id == 1 || menu_id == 4207 ) + { + m_scroll_on_crossprobe = !m_scroll_on_crossprobe; + } +} + + +bool DIALOG_ERC::TransferDataToWindow() +{ + UpdateData(); + return true; +} + + bool DIALOG_ERC::updateUI() { // If ERC checks ever get slow enough we'll want a progress indicator... @@ -217,6 +277,13 @@ void DIALOG_ERC::Report( const wxString& aMessage ) } +void DIALOG_ERC::UpdateData() +{ + m_markerTreeModel->Update( m_markerProvider, getSeverities() ); + updateDisplayedCounts(); +} + + void DIALOG_ERC::updateDisplayedCounts() { int numErrors = 0; @@ -348,30 +415,14 @@ void DIALOG_ERC::OnCloseErcDialog( wxCloseEvent& aEvent ) // Dialog is mode-less so let the parent know that it needs to be destroyed. if( !IsModal() && !IsQuasiModal() ) { - wxCommandEvent* evt = new wxCommandEvent( EDA_EVT_CLOSE_ERC_DIALOG, wxID_ANY ); - - wxWindow* parent = GetParent(); - - if( parent ) - wxQueueEvent( parent, evt ); + if( wxWindow* parent = GetParent() ) + wxQueueEvent( parent, new wxCommandEvent( EDA_EVT_CLOSE_ERC_DIALOG, wxID_ANY ) ); } aEvent.Skip(); } -static int RPT_SEVERITY_ALL = RPT_SEVERITY_WARNING | RPT_SEVERITY_ERROR | RPT_SEVERITY_EXCLUSION; - - -void DIALOG_ERC::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_ERC::OnLinkClicked( wxHtmlLinkEvent& event ) { m_parent->OnAnnotate(); @@ -446,8 +497,7 @@ void DIALOG_ERC::OnRunERCClick( wxCommandEvent& event ) } if( m_cancelled ) - // @spellingerror - m_messages->Report( _( "-------- ERC canceled by user.

" ), RPT_SEVERITY_INFO ); + m_messages->Report( _( "-------- ERC cancelled by user.

" ), RPT_SEVERITY_INFO ); else m_messages->Report( _( "Done.

" ), RPT_SEVERITY_INFO ); @@ -508,7 +558,7 @@ void DIALOG_ERC::testErc() } // Update marker list: - m_markerTreeModel->Update( m_markerProvider, m_severities ); + m_markerTreeModel->Update( m_markerProvider, getSeverities() ); // Display new markers from the current screen: for( SCH_ITEM* marker : m_parent->GetScreen()->Items().OfType( SCH_MARKER_T ) ) @@ -523,6 +573,12 @@ void DIALOG_ERC::testErc() void DIALOG_ERC::OnERCItemSelected( wxDataViewEvent& aEvent ) { + if( !m_crossprobe ) + { + aEvent.Skip(); + return; + } + const KIID& itemID = RC_TREE_MODEL::ToUUID( aEvent.GetItem() ); SCH_SHEET_PATH sheet; SCH_ITEM* item = m_parent->Schematic().ResolveItem( itemID, &sheet, true ); @@ -568,7 +624,7 @@ void DIALOG_ERC::OnERCItemSelected( wxDataViewEvent& aEvent ) m_parent->RedrawScreen( m_parent->GetScreen()->m_ScrollCenter, false ); } - m_parent->FocusOnItem( item ); + m_parent->FocusOnItem( item, m_scroll_on_crossprobe ); redrawDrawPanel(); } @@ -762,7 +818,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent ) m_parent->GetCanvas()->GetView()->Update( marker ); // Update view - if( m_severities & RPT_SEVERITY_EXCLUSION ) + if( getSeverities() & RPT_SEVERITY_EXCLUSION ) static_cast( aEvent.GetModel() )->ValueChanged( node ); else static_cast( aEvent.GetModel() )->DeleteCurrentItem( false ); @@ -788,7 +844,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent ) } // Rebuild model and view - static_cast( aEvent.GetModel() )->Update( m_markerProvider, m_severities ); + static_cast( aEvent.GetModel() )->Update( m_markerProvider, getSeverities() ); modified = true; break; @@ -804,7 +860,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent ) } // Rebuild model and view - static_cast( aEvent.GetModel() )->Update( m_markerProvider, m_severities ); + static_cast( aEvent.GetModel() )->Update( m_markerProvider, getSeverities() ); modified = true; break; @@ -830,7 +886,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent ) ScreenList.DeleteMarkers( MARKER_BASE::MARKER_ERC, rcItem->GetErrorCode() ); // Rebuild model and view - static_cast( aEvent.GetModel() )->Update( m_markerProvider, m_severities ); + static_cast( aEvent.GetModel() )->Update( m_markerProvider, getSeverities() ); modified = true; } break; @@ -956,7 +1012,7 @@ void DIALOG_ERC::ExcludeMarker( SCH_MARKER* aMarker ) m_parent->GetCanvas()->GetView()->Update( marker ); // Update view - if( m_severities & RPT_SEVERITY_EXCLUSION ) + if( getSeverities() & RPT_SEVERITY_EXCLUSION ) m_markerTreeModel->ValueChanged( node ); else m_markerTreeModel->DeleteCurrentItem( false ); @@ -976,28 +1032,14 @@ void DIALOG_ERC::OnEditViolationSeverities( wxHyperlinkEvent& aEvent ) void DIALOG_ERC::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; + { + m_showErrors->SetValue( true ); + m_showWarnings->SetValue( aEvent.IsChecked() ); + m_showExclusions->SetValue( aEvent.IsChecked() ); + } - if( aEvent.IsChecked() ) - m_severities |= flag; - else if( aEvent.GetEventObject() == m_showAll ) - m_severities = RPT_SEVERITY_ERROR; - else - m_severities &= ~flag; - - syncCheckboxes(); - - m_markerTreeModel->Update( m_markerProvider, m_severities ); - updateDisplayedCounts(); + UpdateData(); } diff --git a/eeschema/dialogs/dialog_erc.h b/eeschema/dialogs/dialog_erc.h index b0c2198ded..1269d6f4ed 100644 --- a/eeschema/dialogs/dialog_erc.h +++ b/eeschema/dialogs/dialog_erc.h @@ -49,6 +49,8 @@ public: DIALOG_ERC( SCH_EDIT_FRAME* parent ); ~DIALOG_ERC(); + bool TransferDataToWindow() override; + // PROGRESS_REPORTER_BASE calls bool updateUI() override; void AdvancePhase( const wxString& aMessage ) override; @@ -66,10 +68,14 @@ public: */ void ExcludeMarker( SCH_MARKER* aMarker = nullptr ); + void UpdateData(); void UpdateAnnotationWarning(); private: + int getSeverities(); + // from DIALOG_ERC_BASE: + void OnMenu( wxCommandEvent& aEvent ) override; void OnCloseErcDialog( wxCloseEvent& event ) override; void OnRunERCClick( wxCommandEvent& event ) override; void OnDeleteOneClick( wxCommandEvent& event ) override; @@ -92,8 +98,6 @@ private: void testErc(); - bool writeReport( const wxString& aFullFileName ); - void deleteAllMarkers( bool aIncludeExclusions ); void syncCheckboxes(); @@ -114,7 +118,8 @@ private: const SCH_MARKER* m_centerMarkerOnIdle; - int m_severities; + bool m_crossprobe; + bool m_scroll_on_crossprobe; }; diff --git a/eeschema/dialogs/dialog_erc_base.cpp b/eeschema/dialogs/dialog_erc_base.cpp index e2d3048417..cd703e185c 100644 --- a/eeschema/dialogs/dialog_erc_base.cpp +++ b/eeschema/dialogs/dialog_erc_base.cpp @@ -5,6 +5,7 @@ // PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// +#include "widgets/std_bitmap_button.h" #include "widgets/wx_html_report_box.h" #include "widgets/wx_infobar.h" @@ -29,6 +30,24 @@ DIALOG_ERC_BASE::DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id, const wxStrin wxBoxSizer* bMainSizer; bMainSizer = new wxBoxSizer( wxVERTICAL ); + wxGridBagSizer* gbSizerOptions; + gbSizerOptions = new wxGridBagSizer( 0, 0 ); + gbSizerOptions->SetFlexibleDirection( wxBOTH ); + gbSizerOptions->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bMenu = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + m_bMenu->SetMinSize( wxSize( 30,30 ) ); + + gbSizerOptions->Add( m_bMenu, wxGBPosition( 0, 2 ), wxGBSpan( 2, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); + + + gbSizerOptions->AddGrowableCol( 0 ); + gbSizerOptions->AddGrowableCol( 1 ); + gbSizerOptions->AddGrowableRow( 0 ); + gbSizerOptions->AddGrowableRow( 1 ); + + bMainSizer->Add( gbSizerOptions, 0, wxEXPAND|wxLEFT, 5 ); + m_runningResultsBook = new wxSimplebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); running = new wxPanel( m_runningResultsBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizer14; @@ -195,6 +214,7 @@ DIALOG_ERC_BASE::DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id, const wxStrin // Connect Events this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_ERC_BASE::OnCloseErcDialog ) ); + m_bMenu->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ERC_BASE::OnMenu ), NULL, this ); m_messages->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_ERC_BASE::OnLinkClicked ), NULL, this ); m_markerDataView->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemDClick ), NULL, this ); m_markerDataView->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemRClick ), NULL, this ); @@ -216,6 +236,7 @@ DIALOG_ERC_BASE::~DIALOG_ERC_BASE() { // Disconnect Events this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_ERC_BASE::OnCloseErcDialog ) ); + m_bMenu->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ERC_BASE::OnMenu ), NULL, this ); m_messages->Disconnect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_ERC_BASE::OnLinkClicked ), NULL, this ); m_markerDataView->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemDClick ), NULL, this ); m_markerDataView->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemRClick ), NULL, this ); diff --git a/eeschema/dialogs/dialog_erc_base.fbp b/eeschema/dialogs/dialog_erc_base.fbp index 10b754a0b7..20e586d2a6 100644 --- a/eeschema/dialogs/dialog_erc_base.fbp +++ b/eeschema/dialogs/dialog_erc_base.fbp @@ -14,7 +14,7 @@ res UTF-8 dialog_erc_base - 1000 + 7100 1 1 UI @@ -135,6 +135,101 @@ bMainSizer wxVERTICAL none + + 5 + wxEXPAND|wxLEFT + 0 + + + wxBOTH + 0,1 + 0,1 + 0 + + gbSizerOptions + wxFLEX_GROWMODE_SPECIFIED + none + 0 + + 5 + 1 + 2 + wxALIGN_CENTER_VERTICAL + 0 + 2 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + 0 + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 0 + 1 + + 1 + + + 0 + 0 + wxID_ANY + Refresh Grouping + + 0 + + 0 + + + 0 + 30,30 + 1 + m_bMenu + 1 + + + protected + 1 + + + + Resizable + 1 + + + STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnMenu + + + + 5 wxEXPAND|wxTOP|wxRIGHT diff --git a/eeschema/dialogs/dialog_erc_base.h b/eeschema/dialogs/dialog_erc_base.h index eda721e7be..7415ce5628 100644 --- a/eeschema/dialogs/dialog_erc_base.h +++ b/eeschema/dialogs/dialog_erc_base.h @@ -10,6 +10,7 @@ #include #include #include +class STD_BITMAP_BUTTON; class WX_HTML_REPORT_BOX; class WX_INFOBAR; @@ -20,13 +21,16 @@ class WX_INFOBAR; #include #include #include +#include +#include +#include +#include +#include +#include #include #include #include #include -#include -#include -#include #include #include #include @@ -35,12 +39,11 @@ class WX_INFOBAR; #include #include #include -#include #include /////////////////////////////////////////////////////////////////////////// -#define ID_ERASE_DRC_MARKERS 1000 +#define ID_ERASE_DRC_MARKERS 7100 /////////////////////////////////////////////////////////////////////////////// /// Class DIALOG_ERC_BASE @@ -51,6 +54,7 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM protected: WX_INFOBAR* m_infoBar; + STD_BITMAP_BUTTON* m_bMenu; wxSimplebook* m_runningResultsBook; wxPanel* running; wxNotebook* m_runningNotebook; @@ -82,6 +86,7 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM // Virtual event handlers, override them in your derived class virtual void OnCloseErcDialog( wxCloseEvent& event ) { event.Skip(); } + virtual void OnMenu( wxCommandEvent& event ) { event.Skip(); } virtual void OnLinkClicked( wxHtmlLinkEvent& event ) { event.Skip(); } virtual void OnERCItemDClick( wxDataViewEvent& event ) { event.Skip(); } virtual void OnERCItemRClick( wxDataViewEvent& event ) { event.Skip(); } diff --git a/eeschema/eeschema_settings.cpp b/eeschema/eeschema_settings.cpp index bf239c3b55..f7f360f7a0 100644 --- a/eeschema/eeschema_settings.cpp +++ b/eeschema/eeschema_settings.cpp @@ -189,9 +189,6 @@ EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() : m_params.emplace_back( new PARAM( "appearance.edit_label_height", &m_Appearance.edit_label_height, -1 ) ); - m_params.emplace_back( new PARAM( "appearance.erc_severities", - &m_Appearance.erc_severities, RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ) ); - m_params.emplace_back( new PARAM( "appearance.footprint_preview", &m_Appearance.footprint_preview, true ) ); @@ -591,6 +588,12 @@ EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() : m_params.emplace_back( new PARAM( "symbol_chooser.sort_mode", &m_SymChooserPanel.sort_mode, 0 ) ); + m_params.emplace_back( new PARAM( "ERC.crossprobe", + &m_ERCDialog.crossprobe, true ) ); + + m_params.emplace_back( new PARAM( "ERC.scroll_on_crossprobe", + &m_ERCDialog.scroll_on_crossprobe, true ) ); + m_params.emplace_back( new PARAM( "import_graphics.interactive_placement", &m_ImportGraphics.interactive_placement, true ) ); diff --git a/eeschema/eeschema_settings.h b/eeschema/eeschema_settings.h index d7cd42a3bd..d934c7cc56 100644 --- a/eeschema/eeschema_settings.h +++ b/eeschema/eeschema_settings.h @@ -68,7 +68,6 @@ public: int edit_label_width; int edit_label_height; bool edit_label_multiple; - int erc_severities; bool footprint_preview; bool print_sheet_reference; wxString default_font; @@ -265,6 +264,12 @@ public: int sort_mode; }; + struct DIALOG_ERC + { + bool crossprobe; + bool scroll_on_crossprobe; + }; + struct DIALOG_IMPORT_GRAPHICS { bool interactive_placement; @@ -328,40 +333,31 @@ private: static std::vector netlistSettingsFromJson( const nlohmann::json& aObj ); public: - APPEARANCE m_Appearance; + APPEARANCE m_Appearance; + AUI_PANELS m_AuiPanels; - AUTOPLACE_FIELDS m_AutoplaceFields; + DRAWING m_Drawing; + INPUT m_Input; + AUTOPLACE_FIELDS m_AutoplaceFields; + SELECTION m_Selection; - AUI_PANELS m_AuiPanels; - - DRAWING m_Drawing; - - FIND_REPLACE_EXTRA m_FindReplaceExtra; - - INPUT m_Input; - - PAGE_SETTINGS m_PageSettings; - - PANEL_ANNOTATE m_AnnotatePanel; - - PANEL_BOM m_BomPanel; + PAGE_SETTINGS m_PageSettings; + PANEL_ANNOTATE m_AnnotatePanel; + PANEL_BOM m_BomPanel; PANEL_SYMBOL_FIELDS_TABLE m_FieldEditorPanel; + PANEL_LIB_VIEW m_LibViewPanel; + PANEL_NETLIST m_NetlistPanel; + PANEL_SYM_CHOOSER m_SymChooserPanel; - PANEL_LIB_VIEW m_LibViewPanel; + FIND_REPLACE_EXTRA m_FindReplaceExtra; + DIALOG_ERC m_ERCDialog; + DIALOG_IMPORT_GRAPHICS m_ImportGraphics; - PANEL_NETLIST m_NetlistPanel; + SIMULATOR m_Simulator; - PANEL_SYM_CHOOSER m_SymChooserPanel; + bool m_RescueNeverShow; - DIALOG_IMPORT_GRAPHICS m_ImportGraphics; - - SELECTION m_Selection; - - SIMULATOR m_Simulator; - - bool m_RescueNeverShow; - - wxString m_lastSymbolLibDir; + wxString m_lastSymbolLibDir; }; diff --git a/eeschema/sch_edit_frame.cpp b/eeschema/sch_edit_frame.cpp index b988fd259d..709c696e3f 100644 --- a/eeschema/sch_edit_frame.cpp +++ b/eeschema/sch_edit_frame.cpp @@ -2032,7 +2032,7 @@ bool SCH_EDIT_FRAME::GetShowAllPins() const } -void SCH_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem ) +void SCH_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll ) { // nullptr will clear the current focus if( aItem != nullptr && !aItem->IsSCH_ITEM() ) @@ -2060,7 +2060,7 @@ void SCH_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem ) lastBrightenedItemID = aItem->m_Uuid; } - FocusOnLocation( aItem->GetFocusPosition() ); + FocusOnLocation( aItem->GetFocusPosition(), aAllowScroll ); } } diff --git a/eeschema/sch_edit_frame.h b/eeschema/sch_edit_frame.h index ffe661f31e..1d41bd64fd 100644 --- a/eeschema/sch_edit_frame.h +++ b/eeschema/sch_edit_frame.h @@ -755,7 +755,7 @@ public: int GetSchematicJunctionSize(); double GetSchematicHopOverScale(); - void FocusOnItem( EDA_ITEM* aItem ) override; + void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) override; bool IsSyncingSelection() { return m_syncingPcbToSchSelection; } diff --git a/eeschema/symbol_editor/symbol_edit_frame.cpp b/eeschema/symbol_editor/symbol_edit_frame.cpp index 7e79f7530b..9fdbf3f61a 100644 --- a/eeschema/symbol_editor/symbol_edit_frame.cpp +++ b/eeschema/symbol_editor/symbol_edit_frame.cpp @@ -1541,7 +1541,7 @@ const BOX2I SYMBOL_EDIT_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) con } -void SYMBOL_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem ) +void SYMBOL_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll ) { static KIID lastBrightenedItemID( niluuid ); @@ -1587,7 +1587,7 @@ void SYMBOL_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem ) lastBrightenedItemID = aItem->m_Uuid; } - FocusOnLocation( VECTOR2I( aItem->GetFocusPosition().x, -aItem->GetFocusPosition().y ) ); + FocusOnLocation( VECTOR2I( aItem->GetFocusPosition().x, -aItem->GetFocusPosition().y ), aAllowScroll ); } } diff --git a/eeschema/symbol_editor/symbol_edit_frame.h b/eeschema/symbol_editor/symbol_edit_frame.h index 613acf6963..4216da1480 100644 --- a/eeschema/symbol_editor/symbol_edit_frame.h +++ b/eeschema/symbol_editor/symbol_edit_frame.h @@ -377,7 +377,7 @@ public: void KiwayMailIn( KIWAY_EXPRESS& mail ) override; - void FocusOnItem( EDA_ITEM* aItem ) override; + void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) override; /** * Load a symbol from the schematic to edit in place. diff --git a/include/eda_draw_frame.h b/include/eda_draw_frame.h index d797a2777c..67dbf9a41f 100644 --- a/include/eda_draw_frame.h +++ b/include/eda_draw_frame.h @@ -313,7 +313,7 @@ public: * * @param aItem is the item to focus on. nullptr clears the focus. */ - virtual void FocusOnItem( EDA_ITEM* aItem ) {} + virtual void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) {} virtual void ClearFocus() { FocusOnItem( nullptr ); } diff --git a/include/pcb_base_frame.h b/include/pcb_base_frame.h index 53e65c4a5c..e349a9f24c 100644 --- a/include/pcb_base_frame.h +++ b/include/pcb_base_frame.h @@ -220,7 +220,7 @@ public: EDA_ITEM* ResolveItem( const KIID& aId, bool aAllowNullptrReturn = false ) const override; - void FocusOnItem( EDA_ITEM* aItem ) override; + void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) override; void FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer = UNDEFINED_LAYER, bool aAllowScroll = true ); void FocusOnItems( std::vector aItems, PCB_LAYER_ID aLayer = UNDEFINED_LAYER, bool aAllowScroll = true ); diff --git a/pcbnew/dialogs/dialog_drc_base.cpp b/pcbnew/dialogs/dialog_drc_base.cpp index ba19776bc6..7b8053e108 100644 --- a/pcbnew/dialogs/dialog_drc_base.cpp +++ b/pcbnew/dialogs/dialog_drc_base.cpp @@ -52,7 +52,7 @@ DIALOG_DRC_BASE::DIALOG_DRC_BASE( wxWindow* parent, wxWindowID id, const wxStrin m_bMenu = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); m_bMenu->SetMinSize( wxSize( 30,30 ) ); - gbSizerOptions->Add( m_bMenu, wxGBPosition( 0, 2 ), wxGBSpan( 2, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); + gbSizerOptions->Add( m_bMenu, wxGBPosition( 0, 2 ), wxGBSpan( 2, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); gbSizerOptions->AddGrowableCol( 0 ); @@ -60,7 +60,7 @@ DIALOG_DRC_BASE::DIALOG_DRC_BASE( wxWindow* parent, wxWindowID id, const wxStrin gbSizerOptions->AddGrowableRow( 0 ); gbSizerOptions->AddGrowableRow( 1 ); - m_MainSizer->Add( gbSizerOptions, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 ); + m_MainSizer->Add( gbSizerOptions, 0, wxEXPAND|wxTOP|wxLEFT, 10 ); m_runningResultsBook = new wxSimplebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); running = new wxPanel( m_runningResultsBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); diff --git a/pcbnew/dialogs/dialog_drc_base.fbp b/pcbnew/dialogs/dialog_drc_base.fbp index e7cde1d88a..6443c84905 100644 --- a/pcbnew/dialogs/dialog_drc_base.fbp +++ b/pcbnew/dialogs/dialog_drc_base.fbp @@ -101,7 +101,7 @@ 10 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxEXPAND|wxTOP|wxLEFT 0 @@ -254,7 +254,7 @@ 5 1 2 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxRIGHT 0 2 diff --git a/pcbnew/pcb_base_frame.cpp b/pcbnew/pcb_base_frame.cpp index 39d69e861f..7b6ff0ae6a 100644 --- a/pcbnew/pcb_base_frame.cpp +++ b/pcbnew/pcb_base_frame.cpp @@ -253,13 +253,13 @@ EDA_ITEM* PCB_BASE_FRAME::ResolveItem( const KIID& aId, bool aAllowNullptrReturn return GetBoard()->ResolveItem( aId, aAllowNullptrReturn ); } -void PCB_BASE_FRAME::FocusOnItem( EDA_ITEM* aItem ) +void PCB_BASE_FRAME::FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll ) { // nullptr will clear the current focus if( aItem != nullptr && !aItem->IsBOARD_ITEM() ) return; - FocusOnItem( static_cast( aItem ), UNDEFINED_LAYER ); + FocusOnItem( static_cast( aItem ), UNDEFINED_LAYER, aAllowScroll ); } void PCB_BASE_FRAME::FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer, bool aAllowScroll )