From 757a16b4bf922a83343e275794fa62c47142a79a Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Thu, 2 Jan 2025 23:43:58 +0000 Subject: [PATCH] Remember open jobsets. --- common/project/project_local_settings.cpp | 2 + include/project/project_local_settings.h | 2 + kicad/kicad_manager_frame.cpp | 46 ++++++++++++++++------- kicad/kicad_manager_frame.h | 2 + 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/common/project/project_local_settings.cpp b/common/project/project_local_settings.cpp index fb658e75a7..9e23515cf0 100644 --- a/common/project/project_local_settings.cpp +++ b/common/project/project_local_settings.cpp @@ -222,6 +222,8 @@ PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS( PROJECT* aProject, const wxStrin m_params.emplace_back( new PARAM_LIST( "net_inspector_panel.expanded_rows", &m_NetInspectorPanel.expanded_rows, {} ) ); + m_params.emplace_back( new PARAM_LIST( "open_jobsets", &m_OpenJobSets, {} ) ); + m_params.emplace_back( new PARAM_LAMBDA( "project.files", [&]() -> nlohmann::json { diff --git a/include/project/project_local_settings.h b/include/project/project_local_settings.h index 89ba2795db..d00df1ad5e 100644 --- a/include/project/project_local_settings.h +++ b/include/project/project_local_settings.h @@ -92,6 +92,8 @@ public: /// File based state std::vector m_files; + std::vector m_OpenJobSets; + /** * Board settings */ diff --git a/kicad/kicad_manager_frame.cpp b/kicad/kicad_manager_frame.cpp index 9fee97181d..497621c37b 100644 --- a/kicad/kicad_manager_frame.cpp +++ b/kicad/kicad_manager_frame.cpp @@ -329,6 +329,12 @@ void KICAD_MANAGER_FRAME::onNotebookPageCloseRequest( wxAuiNotebookEvent& evt ) { evt.Veto(); } + + CallAfter( + [this]() + { + SaveOpenJobSetsToLocalSettings(); + } ); } else { @@ -600,8 +606,7 @@ bool KICAD_MANAGER_FRAME::canCloseWindow( wxCloseEvent& aEvent ) { wxWindow* page = m_notebook->GetPage( i ); - PANEL_NOTEBOOK_BASE* panel = dynamic_cast( page ); - if( panel ) + if( PANEL_NOTEBOOK_BASE* panel = dynamic_cast( page ) ) { if( !panel->GetCanClose() ) return false; @@ -649,11 +654,8 @@ void KICAD_MANAGER_FRAME::doCloseWindow() { wxWindow* page = m_notebook->GetPage( i ); - PANEL_NOTEBOOK_BASE* panel = dynamic_cast( page ); - if( panel ) - { + if( PANEL_NOTEBOOK_BASE* panel = dynamic_cast( page ) ) m_notebook->DeletePage( i ); - } } m_leftWin->Show( false ); @@ -667,6 +669,22 @@ void KICAD_MANAGER_FRAME::doCloseWindow() } +void KICAD_MANAGER_FRAME::SaveOpenJobSetsToLocalSettings() +{ + PROJECT_LOCAL_SETTINGS& cfg = Prj().GetLocalSettings(); + + cfg.m_OpenJobSets.clear(); + + for( size_t i = 0; i < m_notebook->GetPageCount(); i++ ) + { + if( PANEL_JOBS* jobset = dynamic_cast( m_notebook->GetPage( i ) ) ) + cfg.m_OpenJobSets.emplace_back( jobset->GetFilePath() ); + } + + cfg.SaveToFile( Prj().GetProjectPath() ); +} + + void KICAD_MANAGER_FRAME::OnExit( wxCommandEvent& event ) { Close( true ); @@ -698,8 +716,7 @@ bool KICAD_MANAGER_FRAME::CloseProject( bool aSave ) { wxWindow* page = m_notebook->GetPage( i ); - PANEL_NOTEBOOK_BASE* panel = dynamic_cast( page ); - if( panel ) + if( PANEL_NOTEBOOK_BASE* panel = dynamic_cast( page ) ) { if( panel->GetProjectTied() ) { @@ -723,10 +740,7 @@ void KICAD_MANAGER_FRAME::OpenJobsFile( const wxFileName& aFileName, bool aCreat for( size_t i = 0; i < m_notebook->GetPageCount(); i++ ) { - wxWindow* page = m_notebook->GetPage( i ); - - PANEL_JOBS* panel = dynamic_cast( page ); - if( panel ) + if( PANEL_JOBS* panel = dynamic_cast( m_notebook->GetPage( i ) ) ) { if( aFileName.GetFullPath() == panel->GetFilePath() ) { @@ -746,8 +760,9 @@ void KICAD_MANAGER_FRAME::OpenJobsFile( const wxFileName& aFileName, bool aCreat PANEL_JOBS* jobPanel = new PANEL_JOBS( m_notebook, this, std::move( jobsFile ) ); jobPanel->SetProjectTied( true ); jobPanel->SetClosable( true ); - m_notebook->AddPage( jobPanel, aFileName.GetFullName(), - true ); + m_notebook->AddPage( jobPanel, aFileName.GetFullName(), true ); + + SaveOpenJobSetsToLocalSettings(); } catch( ... ) { @@ -784,6 +799,9 @@ void KICAD_MANAGER_FRAME::LoadProject( const wxFileName& aProjectFileName ) m_leftWin->ReCreateTreePrj(); + for( const wxString& jobset : Prj().GetLocalSettings().m_OpenJobSets ) + OpenJobsFile( jobset ); + // Rebuild the list of watched paths. // however this is possible only when the main loop event handler is running, // so we use it to run the rebuild function. diff --git a/kicad/kicad_manager_frame.h b/kicad/kicad_manager_frame.h index 9937ff6e7b..49f33287fb 100644 --- a/kicad/kicad_manager_frame.h +++ b/kicad/kicad_manager_frame.h @@ -170,6 +170,8 @@ public: void ReCreateTreePrj(); + void SaveOpenJobSetsToLocalSettings(); + wxWindow* GetToolCanvas() const override; std::shared_ptr GetPcm() { return m_pcm; };