From d4e3e67b8d6890f3e8dd4466ae67fe64785764e1 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 9 Nov 2021 17:24:53 +0000 Subject: [PATCH] Update kicad_prl file when doing a SaveAs. Fixes https://gitlab.com/kicad/code/kicad/issues/9455 --- common/project/project_local_settings.cpp | 9 +++++++++ include/project/project_local_settings.h | 2 ++ kicad/tools/kicad_manager_control.cpp | 14 +++++++++++--- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/common/project/project_local_settings.cpp b/common/project/project_local_settings.cpp index 7c738b7a35..76ad63f454 100644 --- a/common/project/project_local_settings.cpp +++ b/common/project/project_local_settings.cpp @@ -341,6 +341,15 @@ bool PROJECT_LOCAL_SETTINGS::SaveToFile( const wxString& aDirectory, bool aForce } +bool PROJECT_LOCAL_SETTINGS::SaveAs( const wxString& aDirectory, const wxString& aFile ) +{ + Set( "meta.filename", aFile + "." + ProjectLocalSettingsFileExtension ); + SetFilename( aFile ); + + return JSON_SETTINGS::SaveToFile( aDirectory, true ); +} + + const PROJECT_FILE_STATE* PROJECT_LOCAL_SETTINGS::GetFileState( const wxString& aFileName ) { auto it = std::find_if( m_files.begin(), m_files.end(), diff --git a/include/project/project_local_settings.h b/include/project/project_local_settings.h index fbbbbbe70f..70e06f6cc4 100644 --- a/include/project/project_local_settings.h +++ b/include/project/project_local_settings.h @@ -59,6 +59,8 @@ public: bool MigrateFromLegacy( wxConfigBase* aLegacyConfig ) override; + bool SaveAs( const wxString& aDirectory, const wxString& aFile ); + bool SaveToFile( const wxString& aDirectory = "", bool aForce = false ) override; void SetProject( PROJECT* aProject ) diff --git a/kicad/tools/kicad_manager_control.cpp b/kicad/tools/kicad_manager_control.cpp index ef923adfbb..8b6003466b 100644 --- a/kicad/tools/kicad_manager_control.cpp +++ b/kicad/tools/kicad_manager_control.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -363,7 +364,9 @@ public: wxString ext = destFile.GetExt(); bool atRoot = destFile.GetPath() == m_projectDirPath; - if( ext == LegacyProjectFileExtension || ext == ProjectFileExtension ) + if( ext == LegacyProjectFileExtension + || ext == ProjectFileExtension + || ext == ProjectLocalSettingsFileExtension ) { wxString destPath = destFile.GetPath(); @@ -377,7 +380,7 @@ public: { destFile.SetName( m_newProjectName ); - if( atRoot ) + if( atRoot && ext != ProjectLocalSettingsFileExtension ) m_newProjectFile = destFile; } @@ -386,11 +389,16 @@ public: // All paths in the settings file are relative so we can just do a straight copy KiCopyFile( aSrcFilePath, destFile.GetFullPath(), m_errors ); } - else + else if( ext == ProjectFileExtension ) { PROJECT_FILE projectFile( aSrcFilePath ); projectFile.SaveAs( destFile.GetPath(), destFile.GetName() ); } + else if( ext == ProjectLocalSettingsFileExtension ) + { + PROJECT_LOCAL_SETTINGS projectLocalSettings( nullptr, aSrcFilePath ); + projectLocalSettings.SaveAs( destFile.GetPath(), destFile.GetName() ); + } } else if( ext == KiCadSchematicFileExtension || ext == KiCadSchematicFileExtension + BackupFileSuffix