From e761038f161ef91dc0ce24ffd44537814ad328cb Mon Sep 17 00:00:00 2001 From: Jon Evans Date: Sun, 8 Mar 2026 10:07:39 -0400 Subject: [PATCH] Remove parallel-path schematic CLI settings manager This is not necessary, and since 10.0 causes invalid ERC for several reasons: 1) Library loading now relies on grabbing the project path via Pgm().GetSettingsManager() 2) Bus alias definitions now live in the project file, also loaded through Pgm() Also fix an issue where the LoadSchematic helper would wipe out the bus aliases because `SCHEMATIC::Reset` could never be called after the initial creation, but was via `CreateDefaultScreens`. Fixes https://gitlab.com/kicad/code/kicad/-/issues/23326 --- eeschema/eeschema_helpers.cpp | 48 +++++------------------------------ eeschema/eeschema_helpers.h | 3 --- eeschema/schematic.cpp | 1 + 3 files changed, 7 insertions(+), 45 deletions(-) diff --git a/eeschema/eeschema_helpers.cpp b/eeschema/eeschema_helpers.cpp index 08108e9e11..ce2d531422 100644 --- a/eeschema/eeschema_helpers.cpp +++ b/eeschema/eeschema_helpers.cpp @@ -40,7 +40,6 @@ SCH_EDIT_FRAME* EESCHEMA_HELPERS::s_SchEditFrame = nullptr; -SETTINGS_MANAGER* EESCHEMA_HELPERS::s_SettingsManager = nullptr; void EESCHEMA_HELPERS::SetSchEditFrame( SCH_EDIT_FRAME* aSchEditFrame ) @@ -49,42 +48,6 @@ void EESCHEMA_HELPERS::SetSchEditFrame( SCH_EDIT_FRAME* aSchEditFrame ) } -SETTINGS_MANAGER* EESCHEMA_HELPERS::GetSettingsManager() -{ - if( !s_SettingsManager ) - { - if( s_SchEditFrame ) - { - s_SettingsManager = s_SchEditFrame->GetSettingsManager(); - } - else - { - s_SettingsManager = new SETTINGS_MANAGER(); - } - } - - return s_SettingsManager; -} - - -PROJECT* EESCHEMA_HELPERS::GetDefaultProject( bool aSetActive ) -{ - // For some reasons, LoadProject() needs a C locale, so ensure we have the right locale - // This is mainly when running QA Python tests - LOCALE_IO dummy; - - PROJECT* project = GetSettingsManager()->GetProject( "" ); - - if( !project ) - { - GetSettingsManager()->LoadProject( "", aSetActive ); - project = GetSettingsManager()->GetProject( "" ); - } - - return project; -} - - SCHEMATIC* EESCHEMA_HELPERS::LoadSchematic( const wxString& aFileName, bool aSetActive, bool aForceDefaultProject, PROJECT* aProject, bool aCalculateConnectivity ) { @@ -118,10 +81,11 @@ SCHEMATIC* EESCHEMA_HELPERS::LoadSchematic( const wxString& aFileName, LOCALE_IO dummy; PROJECT* project = aProject; + SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); if( !project ) { - project = GetSettingsManager()->GetProject( projectPath ); + project = mgr.GetProject( projectPath ); } if( !aForceDefaultProject ) @@ -130,11 +94,11 @@ SCHEMATIC* EESCHEMA_HELPERS::LoadSchematic( const wxString& aFileName, { if( wxFileExists( projectPath ) ) { - GetSettingsManager()->LoadProject( projectPath, aSetActive ); - project = GetSettingsManager()->GetProject( projectPath ); + mgr.LoadProject( projectPath, aSetActive ); + project = mgr.GetProject( projectPath ); } } - else if( s_SchEditFrame && project == &GetSettingsManager()->Prj() ) + else if( s_SchEditFrame && project == &mgr.Prj() ) { // Project is already loaded? Then so is the board return &s_SchEditFrame->Schematic(); @@ -143,7 +107,7 @@ SCHEMATIC* EESCHEMA_HELPERS::LoadSchematic( const wxString& aFileName, // Board cannot be loaded without a project, so create the default project if( !project || aForceDefaultProject ) - project = GetDefaultProject( aSetActive ); + project = &mgr.Prj(); IO_RELEASER pi( SCH_IO_MGR::FindPlugin( aFormat ) ); diff --git a/eeschema/eeschema_helpers.h b/eeschema/eeschema_helpers.h index 60a426aec2..5cafeaf098 100644 --- a/eeschema/eeschema_helpers.h +++ b/eeschema/eeschema_helpers.h @@ -41,9 +41,7 @@ class PROJECT; class EESCHEMA_HELPERS { public: - static SETTINGS_MANAGER* GetSettingsManager(); static void SetSchEditFrame( SCH_EDIT_FRAME* aSchEditFrame ); - static PROJECT* GetDefaultProject( bool aSetActive ); static SCHEMATIC* LoadSchematic( const wxString& aFileName, bool aSetActive, bool aForceDefaultProject, PROJECT* aProject = nullptr, @@ -56,7 +54,6 @@ public: private: static SCH_EDIT_FRAME* s_SchEditFrame; - static SETTINGS_MANAGER* s_SettingsManager; }; #endif diff --git a/eeschema/schematic.cpp b/eeschema/schematic.cpp index 205e653119..0b742441e8 100644 --- a/eeschema/schematic.cpp +++ b/eeschema/schematic.cpp @@ -169,6 +169,7 @@ void SCHEMATIC::Reset() ensureVirtualRoot(); ensureDefaultTopLevelSheet(); + loadBusAliasesFromProject(); }