From 26871b56f072b013009dd04456b26b558c823c56 Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Fri, 28 Feb 2025 18:26:50 +0000
Subject: [PATCH] Provide easier on-ramp for jobsets.

1) Perform initial save of new jobset.
2) Add default output folder to new jobset.
---
 common/jobs/jobset.cpp         | 2 +-
 kicad/dialogs/panel_jobset.cpp | 1 +
 kicad/kicad_manager_frame.cpp  | 7 +++++++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/common/jobs/jobset.cpp b/common/jobs/jobset.cpp
index 13173e6e04..2a763779d6 100644
--- a/common/jobs/jobset.cpp
+++ b/common/jobs/jobset.cpp
@@ -225,7 +225,7 @@ void JOBSET::AddNewJob( wxString aType, JOB* aJob )
 
 JOBSET_OUTPUT* JOBSET::AddNewJobOutput( JOBSET_OUTPUT_TYPE aType )
 {
-    m_outputs.emplace_back( KIID().AsString(), aType);
+    m_outputs.emplace_back( KIID().AsString(), aType );
     SetDirty();
 
     return &m_outputs.back();
diff --git a/kicad/dialogs/panel_jobset.cpp b/kicad/dialogs/panel_jobset.cpp
index b603a8e7fa..f01ee2b795 100644
--- a/kicad/dialogs/panel_jobset.cpp
+++ b/kicad/dialogs/panel_jobset.cpp
@@ -797,6 +797,7 @@ void PANEL_JOBSET::OnAddOutputClick( wxCommandEvent& aEvent )
                 JOBSET_OUTPUT* output = m_jobsFile->AddNewJobOutput( jobType.first );
 
                 DIALOG_JOBSET_OUTPUT_OPTIONS dialog( m_frame, m_jobsFile.get(), output );
+
                 if (dialog.ShowModal() == wxID_OK)
                 {
                     Freeze();
diff --git a/kicad/kicad_manager_frame.cpp b/kicad/kicad_manager_frame.cpp
index 0c9039864c..e9944b4fc4 100644
--- a/kicad/kicad_manager_frame.cpp
+++ b/kicad/kicad_manager_frame.cpp
@@ -773,6 +773,13 @@ void KICAD_MANAGER_FRAME::OpenJobsFile( const wxFileName& aFileName, bool aCreat
 
         jobsFile->LoadFromFile();
 
+        if( aCreate && !aFileName.FileExists() )
+        {
+            JOBSET_OUTPUT* output = jobsFile->AddNewJobOutput( JOBSET_OUTPUT_TYPE::FOLDER );
+            output->m_outputHandler->SetOutputPath( aFileName.GetName() );
+            jobsFile->SaveToFile( wxEmptyString, true );
+        }
+
         PANEL_JOBSET* jobPanel = new PANEL_JOBSET( m_notebook, this, std::move( jobsFile ) );
         jobPanel->SetProjectTied( true );
         jobPanel->SetClosable( true );