From 42d9bc4a9895053e77d0ac5faeebae2669443f2c Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 30 Oct 2023 18:12:26 +0000 Subject: [PATCH] Hook up Import Settings to tuning patterns and custom rules. Fixes https://gitlab.com/kicad/code/kicad/-/issues/15980 --- pcbnew/dialogs/dialog_board_setup.cpp | 14 ++ pcbnew/dialogs/dialog_board_setup.h | 1 + pcbnew/dialogs/dialog_import_settings.cpp | 5 +- .../dialogs/dialog_import_settings_base.cpp | 10 ++ .../dialogs/dialog_import_settings_base.fbp | 130 ++++++++++++++++++ pcbnew/dialogs/dialog_import_settings_base.h | 2 + pcbnew/dialogs/panel_setup_rules.cpp | 32 +++++ pcbnew/dialogs/panel_setup_rules.h | 2 + .../dialogs/panel_setup_tuning_patterns.cpp | 23 +++- pcbnew/dialogs/panel_setup_tuning_patterns.h | 5 + 10 files changed, 221 insertions(+), 3 deletions(-) diff --git a/pcbnew/dialogs/dialog_board_setup.cpp b/pcbnew/dialogs/dialog_board_setup.cpp index 12ee771d8e..652359203f 100644 --- a/pcbnew/dialogs/dialog_board_setup.cpp +++ b/pcbnew/dialogs/dialog_board_setup.cpp @@ -69,6 +69,7 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame ) : m_teardropsPage( 0 ), m_tuningPatternsPage( 0 ), m_netclassesPage( 0 ), + m_customRulesPage( 0 ), m_severitiesPage( 0 ) { @@ -183,6 +184,7 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame ) : false ); }, _( "Net Classes" ) ); + m_customRulesPage = m_treebook->GetPageCount(); m_treebook->AddLazySubPage( [this]( wxWindow* aParent ) -> wxWindow* { @@ -378,12 +380,24 @@ void DIALOG_BOARD_SETUP::onAuxiliaryAction( wxCommandEvent& aEvent ) m_teardropsPage )->ImportSettingsFrom( otherBoard ); } + if( importDlg.m_TuningPatternsOpt->GetValue() ) + { + RESOLVE_PAGE( PANEL_SETUP_TUNING_PATTERNS, + m_tuningPatternsPage )->ImportSettingsFrom( otherBoard ); + } + if( importDlg.m_MaskAndPasteOpt->GetValue() ) { RESOLVE_PAGE( PANEL_SETUP_MASK_AND_PASTE, m_maskAndPagePage )->ImportSettingsFrom( otherBoard ); } + if( importDlg.m_CustomRulesOpt->GetValue() ) + { + RESOLVE_PAGE( PANEL_SETUP_RULES, + m_customRulesPage )->ImportSettingsFrom( otherBoard ); + } + if( importDlg.m_SeveritiesOpt->GetValue() ) { BOARD_DESIGN_SETTINGS& otherSettings = otherBoard->GetDesignSettings(); diff --git a/pcbnew/dialogs/dialog_board_setup.h b/pcbnew/dialogs/dialog_board_setup.h index e6fde7c86b..0113c0d753 100644 --- a/pcbnew/dialogs/dialog_board_setup.h +++ b/pcbnew/dialogs/dialog_board_setup.h @@ -70,6 +70,7 @@ private: size_t m_teardropsPage; size_t m_tuningPatternsPage; size_t m_netclassesPage; + size_t m_customRulesPage; size_t m_severitiesPage; }; diff --git a/pcbnew/dialogs/dialog_import_settings.cpp b/pcbnew/dialogs/dialog_import_settings.cpp index 2f4c2dd106..2827cc9f3e 100644 --- a/pcbnew/dialogs/dialog_import_settings.cpp +++ b/pcbnew/dialogs/dialog_import_settings.cpp @@ -82,7 +82,8 @@ bool DIALOG_IMPORT_SETTINGS::UpdateImportSettingsButton() bool buttonEnableState = ( m_LayersOpt->IsChecked() || m_MaskAndPasteOpt->IsChecked() || m_ConstraintsOpt->IsChecked() || m_NetclassesOpt->IsChecked() || m_SeveritiesOpt->IsChecked() || m_TextAndGraphicsOpt->IsChecked() - || m_FormattingOpt->IsChecked() || m_TracksAndViasOpt->IsChecked() ); + || m_FormattingOpt->IsChecked() || m_TracksAndViasOpt->IsChecked() + || m_TuningPatternsOpt->IsChecked() || m_CustomRulesOpt->IsChecked() ); m_sdbSizer1OK->Enable( buttonEnableState ); @@ -144,6 +145,8 @@ void DIALOG_IMPORT_SETTINGS::OnSelectAll( wxCommandEvent& event ) m_TracksAndViasOpt->SetValue( m_showSelectAllOnBtn ); m_MaskAndPasteOpt->SetValue( m_showSelectAllOnBtn ); m_SeveritiesOpt->SetValue( m_showSelectAllOnBtn ); + m_TuningPatternsOpt->SetValue( m_showSelectAllOnBtn ); + m_CustomRulesOpt->SetValue( m_showSelectAllOnBtn ); // Ensure "Import Settings" button state is enabled as appropriate UpdateImportSettingsButton(); diff --git a/pcbnew/dialogs/dialog_import_settings_base.cpp b/pcbnew/dialogs/dialog_import_settings_base.cpp index 2ace55052b..6f9bbcb0f8 100644 --- a/pcbnew/dialogs/dialog_import_settings_base.cpp +++ b/pcbnew/dialogs/dialog_import_settings_base.cpp @@ -69,9 +69,15 @@ DIALOG_IMPORT_SETTINGS_BASE::DIALOG_IMPORT_SETTINGS_BASE( wxWindow* parent, wxWi m_TeardropsOpt = new wxCheckBox( this, wxID_ANY, _("Teardrop defaults"), wxDefaultPosition, wxDefaultSize, 0 ); bLeftCol->Add( m_TeardropsOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_TuningPatternsOpt = new wxCheckBox( this, wxID_ANY, _("Length-tuning pattern defaults"), wxDefaultPosition, wxDefaultSize, 0 ); + bLeftCol->Add( m_TuningPatternsOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_NetclassesOpt = new wxCheckBox( this, wxID_ANY, _("Net classes"), wxDefaultPosition, wxDefaultSize, 0 ); bLeftCol->Add( m_NetclassesOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_CustomRulesOpt = new wxCheckBox( this, wxID_ANY, _("Custom rules"), wxDefaultPosition, wxDefaultSize, 0 ); + bLeftCol->Add( m_CustomRulesOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_SeveritiesOpt = new wxCheckBox( this, wxID_ANY, _("Violation severities"), wxDefaultPosition, wxDefaultSize, 0 ); bLeftCol->Add( m_SeveritiesOpt, 0, wxRIGHT|wxLEFT, 5 ); @@ -112,7 +118,9 @@ DIALOG_IMPORT_SETTINGS_BASE::DIALOG_IMPORT_SETTINGS_BASE( wxWindow* parent, wxWi m_TextAndGraphicsOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_ConstraintsOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_TracksAndViasOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); + m_TuningPatternsOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_NetclassesOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); + m_CustomRulesOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_SeveritiesOpt->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_selectAllButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnSelectAll ), NULL, this ); } @@ -126,7 +134,9 @@ DIALOG_IMPORT_SETTINGS_BASE::~DIALOG_IMPORT_SETTINGS_BASE() m_TextAndGraphicsOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_ConstraintsOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_TracksAndViasOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); + m_TuningPatternsOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_NetclassesOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); + m_CustomRulesOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_SeveritiesOpt->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnCheckboxClicked ), NULL, this ); m_selectAllButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_IMPORT_SETTINGS_BASE::OnSelectAll ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_import_settings_base.fbp b/pcbnew/dialogs/dialog_import_settings_base.fbp index 208f1880c7..3d4a758985 100644 --- a/pcbnew/dialogs/dialog_import_settings_base.fbp +++ b/pcbnew/dialogs/dialog_import_settings_base.fbp @@ -803,6 +803,71 @@ + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Length-tuning pattern defaults + + 0 + + + 0 + + 1 + m_TuningPatternsOpt + 1 + + + public + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnCheckboxClicked + + 5 wxBOTTOM|wxRIGHT|wxLEFT @@ -868,6 +933,71 @@ OnCheckboxClicked + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Custom rules + + 0 + + + 0 + + 1 + m_CustomRulesOpt + 1 + + + public + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnCheckboxClicked + + 5 wxRIGHT|wxLEFT diff --git a/pcbnew/dialogs/dialog_import_settings_base.h b/pcbnew/dialogs/dialog_import_settings_base.h index 49316063c2..30d539d9de 100644 --- a/pcbnew/dialogs/dialog_import_settings_base.h +++ b/pcbnew/dialogs/dialog_import_settings_base.h @@ -62,7 +62,9 @@ class DIALOG_IMPORT_SETTINGS_BASE : public DIALOG_SHIM wxCheckBox* m_ConstraintsOpt; wxCheckBox* m_TracksAndViasOpt; wxCheckBox* m_TeardropsOpt; + wxCheckBox* m_TuningPatternsOpt; wxCheckBox* m_NetclassesOpt; + wxCheckBox* m_CustomRulesOpt; wxCheckBox* m_SeveritiesOpt; DIALOG_IMPORT_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Import Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); diff --git a/pcbnew/dialogs/panel_setup_rules.cpp b/pcbnew/dialogs/panel_setup_rules.cpp index 929372cc38..43aa0ea55d 100644 --- a/pcbnew/dialogs/panel_setup_rules.cpp +++ b/pcbnew/dialogs/panel_setup_rules.cpp @@ -38,6 +38,7 @@ #include #include #include +#include "wildcards_and_files_ext.h" PANEL_SETUP_RULES::PANEL_SETUP_RULES( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame ) : PANEL_SETUP_RULES_BASE( aParentWindow ), @@ -706,3 +707,34 @@ void PANEL_SETUP_RULES::OnSyntaxHelp( wxHyperlinkEvent& aEvent ) m_helpWindow->ShowModeless(); } + + +void PANEL_SETUP_RULES::ImportSettingsFrom( BOARD* aBoard ) +{ + if( !m_frame->Prj().IsNullProject() ) + { + wxFileName relFile = aBoard->GetFileName(); + relFile.SetExt( DesignRulesFileExtension ); + + wxFileName absFile( aBoard->GetProject()->AbsolutePath( relFile.GetFullName() ) ); + + if( absFile.FileExists() ) + { + wxTextFile file( absFile.GetFullPath() ); + + if( file.Open() ) + { + for ( wxString str = file.GetFirstLine(); !file.Eof(); str = file.GetNextLine() ) + { + ConvertSmartQuotesAndDashes( &str ); + m_textEditor->AddText( str << '\n' ); + } + + m_textEditor->EmptyUndoBuffer(); + + wxCommandEvent dummy; + OnCompile( dummy ); + } + } + } +} diff --git a/pcbnew/dialogs/panel_setup_rules.h b/pcbnew/dialogs/panel_setup_rules.h index 9c3ee18e2b..974054e1d9 100644 --- a/pcbnew/dialogs/panel_setup_rules.h +++ b/pcbnew/dialogs/panel_setup_rules.h @@ -41,6 +41,8 @@ public: PANEL_SETUP_RULES( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame ); ~PANEL_SETUP_RULES( ) override; + void ImportSettingsFrom( BOARD* aBoard ); + private: void onScintillaCharAdded( wxStyledTextEvent &aEvent ); diff --git a/pcbnew/dialogs/panel_setup_tuning_patterns.cpp b/pcbnew/dialogs/panel_setup_tuning_patterns.cpp index 9bcd1356a1..8648fd81ba 100644 --- a/pcbnew/dialogs/panel_setup_tuning_patterns.cpp +++ b/pcbnew/dialogs/panel_setup_tuning_patterns.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include PANEL_SETUP_TUNING_PATTERNS::PANEL_SETUP_TUNING_PATTERNS( wxWindow* aParent, EDA_DRAW_FRAME* aFrame, PNS::MEANDER_SETTINGS& aTrackSettings, @@ -87,7 +89,7 @@ bool PANEL_SETUP_TUNING_PATTERNS::TransferDataFromWindow() m_trackSettings.m_spacing = m_track_spacing.GetIntValue(); m_trackSettings.m_cornerStyle = m_track_cornerCtrl->GetSelection() ? PNS::MEANDER_STYLE_ROUND : PNS::MEANDER_STYLE_CHAMFER; - m_trackSettings.m_cornerRadiusPercentage = m_track_r.GetValue(); + m_trackSettings.m_cornerRadiusPercentage = m_track_r.GetIntValue(); m_trackSettings.m_singleSided = m_track_singleSided->GetValue(); m_dpSettings.m_minAmplitude = m_dp_minA.GetIntValue(); @@ -104,7 +106,24 @@ bool PANEL_SETUP_TUNING_PATTERNS::TransferDataFromWindow() m_skewSettings.m_spacing = m_skew_spacing.GetIntValue(); m_skewSettings.m_cornerStyle = m_skew_cornerCtrl->GetSelection() ? PNS::MEANDER_STYLE_ROUND : PNS::MEANDER_STYLE_CHAMFER; - m_skewSettings.m_cornerRadiusPercentage = m_skew_r.GetValue(); + m_skewSettings.m_cornerRadiusPercentage = m_skew_r.GetIntValue(); return true; } + + +void PANEL_SETUP_TUNING_PATTERNS::ImportSettingsFrom( BOARD* aBoard ) +{ + PNS::MEANDER_SETTINGS savedTrackSettings = m_trackSettings; + PNS::MEANDER_SETTINGS savedDPSettings = m_dpSettings; + PNS::MEANDER_SETTINGS savedSkewSettings = m_skewSettings; + + m_trackSettings = aBoard->GetDesignSettings().m_singleTrackMeanderSettings; + m_dpSettings = aBoard->GetDesignSettings().m_diffPairMeanderSettings; + m_skewSettings = aBoard->GetDesignSettings().m_skewMeanderSettings; + TransferDataToWindow(); + + m_trackSettings = savedTrackSettings; + m_dpSettings = savedDPSettings; + m_skewSettings = savedSkewSettings; +} diff --git a/pcbnew/dialogs/panel_setup_tuning_patterns.h b/pcbnew/dialogs/panel_setup_tuning_patterns.h index 287710fe0e..833dd542da 100644 --- a/pcbnew/dialogs/panel_setup_tuning_patterns.h +++ b/pcbnew/dialogs/panel_setup_tuning_patterns.h @@ -30,6 +30,9 @@ class MEANDER_SETTINGS; } +class BOARD; + + class PANEL_SETUP_TUNING_PATTERNS : public PANEL_SETUP_TUNING_PATTERNS_BASE { public: @@ -38,6 +41,8 @@ public: PNS::MEANDER_SETTINGS& aDiffPairSettings, PNS::MEANDER_SETTINGS& aSkewSettings ); + void ImportSettingsFrom( BOARD* aBoard ); + private: bool TransferDataToWindow() override; bool TransferDataFromWindow() override;